使用 Python 理解置信区间
目录
一、介绍
二、具有 Z 统计量的置信区间
三、解释置信区间
四、使用 Z 统计量的置信区间假设
五、带有 T 统计量的置信区间
六、 使用 T 统计量的 CI 假设
七、为配对数据创建 T 间隔
八、Z 值与 T 值
九、使用 Python 计算置信区间
十、结尾
一、介绍
每当我们解决统计问题时,我们都会关心总体参数的估计,但通常情况下,计算总体参数几乎是不可能的。我们所做的是从总体中随机抽取样本,并计算样本统计数据,期望近似总体参数。但我们如何知道样本是否是总体的真实代表,或者这些样本统计数据与总体参数的偏差有多大?这就是置信区间发挥作用的地方。那么,这些区间是什么?置信区间是样本统计数据上下的一系列值,或者我们也可以将其定义为样本统计数据周围的一系列值包含真实总体参数的概率。
二、具有 Z 统计量的置信区间
在深入探讨这个话题之前,让我们先熟悉一些统计术语。
人口:所有相似个体的集合。例如,一个城市的人口、一所大学的学生等。
样本:从总体中抽取的一小组相似个体。同样,随机样本是从总体中随机抽取的样本。
参数:来自总体的平均值(mu)、标准差(sigma)、比例(p)。
统计数据:与样本有关的平均值(x bar)、标准差(S)、比例(p^)。
Z 分数:它是正态分布上任何原始数据点与标准差标准化的平均值之间的距离。由x-mu/sigma给出
好了,现在我们准备深入探讨置信区间的概念。出于某种原因,我认为通过相关示例而不是原始的数学定义来理解概念要好得多。那么让我们开始吧。
假设你住在一个人口 10 万的城市,选举在即。作为一名民意调查员,你必须预测谁会赢得选举,蓝党还是黄党。因此,你看几乎不可能从整个人口中收集信息,所以你随机挑选 100 人。在调查结束时,你发现 62% 的人会投票给黄色。现在的问题是,我们应该得出结论,黄色将以 62% 的概率获胜,还是整个人口的 62% 会投票给黄色?嗯,答案是否定的。我们不确定我们的估计与真实参数的差距有多大,如果我们再抽取一个样本,结果可能是 58% 或 65%。所以,我们要做的是在我们的样本统计数据周围找到一个最有可能捕捉真实人口比例的值范围。这里的比例是指投票给黄色的人的百分比。
现在,如果我们抽取一百个这样的样本并绘制每个样本的样本比例,我们将得到抽样比例的正态分布,分布的平均值将是总体比例的最近似值。我们的估计值可以位于分布曲线上的任何位置。根据 3-sigma 规则,我们知道大约 95% 的随机变量位于分布平均值的 2 个标准差之内。因此,我们可以得出结论,p^ 在p的 2 个标准差内的概率是 95%。或者我们也可以说 p 在 p^ 上下 2 个标准差内的概率也是 95%。这两个陈述实际上是等价的。p^ 上下的这两个点是我们的置信区间。
如果我们能以某种方式找到 sigma,我们就可以计算出所需的间隔。但这里的 sigma 是总体参数,我们知道它通常几乎不可能计算出来,所以我们将使用样本统计数据,即标准误差。这给出如下:
其中 p^= 样本比例,n=样本数量
标准误差 = √(0.62 . 0.38/100) = 0.05
因此,2xSE = 0.1
我们的数据的置信区间是 (0.62-0.1,0.62+0.1) 或 (0.52,0.72)。由于我们采用了 2xSE,因此这相当于 95% 的置信区间。
现在,问题是如果我们想创建一个 92% 的置信区间怎么办?在前面的例子中,我们将 2 与 SE 相乘以构建一个 95% 的置信区间,这个 2 是 95% 置信区间的 z 分数(精确值为 1.96),这个值可以从 z 表中找到。92% 置信区间的 z 的临界值为 1.75。请参阅本文以更好地理解 z 分数和 z 表。
间隔由以下公式给出:(p^ + z*.SE , p^-z*.SE)。
如果给出的是样本平均值而不是样本比例,则标准误差将是sigma/sqrt(n)。这里 sigma 是总体标准差,因为我们通常没有,所以我们使用样本标准差。但通常观察到,这种给出平均值的估计结果往往有点偏差。因此在这种情况下,最好使用 t 统计量而不是 z 统计量。
具有 z 统计量的置信区间的一般公式如下
此处,统计数据是指样本均值或样本比例。sigma是总体标准差。
三、解释置信区间
正确解释置信区间非常重要。考虑前面的民意调查示例,我们计算出的 95% 置信区间为 (0.52,0.62)。这是什么意思?95% 的置信区间意味着如果我们从总体中抽取 n 个样本,那么 95% 的时间得到的区间将包含真实的总体比例。请记住,95% 的置信区间并不意味着区间包含真实总体比例的概率为 95%。例如,对于 90% 的置信区间,如果我们从总体中抽取 10 个样本,那么 10 次中有 9 次该区间将包含真实的总体参数。请看下图以更好地理解。
图片属于作者
四、使用 Z 统计量的置信区间假设
我们需要寻找某些假设才能使用 z 统计量构建有效的置信区间。
- 随机样本:样本需要随机。有不同的抽样方法,如分层抽样、简单随机抽样、整群抽样来获取随机样本。
- 正常条件:数据必须满足此条件 np^>=10 和 n.(1-p^)>=10。这本质上意味着我们的样本均值的抽样分布需要是正态的,而不是偏向任何一边。
- 独立:样本需要独立。样本数量需要小于或等于总体的 10%,或者采用替换抽样。
五、带有 T 统计量的置信区间
如果样本量相对较小,且未给出或无法假设总体标准差,该怎么办?我们如何构建置信区间?好吧,这就是 t 统计量的用武之地。这里查找置信区间的基本公式保持不变,只是将 z* 替换为 t*。一般公式如下
其中 S = 样本标准差,n = 样本数量
假设您举办了一场派对,您想估计客人的平均啤酒消费量。因此,您随机抽取了 20 个人的样本并测量了啤酒消费量。样本数据是对称的,平均值为 1200 毫升,标准差为 120 毫升。因此,现在您希望构建一个 95% 的置信区间。
因此,我们有样本标准差、样本数量和样本平均值。我们所需要的只是 t*。因此,自由度为 19(n-1 = 20-1)的 95% 置信区间的 t* 为 2.093。因此,计算后我们所需的区间为 (1256.16, 1143.83),误差幅度为 56.16。请参阅这观看视频了解如何阅读 t 表。
六、 使用 T 统计量的 CI 假设
与 z 统计量的情况类似,在 t 统计量的情况下,我们也需要在给定的数据中注意一些情况。
- 样本需要随机
- 样本需要是正态的。要达到正态,样本量应大于或等于 30,或者父数据集(即总体)大致是正态的。或者,如果样本量低于 30,则分布需要大致对称。
- 单个观察结果需要独立。这意味着它遵循 10% 规则或采用替换抽样。
七、为配对数据创建 T 间隔
到目前为止,我们只使用了单样本数据。现在我们将了解如何为配对数据构建 t 区间。在配对数据中,我们对同一个人进行两次观察。例如,比较学生的测试前和测试后分数或药物和安慰剂对一组人的影响的数据。在配对数据中,我们在第三列中发现了两次观察之间的差异。像往常一样,我们将通过一个例子来理解这个概念,
问:一位老师试图评估新课程对考试成绩的影响。以下是观察结果。
图片属于作者
由于我们打算找到平均差异的区间,因此我们只需要差异的统计数据。我们将使用之前使用的相同公式
统计量 +-(临界值或 t 值)(统计量的标准差)
x d = 差异平均值,S d = 样本标准差,95% CI,自由度 5 t* 为 2.57。误差幅度 = 0.97,置信区间 (4.18,6.13)。
解释:从上述估计中我们可以看出,置信区间不包含零或负值。因此,我们可以得出结论,新课程对学生的考试成绩产生了积极影响。如果它只有负值,那么我们可以说课程产生了负面影响。或者如果它包含零,那么差异可能为零或课程对考试结果没有影响。
八、Z 值与 T 值
一开始,人们对于何时使用什么方法有很多困惑。经验法则是,当样本量 >= 30 且已知总体标准差时,使用 z 统计量。如果样本量 < 30,则使用 t 统计量。在现实生活中,我们没有总体参数,因此我们将根据样本量使用 z 或 t。
对于较小的样本(n<30),中心极限定理不适用,而是使用另一种分布,称为学生 t 分布。t 分布类似于正态分布,但根据样本大小呈现不同的形状。与 z 值不同,t 值对于较小的样本较大,从而产生较大的误差幅度。因为样本量较小,精度会降低。
九、使用 Python 计算置信区间
Python 拥有庞大的库,支持各种统计计算,让我们的生活更加轻松。在本节中,我们将研究幼儿睡眠习惯的数据。这些观察的 20 名参与者身体健康、行为正常,没有任何睡眠障碍。我们的目标是分析午睡和不午睡的幼儿的就寝时间。
参考文献:Akacem LD、Simpkin CT、Carskadon MA、Wright KP Jr、Jenni OG、Achermann P 等。(2015 年)午睡和不午睡的幼儿的昼夜节律和睡眠时间有所不同。PLoS ONE 10(4): e0125181。https: //doi.org/10.1371/journal.pone.0125181
我们将导入所需的库
import numpy as np
import pandas as pd
from scipy.stats import t
pd.set_option('display.max_columns', 30) # set so can see all columns of the DataFrame
import math
df = pd.read_csv(nap_no_nap.csv) #reading data
df.head()
为平均就寝时间创建两个 95% 置信区间,一个用于午睡的幼儿,另一个用于不午睡的幼儿。首先,我们将午睡的幼儿的“夜间就寝时间”列分离到一个新变量中,将不午睡的幼儿的“夜间就寝时间”列分离到另一个新变量中。这里的就寝时间是小数。
bedtime_nap = df['night bedtime'].loc[df['napping'] == 1] bedtime_no_nap = df['night bedtime'].loc[df['napping'] == 0]
输出:15 n 5
现在,我们将找到小睡和非小睡的样本平均就寝时间。
nap_mean_bedtime = bedtime_nap.mean() #20.304
no_nap_mean_bedtime = bedtime_no_nap.mean() #19.59
现在,我们将找到 X nap 和 X no nap 的样本标准差
nap_s_bedtime = np.std(bedtime_nap,ddof=1)
no_nap_s_bedtime = np.std(bedtime_no_nap,ddof=1)
注意:样本标准差的 ddof 参数设置为 1,否则将变为总体标准差。
现在,我们将找到 X nap和 X no nap 的样本标准误差
nap_se_mean_bedtime = nap_s_bedtime/math.sqrt(len(bedtime_nap)) #0.1526
no_nap_se_mean_bedtime = no_nap_s_bedtime/math.sqrt(len(bedtime_no_nap)) #0.2270
到目前为止一切顺利,现在样本量很小,而且我们没有人口比例的标准差,我们将使用 t* 值。找到 t* 值的一种方法是使用scipy.stats t.ppf函数。t.ppf() 的参数是 q = 百分比、df = 自由度、scale = 标准差、loc = 平均值。由于 t 分布对于 95% 置信区间是对称的,因此 q 将为 0.975。 有关 t.ppf() 的更多信息,请参阅此处。
nap_t_star = t.ppf(0.975,df=14) #2.14
no_nap_t_star = t.ppf(0.975,df=5) #2.57
现在,我们将各个部分相加,最终构建我们的置信区间。
nap_ci_plus = nap_mean_bedtime + nap_t_star*nap_se_bedtime
nap_ci_minus = nap_mean_bedtime – nap_t_star*nap_se_bedtime
print(nap_ci_minus,nap_ci_plus)
no_nap_ci_plus = no_nap_mean_bedtime + no_nap_t_star*nap_se_bedtime
no_nap_ci_minus = no_nap_mean_bedtime – no_nap_t_star*nap_se_bedtime
print(no_nap_ci_minus,no_nap_ci_plus)
output: 19.976680775477412 20.631319224522585 18.95974084563192 20.220259154368087
解释:
从以上结果中,我们得出结论,我们有 95% 的把握认为,午睡幼儿的平均就寝时间在 19.98 至 20.63 之间,而非午睡幼儿的平均就寝时间在 18.96 至 20.22 之间。这些结果符合我们的预期,即如果您在白天小睡,您晚上就会睡得很晚。
十、结尾
所以,这都是关于使用 z 和 t 值的简单置信区间。对于任何统计研究来说,这确实是一个重要的概念。这是一种很好的推断统计方法,可以从样本数据中估计总体参数。置信区间也与假设检验有关,对于 95% 的 CI,您会为异常留出 5% 的空间。如果零假设落在置信区间内,则 p 值将很大,我们将无法拒绝零假设。相反,如果它超出范围,我们将有足够的证据拒绝零假设并接受备选假设。