用 Python 理解置信区间

源节点: 1883080

这篇文章是作为 数据科学博客马拉松.

目录

  1. 介绍
  2. Z 统计量的置信区间
  3. 解释置信区间
  4. 使用 z 统计量的 CI 假设
  5. 具有 t 统计量的置信区间
  6. 使用 t 统计量的 CI 假设
  7. 使用配对数据制作 t 区间
  8. z 值与 t 值:何时使用什么?
  9. python的置信区间
  10. 尾注

介绍

每当我们解决统计问题时,我们都会关注总体参数的估计,但通常情况下,计算总体参数几乎是不可能的。 相反,我们所做的是从总体中随机抽取样本,并计算样本统计数据以近似总体参数。 但是我们如何知道样本是否真正代表了总体,或者这些样本统计数据与总体参数有多少偏差? 这就是置信区间出现的地方。 那么,这些间隔是什么? 置信区间是样本统计量上下范围的值范围,或者我们也可以将其定义为样本统计量周围的值范围包含真实总体参数的概率。

Z 统计量的置信区间

在深入研究该主题之前,让我们熟悉一些统计术语。

人口: 它是所有相似个体的集合。 比如一个城市的人口,一个大学的学生等等。

样品: 它是从人群中抽取的一小部分相似的个体。 同样,随机样本是从总体中随机抽取的样本。

参数:平均值(mu)、标准差(sigma)、比例(p)来自总体。

统计:与样本有关的均值(x bar)、标准偏差(S)、比例(p^)。

Z分数:它是正态分布上任何原始数据点与标准偏差归一化的平均值的距离。 给出: x-mu/西格玛

好的,现在我们准备深入研究置信区间的概念。 出于某种原因,我相信通过相关的例子而不是原始的数学定义来理解概念要好得多。 所以让我们开始吧。

假设,你住在一个人口为 100,000 的城市,选举即将来临。 作为调查员,您必须预测谁将赢得蓝党或黄色选举。 所以,你看到几乎不可能从整个人群中收集信息,所以你随机挑选了 100 个人。 在调查结束时,您发现 62% 的人会投票支持黄色。 现在的问题是,我们是否应该得出结论,黄色会以 62% 的获胜概率获胜,或者整个人口的 62% 会投票给黄色? 嗯,答案是否定的。 我们不确定我们的估计距离真实参数有多远,如果我们再取一个样本,结果可能是 58% 或 65%。 因此,我们将做的是围绕我们的样本统计找到一系列值,这些值最有可能捕捉到真实的人口比例。 这里的比例是指所占的百分比

Python 的置信区间

                                                                   图片属于作者

现在,如果我们取一百个这样的样本并绘制每个样本的样本比例,我们将得到样本比例的正态分布,并且分布的平均值将是总体比例的最近似值。 我们的估计可能位于分布曲线上的任何位置。 根据 3-sigma 规则,我们知道大约 95% 的随机变量与分布均值相差 2 个标准差。 因此,我们可以得出结论, p^ 在 2 个标准偏差内 p 是 95%。 或者我们也可以声明 p 在 p^ 上下 2 个标准偏差内的概率也是 95%。 这两个语句实际上是等效的。 低于和高于 p^ 的这两点是我们的置信区间。

Python 的置信区间

                                                           图片属于作者

如果我们能以某种方式找到 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。 参考 Free Introduction 文章以更好地理解 z-score 和 z-table。

区间由下式给出:(p^ + z*.SE, p^-z*.SE)。

如果给定样本均值而不是样本比例,则标准误差将为 sigma/sqrt(n)。 这里西格玛 是总体标准偏差,因为我们通常没有我们使用样本标准偏差。 但经常观察到,这种给出平均值的估计结果往往有点偏差。 所以在这种情况下,最好使用 t-statistic 而不是 z-statistics。

具有 z 统计量的置信区间的一般公式由下式给出

在这里,统计量是指样本均值或样本比例。 西格玛s 是总体标准差。

解释置信区间

