目录
参考:https://zhuanlan.zhihu.com/p/53976870
1、置信区间&置信度(置信水平)&显著性水平
- 置信区间(Confidence interval):在统计学中,一个概率样本的置信区间(Confidence interval)是对这个样本的某个总体参数的区间估计,展现的是这个参数的真实值有一定概率落在测量结果周围的程度。
- 置信度或置信水平:置信区间给出的是被测量参数的测量值的可信程度,即前面所要求的“一定概率”,这个概率即为置信度,亦称置信水平。
- 显著性水平α:100%*(1-α)即为置信水平
公式:Confidence Interval = x(+/-)t*(s/√n)
- x:样本平均数
- t:与信心水平相对应的t值
- s:样本标准差
- n:样本量
2、如何计算置信区间
2.1 大样本如何计算置信区间
大样本:抽样调查的样本数量大于30
。 此时可近似认为样本抽样分布趋近于正态分布
,符合中心极限定理,并利用样本的均值和标准差来估计总体。
2.1.1 举例理解
举例: 糖果公司用一个100粒糖球的样本得出口味持续时间均值的点估计量为62.7分钟,同时总体方差的点估计量为25分钟,设定置信水平为95%,求糖果总体均值的置信区间。
1.求其抽样的分布(根据样本分布得到样本均值的分布):
100粒糖球为一个抽样,求抽样均值的分布,我们知道当n足够大时,样本均值服从正态分布,即:
2.求置信区间(对样本均值分布进行标准化即Z所属分布,根据置信水平得到z值相应上下限 代入P(Za<Z<Zb)=1-α)
2.1 根据置信水平,确定概率上下限:
2.2 对估计只进行标准化:
2.3 根据P(Z < Za) = 0.025, P(Z > Zb) = 0.025,分别算出Za和Zb分别为-1.96和1.96(查z table可得):
2.4 由于已有样本均值,因此可以得到总体均值的置信区间:
2.1.2 代码举例
使用正态分布计算置信区间,用于计算n>30的大数据集的置信区间,需要调用scipy.stats库
中的norm.interval()
函数来获得给定数据集的群体平均值的置信区间(由于置信区间与置信水平、样本量等因素均有关系,这里的置信区间应该是均值的标准误差Standard Error
: scipy.stats.sem
=s/√n,https://blog.csdn.net/soga235/article/details/114546691,标准差(Standard Deviation, SD) 实际上反映的是数据点的波动情况。而和 标准误差(Standard Error, SE)则是均值的波动情况),在python中数据集为正态分布。
看正态分布表,你会发现95%的区域处在-1.96SD 和+1.96 SD 之间。置信区间(Confidence Interval, CI)也是这样计算的,不同的地方是我们用SE替代SD。
所以计算95%的CI的公式是:95% CI= 均值 ± ( 1.96 x SE)
。
st.norm.interval(alpha, loc, scale))
:
alpha
: 从返回的范围中抽取一个RV的概率。loc
: 位置参数scale
: 规模参数
大小为(n=100
)的随机数据集,并使用norm.interval()函数的norm分布计算90%
的置信区间,并在python中传递α参数为0.90。
import numpy as np
import scipy.stats as st
# define sample data
gfg_data = np.random.randint(5, 10, 100)
# create 90% confidence interval
# for population mean weight
st.norm.interval(confidence=0.90,
loc=np.mean(gfg_data),
scale=st.sem(gfg_data))
输出:(6.870557051936709, 7.349442948063292)
- 我理解:这个结果是表明,在我们用样本去估计 整体均值 的实验过程中,均值在置信区间 (6.870557051936709, 7.349442948063292) 的概率为90%。
在这个例子中,我们将使用大小为(n=100
)的随机数据集,并使用norm.interval()函数的norm分布来计算99%
的置信区间,并在python中传递α参数为0.99。
import numpy as np
import scipy.stats as st
# define sample data
gfg_data = np.random.randint(5, 10, 100)
# create 99% confidence interval
# for population mean weight
st.norm.interval(confidence=0.99,
loc=np.mean(gfg_data),
scale=st.sem(gfg_data))
输出:(6.689075889330163, 7.450924110669837)
2.2 小样本如何计算置信区间
- 小样本:抽样调查的样本数量小于30,此时可近似认为样本抽样分布趋近于t分布。
- 自由度:指在不影响给定限制条件的情况下,可以自由变化信息的数量(自由度公式中n表示样本大小)。
2.2.1 举例理解
举例:7名学生在使用了新研制的钙片3个月后,他们的血液中的钙含量分别上升了1.5, 2.9, 0.9, 3.9, 3.2, 2.1, 1.9。设定置信水平为95%,求所有使用新钙片的学生的钙含量增加平均值的置信区间。
1.求其抽样的分布(根据样本的分布得到样本均值及标准误差):
抽样样本的容量为7,自由度为(n-1)=6,均值为:2.34,无偏方差为1.04(根据样本方差及自由度求得)。因为样本的无偏方差可认为是总体方差,所以总体方差为1.04,则抽样样本均值的方差为1.04/7=0.149,故抽样样本均值的标准差(即标准误差)为0.385。
(此处应注意区别:样本的无偏方差、抽样样本均值的方差)
2.求置信区间(根据自由度及置信水平查表得t值,代入 样本均值±t*标准误差 求上下限):
2.1 此时自由度为6,按双侧检验置信水平95%查t table可得t=2.447
2.2 求出置信区间上下限a,b及置信区间:
a=样本平均值-t标准误差=2.34-2.4470.385
b=样本平均值+t标准误差=2.34+2.4470.385
即当我们选用置信水平为95%时,总体均值的置信区间为[ 1.39,3.28 ]。
2.2.2 代码举例
使用 t 分布计算置信区间,用于计算n<=30的小数据集的置信区间,调用scipy.stats库中的t.interval()
函数来获得python中给定数据集的群体平均值的置信区间。
st.t.interval(alpha, length, loc, scale))
alpha
:从返回的范围中抽取一个RV的概率length
:数据集的长度loc
: 位置参数scale
:刻度参数
在这个例子中,我们将使用大小为(n=20
)的数据集,并将使用t分布计算90%
的置信区间,使用t.interval()函数,在python中传递α参数为0.90。
import numpy as np
import scipy.stats as st
# define sample data
gfg_data = [1, 1, 1, 2, 2, 2, 3, 3, 3, 3,
3, 4, 4, 5, 5, 5, 6, 7, 8, 10]
# create 90% confidence interval
st.t.interval(confidence=0.90, df=len(gfg_data)-1,
loc=np.mean(gfg_data),
scale=st.sem(gfg_data))
输出:(2.962098014195961, 4.837901985804038)
在这个例子中,我们将使用大小为(n=20
)的数据集,并将使用t分布计算90%
的置信区间,使用t.interval()函数,在python中传递α参数为0.99。
import numpy as np
import scipy.stats as st
# define sample data
gfg_data = [1, 1, 1, 2, 2, 2, 3, 3, 3,
3, 3, 4, 4, 5, 5, 5, 6,
7, 8, 10]
# create 99% confidence interval
st.t.interval(confidence=0.99,
df=len(gfg_data)-1,
loc=np.mean(gfg_data),
scale=st.sem(gfg_data))
输出:(2.3481954013214263, 5.4518045986785735)
ref:https://geek-docs.com/numpy/numpy-tutorials/how-to-calculate-confidence-intervals-in-python.html