按网上搜到的结果调用scipy.stats
包计算参数已知的置信区间
from scipy import stats as sst
conf_int = sst.norm.interval(0.95, loc=82, scale=20)
# conf_int = sst.norm.cdf(1.96)
conf_int
输出结果如下:
(42.80072030919892, 121.19927969080108)
该结果与书上给出的结果相差巨大
同样计算参数未知的区间估计也是一样
from scipy import stats as sst
conf_int = sst.t.interval(0.95, df=69, loc=9312, scale=4007)
# conf_int = sst.t.ppf(0.975, df=20)
print(conf_int)
输出结果
(1318.2537235663158, 17305.746276433685)
书上的结果
发现个奇怪的点
- 按照置信区间的公式,样本量 n 是参与计算的,但是在
norm.interval
中并没有传递这个参数,按这个方式计算只要样本的均值和标准差相同,不论样本量的大小,最终结果都是一样的
所以尝试求解标准正态分布
from scipy import stats as sst
conf_int = sst.norm.interval(0.95, loc=0, scale=1)
# conf_int = sst.norm.cdf(1.96)
conf_int
(-1.959963984540054, 1.959963984540054)
由上可知这两个api得出的是在均值为loc
,标准差为scale
的概率密度函数下,面积为α
的区间,并不能直接得出我想求的样本的置信区间。
调整一下参数 scale
也是可以直接得到我所需要的样本置信区间
from scipy import stats as sst
import numpy as np
u,sigma,n = 82,20,100
conf_int = sst.norm.interval(0.95, loc=u, scale=sigma/np.sqrt(n))
# 这里 scale 传递的是标准误,不是标准差
print(conf_int)
(78.0800720309199, 85.9199279690801)
截图书籍
商务与经济统计_安德森_第12版