正确解释置信区间非常重要。 考虑前面的民意调查示例,我们计算出 95% 的置信区间为 (0.52,0.62)。 这意味着什么? 好吧,95% 的置信区间意味着如果我们从总体中抽取 n 个样本,那么派生区间的 95% 时间将包含真实的总体比例。 请记住,95% 的置信区间并不意味着该区间包含真实总体比例的概率为 95%。 例如,对于 90% 的置信区间,如果我们从总体中抽取 10 个样本,那么 9 次中有 10 次将包含真实的总体参数。 请看下图以获得更好的理解。

解释置信区间

                                                            图片属于作者

使用 Z 统计量的置信区间假设

我们需要寻找某些假设来使用 z 统计量构建有效的置信区间。

  1. 随机样本:样本必须是随机的。 有不同的抽样方法,如分层抽样、简单随机抽样、整群抽样来获得随机样本。
  2. 正常条件:数据必须满足这个条件 np^>=10 和 n.(1-p^)>=10。 这实质上意味着我们的样本均值的抽样分布需要是正常的,而不是任何一方的偏斜。
  3. 独立:样本需要是独立的。 样本数量必须小于或等于总人口的 10%,或者如果抽样是通过替换进行的。

T 统计量的置信区间

如果样本量相对较小并且没有给出或无法假设总体标准差怎么办? 我们如何构建置信区间? 嗯,这就是 t-statistic 的用武之地。在这里找到置信区间的基本公式保持不变,只是 z* 被 t* 替换。 通式由下式给出

其中 S = 样本标准偏差,n = 样本数

假设您举办了一个聚会,并且您想估计您的客人的平均啤酒消费量。 因此,您获得了 20 个人的随机样本并测量了啤酒消费量。 样本数据是对称的,平均值为 0f 1200 ml,标准偏差为 120 ml。 所以,现在您希望构建一个 95% 的置信区间。

因此,我们有样本标准偏差、样本数量和样本均值。 我们只需要 t*。 因此,自由度为 95(n-19 = 1-20)的 1% 置信区间的 t* 为 2.093。 所以,我们需要的间隔是在计算之后的 (1256.16, 1143.83),误差范围为 56.16。 参考 Free Introduction 视频以了解如何阅读 t 表。

使用 T 统计量的 CI 假设

与此处的 z-statistic 的情况类似,在 t-statistic 的情况下,我们也需要在给定的数据中注意一些条件。

  1. 样本必须是随机的
  2. 样品需要是正常的。 要正常,样本大小应大于或等于 30,或者如果父数据集(即总体)大致正常。 或者如果样本量低于 30,则分布需要大致对称。
  3. 个人观察需要是独立的。 这意味着它遵循 10% 规则,或者抽样是通过替换完成的。

为配对数据制作 T 间隔

到目前为止,我们只使用了一个样本数据。 现在我们将看到如何为配对数据构建 t 间隔。 在配对数据中,我们对同一个人进行两次观察。 例如,比较学生的测试前和测试后的分数或药物和安慰剂对一组人的影响的数据。 在配对数据中,我们在第 3 列中发现了两个观察值之间的差异。 像往常一样,我们将通过一个例子来理解这个概念,

问:一位老师试图评估新课程对考试结果的影响。 以下是观察结果。

配对数据的 T 区间

                                                      图片属于作者

因为我们打算找到平均差的区间,所以我们只需要差的统计数据。 我们将使用之前使用的相同公式

statistic +-(临界值或 t 值)(统计标准差)

xd = 平均差,Sd = 样本标准偏差,对于自由度为 95 t* 的 5% CI,由 2.57 给出。 误差范围 = 0.97 和置信区间 (4.18,6.13)。

解释:从上面的估计我们可以看出置信区间不包含零或负值。 因此,我们可以得出结论,新课程对学生的考试成绩产生了积极影响。 如果它只有负面价值,那么我们可以说课程产生了负面影响。 或者,如果它包含零,那么差异可能为零或课程对测试结果没有影响。

Z 值与 T 值

一开始有很多关于何时使用什么的困惑。 经验法则是当样本大小 >= 30 并且已知总体标准差时使用 z 统计量。 如果样本量 < 30,请使用 t 统计量。 在现实生活中,我们没有总体参数,因此我们将根据样本大小选择 z 或 t。

