置信区间

参考: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值