如何在Python中计算置信区间
在这篇文章中,我们将研究在Python编程语言中使用各种分布来计算置信区间的不同方法。平均数的置信区间是一个可能包含人口平均数的数值范围,具有一定的置信度。
公式:
Confidence Interval = x(+/-)t*(s/√n)
- x:样本平均数
- t:与信心水平相对应的t值
- s:样本标准差
- n:样本量
方法1:使用t分布计算置信区间
这种方法用于计算n<=30的小数据集的置信区间,为此,用户需要调用scipy.stats库中的t.interval()函数来获得python中给定数据集的群体平均值的置信区间。
语法: st.t.interval(alpha, length, loc, scale))
参数:
- alpha:从返回的范围中抽取一个RV的概率。
- length:数据集的长度
- loc: 位置参数
- scale:刻度参数
示例 1:
在这个例子中,我们将使用大小为(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(alpha=0.90, df=len(gfg_data)-1,
loc=np.mean(gfg_data),
scale=st.sem(gfg_data))
输出:
(2.962098014195961, 4.837901985804038)
示例 2:
在这个例子中,我们将使用大小为(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(alpha=0.99,
df=len(gfg_data)-1,
loc=np.mean(gfg_data),
scale=st.sem(gfg_data))
输出:
(2.3481954013214263, 5.4518045986785735)
从实例1和实例2的解释:
在例1中,计算出的90%人口的置信区间是(2.96-4.83),而在例2中,计算出的99%人口的置信区间是(2.34-5.45),可以解释为例2的置信区间比例1的95%人口的置信区间宽,这意味着[2.34,5.45]的置信区间有99%的机会包含真实的人口平均值。
方法2:使用正态分布计算置信区间
这种方法用于计算n>30的大数据集的置信区间,为此,用户需要调用scipy.stats库中的norm.interval()函数来获得给定数据集的群体平均值的置信区间,在python中数据集为正态分布。
语法: st.norm.interval(alpha, loc, scale))
参数:
- alpha: 从返回的范围中抽取一个RV的概率。
- loc: 位置参数
- scale: 规模参数
示例 3:
在这个例子中,我们将使用大小为(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(alpha=0.90,
loc=np.mean(gfg_data),
scale=st.sem(gfg_data))
输出:
(6.920661262464349, 7.3593387375356505)
示例 4:
在这个例子中,我们将使用大小为(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(alpha=0.99,
loc=np.mean(gfg_data),
scale=st.sem(gfg_data))
输出:
(6.689075889330163, 7.450924110669837)
从例3和例4的解释:
在例3中,计算出的90%人口的置信区间是(6.92-7.35),而在例4中计算出的99%人口的置信区间是(6.68-7.45),可以解释为例4的置信区间比例3的95%人口的置信区间宽,这意味着[6.68,7.45]的置信区间有99%的机会包含真实的人口平均值。