第4章 概率论与数理统计
概率论与数理统计是数学中的一个有特色的分支,具有自己独特的概念和方法,内容丰富,与很多学科交叉相连,广泛应用于工业、农业、军事和科学技术领域。随机变量的概率计算和数字特征
描述性统计和统计图
参数估计和假设检验
方差分析
一元线性回归模型
常用的数据清洗方法
1.随机变量的概率计算和数字特征
1)随机变量的概率计算
例:设
,
(1)求
;
(2)确定c,使得
代码如下:
from scipy.stats import norm
from scipy.optimize import fsolve
print("p=", norm.cdf(6, 3, 5) - norm.cdf(2, 3, 5))
f = lambda c: norm.cdf(2 * c, 3, 5) - norm.cdf(-3 * c, 3, 5) - 0.6
print("c=", fsolve(f, 0))
运行结果:
例:设
,若
满足条件
,则称
为标准正态分布的上
分位数.试计算几个常用的
的值,并画出
的示意图.
from scipy.stats import norm
from pylab import plot, fill_between, show, text, savefig, rc
from numpy import array, linspace, zeros
alpha = array([0.001, 0.005, 0.01, 0.025, 0.05, 0.10])
za = norm.ppf(1 - alpha, 0, 1) # 求上alpha分位数
print("上alpha分位数分别为", za)
x = linspace(-4, 4, 100)
y = norm.pdf(x, 0, 1)
rc('font', size=16)
rc('text', usetex=False)
plot(x, y) # 画标准正态分布密度曲线
x2 = linspace(za[-1], 4, 100)
y2 = norm.pdf(x2)
y1 = [0] * len(x2)
fill_between(x2, y1, y2, color='r') # y1,y2对应的点之间填充
plot([-4, 4], [0, 0]) # 画水平线
text(1.9, 0.07, "$\\leftarrow\\alpha$=0.1") # 标注
savefig("figure4_2.png", dpi=500)
show()
运行结果:
2)随机变量数字特征简介
3)随机变量数字特征计算及应用
例:计算二项分布b(20,0.8)的均值和方差.
from scipy.stats import binom
n, p = 20, 0.8
print("期望和方差分布为:", binom.stats(n, p))
运行结果:
例:计算二项分布b(20,0.8)的均值、方差、偏度和峰度.
from scipy.stats import binom
n, p = 20, 0.8
mean, variance, skewness, kurtosis = binom.stats(n, p, moments='mvsk')
# 上述语句不显示,只为了说明数据顺序
print("所求的数字特征为:", binom.stats(n, p, moments='mvsk'))
运行结果:
例:路灯维修周期问题.(详细见P126)
from scipy.integrate import quad
from numpy import exp, sqrt, pi, abs
a = 80
b = 0.02
BD = a/b
mu = 4000
s = 100
y = lambda x: x * exp(-(x-mu)**2/(2*s**2))/sqrt(2*pi)/s # 定义积分的被积函数
I = 0
x1 = 0
x2 = 10000
while abs(I - BD) > 1E-16:
c = (x1 + x2) / 2
I = quad(y, -10000, c)[0] # 由3sigma准则这里积分下限取为-10000,取零效果一样
if I > BD:
x2 = c
else:
x1 = c
print("最佳更换周期为:", c)
运行结果:
2.描述性统计和统计图
数理统计研究的对象是受随机因素影响的数据,简称统计。统计是以概率论为基础的一门应用学科。数据样本少则几个,多则成千万个,人们希望能用少数几个包含最多相关信息的数据来体现所研究对象的规律。描述性统计就是搜集、整理、加工和分析统计数据,使之系统化、条理化,以显示出数据资料的趋势、特征和数量关系。它是统计推断的基础,实用性较强,在统计工作中经常使用。
1)统计的基础知识
2)用Python计算统计量
使用NumPy库中的函数可以计算统计量,也可以使用sciy.stats中的函数计算统计量。
NumPy库中计算统计量的函数如下表所示:函数meanmedianptpvarstdcovcorrcoef
功能均值中位数极差方差标准差协方差相关系数
例:学校随机抽取100名学生,测量他们的身高和体重,所得数据如下表,试分别求身高的均值、中位数、极差、方差、标准差;计算身高与体重的协方差、相关系数。
代码如下:
from numpy import reshape, hstack, mean, median, ptp, var, std, cov, corrcoef
import pandas as pd
df = pd.read_excel("Pdata4_6_1.xlsx", header=None)
a = df.values # 提取数据矩阵
h = a[:, ::2] # 提取奇数列身高
w = a[:, 1::2] # 提取偶数列体重
h = reshape(h, (-1, 1)) # 转换成列向量,自动计算行数
w = reshape(w, (-1, 1)) # 转换成列向量,自动计算行数
hw = hstack([h, w]) # 构造两列的数组
print([mean(h), median(h), ptp(h), var(h), std(h)]) # 计算均值,中位数,极差,方差,标准差
print("协方差为:{}\n相关系数为:{}".format(cov(hw.T)[0, 1], corrcoef(hw.T)[0, 1]))
运行结果:
使用Pandas的DataFrame计算统计量:
上例,使用Pandas的describe方法计算相关统计量,并计算身高和体重的偏度、峰度和样本的25%,50%,90%分位数。
代码如下:
from numpy import reshape, c_
import pandas as pd
df = pd.read_excel("Pdata4_6_1.xlsx", header=None)
a = df.values
h1 = a[:, ::2]
w1 = a[:, 1::2]
h2 = reshape(h1, (-