对于较小的样本(n<30),中心 LImit Theorem 不适用,而使用另一种称为 Student t 分布的分布。 t 分布类似于正态分布,但根据样本大小采取不同的形状。 代替 z 值,使用对于较小样本较大的 t 值,从而产生较大的误差范围。 因为小样本量会不太精确。

Python 的置信区间

Python 有一个庞大的库,支持各种统计计算,让我们的生活更轻松。 在本节中,我们将查看有关幼儿睡眠习惯的数据。 这些观察的 20 名参与者身体健康,行为正常,没有任何睡眠障碍。 我们的目标是分析打盹和不打盹的幼儿的就寝时间。

参考:Akacem LD、Simpkin CT、Carskadon MA、Wright KP Jr、Jenni OG、Achermann P 等。 (2015) 打盹和不打盹的幼儿的生物钟和睡眠时间不同。 公共科学图书馆一号 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) # 设置以便可以看到 DataFrame 的所有列 import math
df = pd.read_csv(nap_no_nap.csv) #读取数据
df.head()
Python 的置信区间

为平均就寝时间创建两个 95% 置信区间,一个用于小睡的幼儿,另一个用于不午睡的幼儿。 首先,我们将把那些午睡到一个新变量中的人和那些没有午睡到另一个新变量中的人分离出“夜间就寝时间”列。 这里的就寝时间是十进制的。

bedtime_nap = df['夜间就寝时间'].loc[df['小睡'] == 1] bedtime_no_nap = df['夜间就寝时间'].loc[df['小睡'] == 0]

打印(len(就寝时间))

打印(长度(就寝时间_no_nap))

输出:15 n 5


现在,我们将找到 nap 和 no_nap 的样本平均就寝时间。

午睡平均床时间 = bedtime_nap.mean() #20.304 no_nap_mean_bedtime = bedtime_no_nap.mean() #19.59

现在,我们将找到 X 的样本标准差绒毛 和X.没有午睡 

午睡_s_bedtime = np.std(bedtime_nap,ddof=1) no_nap_s_bedtime = np.std(bedtime_no_nap,ddof=1)

注意:对于样本标准开发,ddof 参数设置为 1,否则它将成为总体标准开发。

现在,我们将找到 X 的样本标准误绒毛 和X.没有午睡 

午睡_se_mean_bedtime = 午睡_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 ppf 功能。 t.ppf() 的参数是 q = 百分比,df = 自由度,scale = std dev,loc = mean。 由于 95% 置信区间的 t 分布是对称的,因此 q 将为 0.975。 请参阅 Free Introduction 有关 t.ppf() 的更多信息。

小睡_t_star = t.ppf(0.975,df=14) #2.14 no_nap_t_star = t.ppf(0.975,df=5) #2.57

现在,我们将添加这些部分以最终构建我们的置信区间。

小睡_ci_plus = 小睡_平均_就寝时间 + 小睡_t_星*小睡_se_就寝时间

小睡_ci_minus = 小睡_平均_就寝时间 – 小睡_t_星*小睡_se_就寝时间

打印(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

打印(no_nap_ci_minus,no_nap_ci_plus)


输出:19.976680775477412 20.631319224522585 18.95974084563192 20.220259154368087

解读: 

根据上述结果,我们得出结论,我们有 95% 的把握认为,小睡幼儿的平均就寝时间在 19.98 至 20.63(下午)之间,而非午睡幼儿的平均就寝时间在 18.96 至 20.22(下午)之间。 这些结果符合我们的预期,即如果您在白天小睡,您会在深夜入睡。

尾注

所以,这都是关于使用 z 和 t 值的简单置信区间。 在任何统计研究的情况下,这确实是一个重要的概念。 从样本数据中估计总体参数的一种很好的推论统计方法。 置信区间还与假设检验相关,即对于 95% CI,您会为异常留出 5% 的空间。 如果原假设落在置信区间内,则 p 值将很大,我们将无法拒绝原假设。 相反,如果它超出那么我们将有足够的证据来拒绝无效并接受替代假设。

希望你喜欢这篇文章和新年快乐(:

本文中显示的媒体不属于 Analytics Vidhya 所有,其使用由作者自行决定。

资料来源:https://www.analyticsvidhya.com/blog/2022/01/understanding-confidence-intervals-with-python/

时间戳记:

更多来自 分析维迪亚