统计学(三)

目录

描述统计与推论统计

描述统计

推论统计

抽样分布与中心极限定理

抽样分布

抽样分布符号法

参数与统计的符号法

两个有用的定理

大数法则

中心极限定理

自助法

置信区间

抽样分布与置信区间

构建置信区间

总体平均数的置信区间

均数差的置信区间

置信区间的应用

统计显著性与实际显著性

传统的置信区间

置信区间的其他相关语言

置信区间的正确解读

总结

假设检验

错误类型

I 类错误

II 类错误

假设检验的一般类型

在两种假设中如何选择?

什么是 p 值?

计算 p 值

连通错误和 p 值

其他要考虑的事情

如果我们样本很大怎么办?

如果我们需要多次检验怎么办?

如何对比置信区间和假设检验?

总结


描述统计与推论统计

描述统计

描述统计 是用来描述收集的数据


推论统计

推论统计 在于使用我们收集的数据对更大的总体数据得出结论

统计量和参数通常是一个群体的平均数或比例。统计量是样本的数值。参数是总体的数值。总体是我们想要研究的整个群体,而样本是总体的一个子集。

抽样分布与中心极限定理

抽样分布

示例:

              

我们通过具体的例子了解了:

  1. 总体 —— 我们想要研究的整个群体。21个学生
  2. 参数 —— 描述总体的数值摘要,通常情况下,我们不知道这个值,所以我们必须尝试估计。
  3. 样本 —— 总体的子集  5个学生
  4. 统计量 —— 描述样本的数值摘要  喝咖啡的学生比例

抽样分布 是样本统计值的分布。这里我们观察 样本为 5 个学生的比例分布(喝咖啡的学生比例)。

可以看出总体参数不变一直为71%,而每次选择5个不同的样本所产生的统计量在变化,抽样分布就是在看统计量的分布

import numpy as np
np.random.seed(42)

students = np.array([1,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0])

#1. 计算出上述数组中喝咖啡的学生的比例,并将此值存储在变量 p 中
p = students.mean()   0.7142857142857143

#2.使用 numpy 的 random.choice 模拟从 students 数组中进行5次取样。喝咖啡学员样本的比例是多少?
sample = np.random.choice(students, 5)
sample.mean()         0.59999999999999998

#3. 重复上述步骤,再另外获取10,000个比例值,其中每个样本的大小为5。把这些数值存储在 sample_props 变量中。
sample_props = []
for _ in range(100000):
    sample = np.random.choice(students, 5)
    sample_props.append(sample.mean())

#4. 这10,000个比例值的平均比例值是多少?该值通常被称为 抽样分布均值 。
np.mean(sample_props)  0.71431800000000001

#5. 21个原始数据值的方差和标准差分别是多少?
np.var(students), np.std(students)    (0.20408163265306126, 0.45175395145262565)

#6. 你获取的10000个比例值的方差和标准差分别是多少?
np.var(sample_props), np.std(sample_props)   (0.040920594876000006, 0.20228839530729389)

#7. 计算 p(1-p),你的哪个答案与它最接近?
p = students.mean()
p*(1-p)   0.20408163265306123

#8. 计算 p(1-p)/n,你的哪个答案与它最接近?
p*(1-p)/5 0.040816326530612249

#9. 需要注意的是, 8. 中的答案通常被称为 抽样分布方差 。
#如果将第一个样本大小更改为20,最终的抽#样分布方差会发生什么变化? 
#模拟并重新计算 6. 与 8. 的答案,检验一下你之前发现的一致性是否仍然#成立。
sample_props20 = []
for _ in range(100000):
    sample = np.random.choice(students, 20)
    sample_props20.append(sample.mean())

np.var(sample_props20), np.std(sample_props20)  (0.010204653959000004, 0.1010180872863865)

最后,从样本数量为5的样本和样本数量为20的样本中进行10000次取样,然后绘制一个直方图。这些分布中的每一个都是一个样本分布。 一个是样本量5的比例(右),另一个是样本量20的样本分布。

抽样分布方差0.040920594876000006,样本方差,总体方差0.20408163265306126。

import matplotlib.pyplot as plt
%matplotlib inline

plt.hist(sample_props20);

plt.hist(sample_props);

     

抽样分布符号法

我们已经学习了抽样分布的一些重要内容:


首先我们将 抽样分布 定义为 样本统计量的分布

我们在之前 ipython 笔记本中模拟创建了容量为 5 和 20 的样本分布。


我们发现比例 (同时也意味着,作为比例,只是数值 0 和 1 的平均数) 具有以下特点。

  1. 抽样分布以初始参数值为中心,即抽样分布均值为原始值的均值。
     
  2. 样本容量的越大,抽样分布方差越低。具体说来,抽样分布的方差等于原始数据(students)的方差除以样本容量。这也同样适用于样本平均数方差!即p*(1-p)为原始数据的方差。p*(1-p)/n为抽样分布的方差,n为样本容量(5、20)如果说
  3. 我们有随机变量 X,和方差σ^{2}\sigma^{2},那么\bar{X} 的分布 (样本平均数的抽样分布) 方差为 \frac{\sigma ^{2}}{n}

参数与统计的符号法

下面这个表格提供了一些最常见的参数和对应统计量。

记住,所有 参数 从属于一个总体,而所有 统计量 从属于一个样本。

两个有用的定理

抽样分布涉及的两个重要数学定理包括:

  1. 大数法则
  2. 中心极限定理

大数法则

大数法则 表示 随着样本容量增加,样本平均数越来越接近总体平均数,但是我们首先如何确定样本平均数可以估计总体平均数呢?我们以后如何识别参数与统计量的其他关系呢?


下面是三种最常见的估计技巧:

数据学家可以很好地理解这些技巧,他们需要理解如何估计一些除了平均数或方差以外不常见的数值。使用其中一种方法"最佳估计",具有必要性。

中心极限定理

中心极限定理 表示 样本容量足够大,平均数的抽样分布越接近正态分布,即抽样分布方差等于总体方差除以样本量

中心极限定理 实际上应用于这些常见的统计量中:

  1. 样本平均数 (\bar{x})
  2. 样本比例 (p)
  3. 样本平均数的差异 (\bar{x_{1}}-\bar{x_{2}}​)
  4. 样本比例的差异 (p_{1}-p_{2}​)

此外,它也可应用于其他统计量 但不能应用于所有统计量! 

练习:

import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline
np.random.seed(42)

pop_data = np.random.gamma(1,100,3000)
plt.hist(pop_data);

sample3 = np.random.choice(pop_data,3)
sample3.mean()  157.40606042572435
 
means_size_3 = []
for _ in range(10000):
    sample3 = np.random.choice(pop_data,3)
    means_size_3.append(sample3.mean())

#抽样分布的样本均值、标准差和方差
np.mean(means_size_3),np.std(means_size_3),np.std(means_size_3)
(100.85076295179599, 57.711022550926657, 57.711022550926657)

#总体的均值、标准差和方差
pop_data.mean(),pop_data.std(),pop_data.var() 
(100.35978700795846, 99.778601879689063, 9955.7693930654896)

#抽样分布的形状
plt.hist(means_size_3);

                

左边看起来还是右偏,所以样本容量为 3 并不 "足够大"。

当抽样分布样本容量为100时,抽样分布的样本均值100.32、方差为99.69,总体的均值100.36、方差9955.7.

注意抽样分布中方差的减少。一般情况下,总是会减少 n 倍。 抽样分布的方差是总体方差除以样本容量 (100)

这就是 中心极限定理 的效果。样本容量为 100,可以足够大,使我们的抽样分布呈钟型!是不是很神奇?!显然总体右偏

你注意到 中心极限定理 应用样本平均数为 100 中,纠正右偏分布。然而,样本容量为 3 无法纠正右偏分布。

你会发现样本容量大,特定统计量的抽样分布永远不能正态分布。所以我们怎么知道哪些统计量可以实现正态分布,哪些不可以呢?样本方差的抽样分布不可。

自助法

自助法 (bootstrap) 是放回抽样。在 python 中使用 random.choice 实际上是自助法。无论选择多少次,我们数据集中任何数字的概率保持不变。我们可以使用自展法,模拟在这节课进行多次的创建抽样分布。

两个有用链接:

  • 你可以通过 这里 学习更多布拉德利·埃弗龙 (Bradley Efron) 知识。 
  • 自助法可以作为推论技巧的原因,更多注释可以参见 这里

所以之前二项式事件和掷骰子课程中都使用了自助法。实际上,如果你抛硬币是正面或掷骰子出现 6,你可以继续抛掷得到这些数值,表明选中后还可以放回。

import numpy as np
np.random.seed(42)

die_vals = np.array([1,2,3,4,5,6])

np.random.choice(die_vals, size=20)
——>  array([4, 5, 3, 5, 5, 2, 3, 3, 3, 5, 4, 3, 6, 5, 2, 4, 6, 6, 2, 4])

replace=False导致无法从6个数字中选择20次,这是不放回抽样的例子。

np.random.choice(die_vals, replace=False, size=20)

np.random.choice(die_vals, replace=False, size=5)
——> array([6, 3, 2, 4, 1])

置信区间

抽样分布与置信区间

置信区间是指由样本统计量所构造的总体参数的估计区间。在统计学中,一个概率样本的置信区间(Confidence interval)是对这个样本的某个总体参数的区间估计。置信区间展现的是这个参数的真实值有一定概率落在测量结果的周围的程度。置信区间给出的是被测量参数的测量值的可信程度,即前面所要求的"一个概率"。

我们可以使用自助法和抽样分布,构建感兴趣参数的置信区间。

通过找出对感兴趣参数进行最好估计的统计量 (例如样本平均数估算总体平均数或样本平均数的差异估算总体平均数的差异),我们可以很容易构建感兴趣参数的置信区间。

学习如何使用样本量抽样分布构建置信区间的例子,这个样本量可以最好地估计你感兴趣的参数。在这个例子中,我们使用样本平均高度,估算总体平均高度。

构建置信区间

总体平均数的置信区间

例子:创建不喝咖啡总体平均高度的置信区间。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

np.random.seed(42)

coffee_full = pd.read_csv('coffee_dataset.csv')
coffee_red = coffee_full.sample(200) #this is the only data you might actually get in the real world.

coffee_full.head() #总体
coffee_red.head()  #样本

       

#样本中喝咖啡的人的比例是多少?不喝咖啡的人的比例是多少?
coffee_red.drinks_coffee.mean()  0.59499999999999997
1 - coffee_red.drinks_coffee.mean()  0.40500000000000003

#在喝咖啡的人中,他们的平均身高是多少?在不喝咖啡的人中,他们的平均身高是多少?
coffee_red.query('drinks_coffee')['height'].mean()  68.119629908586163
coffee_red.query('drinks_coffee == False')['height'].mean()  66.784922799278775

#模拟来自200个原始样本的200个“新”个体。
#在该有放回抽样样本(bootstrap sample)中,喝咖啡的人的比例是多少?不喝咖啡的人的比例是多少?
coffee_red_sample = coffee_red.sample(200,replace = True)
coffee_red_sample.drinks_coffee.mean() ,1 - coffee_red_sample.drinks_coffee.mean()
(0.60499999999999998, 0.39500000000000002)

#现在模拟10,000次有放回抽样,并取每个样本中不喝咖啡的人的平均身高。
#每个有放回抽样样本应该是从200个数据点中取出的第一个样本。
m = []
for _ in range(10000):
    coffee_red_sample = coffee_red.sample(200,replace = True)
    m.append(coffee_red_sample.query('drinks_coffee == False')['height'].mean())

#绘制分布图,并拉出95%置信区间所需的值。
plt.hist(m);
np.percentile(m,2.5),np.percentile(m,97.5) (65.992913281575198, 67.584027382815719)

在这个例子中,关于平均数的抽样分布,你发现了什么?

喝咖啡的样本比例  0.595   不喝咖啡的样本比例  0.405

喝咖啡样本成员的平均高度  68.12  不喝咖啡样本成员的平均高度  66.78

在bootstrap中的喝咖啡比例与初始样本的比例不一致呢。为什么?

#总体中,不喝咖啡人群的平均高度数值是多少?
coffee_full.query('drinks_coffee == False')['height'].mean()  
66.443407762147004

你可以将置信区间理解为 可信度为 95% ,总体平均数 落在你发现的范围内 。 注意根据构建置信区间的目的和每端删除的百分比,百分比和参数都会发生变化。虽然我们通常没有总体数据集,所以无法核对区间是否成功。但是以这种方式构建区间可以采集到 95% 的总体平均数。

总结:利用样本量的抽样分布构建置信区间(假设 可信度为 95%)来代表总体。置信区间上下限代表总体的上下限。

均数差的置信区间

例子:为喝咖啡人群和不喝咖啡人群平均高度的差异,构建了置信区间。

diffs = []
for _ in range(10000):
    bootsamp = sample_data.sample(200, replace = True)
    coff_mean = bootsamp[bootsamp['drinks_coffee'] == True]['height'].mean()
    nocoff_mean = bootsamp[bootsamp['drinks_coffee'] == False]['height'].mean()
    diffs.append(coff_mean - nocoff_mean)
    
np.percentile(diffs, 0.5), np.percentile(diffs, 99.5) 
(0.10258900080921124, 2.5388333707966568)

具体说来,在给定区间 0.1 至 2.54 英寸之间, 与不喝咖啡人群相比,喝咖啡人群的平均高度差异,可信度为 99% 。

可以改变你结论的两部分:置信度和你在区间中采集的参数。

置信区间的应用

虽然你对比了喝咖啡人群与不喝咖啡人群的平均高度,有些其他应用也可以用于对比两组的平均数。

A/B 测试对全球企业是最重要的内容之一。通过这个技巧,你可以改变网页布局的一些内容,了解它如何影响用户。理想情况下,你需要提供一个页面,可以实现更多点击量、更高收益和/或更高的用户满意度。

统计显著性与实际显著性

现实意义应为实际显著性——Practical significance;统计意义应为统计显著性——statistical significance

这里你掌握了 实际 和 统计 意义。使用置信区间和假设检验,你能够在做决策时提供 统计显著性

然而,做决策时考虑 实际显著性 同样很重要。 实际显著性 考虑到所处情况的其他因素,假设检验或置信空间的结果可能不会直接考虑到这种情况。空间时间 或 金钱 等约束条件对商业决定很重要。但是可能不会在统计测试中直接考虑这些因素。

传统的置信区间

一个对于传统方法有根据但是具有潜在偏见的看法是,这些方法在现代统计学计算中不再需要。这些方法在未来计算中重要性不断降低。所以在特定情况下记住这些公式,可能只是这节课的很小一部分。然而,下面这些资源可能是你应该研究几百次的假设检验,其中涉及到传统技巧。

为了学习更多传统方法,参见对应的假设检验文档 此处。每个假设检验都有对应的置信区间,但是可以再次使用自展法,替代这些内容!传统的置信区间构建方法可以被自助法替代。

通过使用这堂课贯穿始终的自助法,构建 python,对比了计算均数差的传统方法(T,Z-score)。

样本容量较大,最终相似性越高。对于较小的样本容量,使用传统方法可以产生区间不正确的设想。样本容量较小,也不适合自助法,因为可能会因为无法较好地展现整个总体,所以产生错误结果。

置信区间的其他相关语言

了解样本容量和置信度与最终分析后置信区间的关系,这是非常重要的。

我们构建了总体平均数的置信区间,得到上限为 20 和宽度为 8 的置信区间。\bar{X}=16 \pm 4(x=95%)

假设你可以控制分析中其他所有条目:

  1. 增加样本容量,会降低置信区间的宽度。样本容量增加,估计值越接近参数(大数定律)。
  2. 增加置信度 (如 95% 增加到 99%) 会增加置信区间的宽度。

你注意到可以计算:

  1. 置信区间 宽度:置信区间上限与下限的差值。
  2. 误差范围 :置信区间宽度的一半,通过对样本估计值的加减,达到置信区间的最终结果。

置信区间的正确解读

置信区间 (和假设检验) 与机器学习

置信区间采用综合方法,基于数据得出结论,因为这些测试旨在理解总体的参数 (即总体数值的集合)。

另外,机器学习采用个别方法得出结论,因为通过每个单独数据点预测结果。

在这个课程的最后一堂课中,你将会学习机器学习两种最基础的方法:线性 回归和 逻辑 回归。

下一项

置信区间采用综合方法,基于数据得出结论,因为这些测试旨在理解总体的参数 (即总体数值的集合)。记住你不能利用置信区间讨论个人用户。置信区间针对总体的集合 ,如比例或平均数。

另外,机器学习采用个别方法得出结论,因为通过每个单独数据点预测结果。

总结

在这节课中,你学习到了:

  1. 如何利用自助法和抽样分布的知识,创建任一总体参数的置信区间。
     
  2. 学习如何构建总体平均数和均数差的置信区间,但实际上可以对你感兴趣的任何参数采取相同过程。
     
  3. 学习如何使用 python 嵌入函数构建置信区间,不过这依赖于中心极限定理等假设(传统方法)。
     
  4. 学习 统计意义 和 现实意义 的区别。
     
  5. 最后学习了置信区间的其他相关语言,如 误差范围 和 置信区间宽度,以及如何正确解读置信区间。记住,置信区间是针对总体中的 参数,而不是针对个别观测。

假设检验

假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。其基本原理是先对总体的特征作出某种假设,然后通过抽样研究的统计推理,对此假设应该被拒绝还是接受作出推断。

具体作法是:根据问题的需要对所研究的总体作某种假设,记作H_{0};选取合适的统计量,这个统计量的选取要使得在假设H_{0}成立时,其分布为已知;由实测的样本,计算出统计量的值,并根据预先给定的显著性水平进行检验,作出拒绝或接受假设H_{0}的判断。常用的假设检验方法有u-检验法、t检验法、χ2检验法(卡方检验)、F-检验法,秩和检验等。

学习设置原假设和备择假设的一些规则:

  1. 在收集数据前,假设H_{0}为真
  2. H_{0}通常表示没有影响或对两组影响相同。
  3. H_{0}​ 和H_{1} 是竞争性、非重叠的假设。
  4. ​ H_{1}可以证明为真。我们试图证明为真的是备择假设。
  5. H_{0}包含一个等号:= 、≤ 或 ≥。
  6. H_{1}​ 包含非空值:≠、> 或 <。

例如表述 "证明有罪之前是无辜的" 表明下列假设为真:

H_{0}​: 无辜的

H_{1}​: 有罪的

我们可以认为在收集数据之前,"无辜的" 为真。然后备择假设必须是竞争性、非重叠的假设。因此备择假设为一个人有罪。

因为我们想测试新页面是否优于已有页面,我们设置备择假设。两个指标需要遵守,一是原假设应当包含等于号,二是备择假设应当包含我们希望为真的陈述。 因此,它应为以下形式:

H_{0}: ​\mu_{1}\leq \mu _{2}

H_{1}: \mu_{1}> \mu _{2}

这里,\mu_{1}​ 代表新页面返回的总体平均数。同样,\mu_{2}代表原来页面返回的总体平均数。

根据你感兴趣的问题,你可以改变需要匹配的零假设和备择假设。

错误类型

第一类错误H_{0}实际成立,但判断H_{0}不成立,犯了"以真为假"的错误。

第二类错误H_{0}实际不成立,但判断它成立,犯了"以假为真"的错误。

I 类错误

I 类错误 包含以下特征:

  1. 你应该设置零假设和备择假设,I 类错误是更严重的错误。
  2. 它们由\alpha 符号表示。
  3. I 类错误的定义是:H_{0}为真时,认为备择假设H_{1} 为真。
  4. I 类错误通常称为 误报

II 类错误

  1. 它们由\beta 符号表示。
  2. II 类错误的定义是:H_{1} 为真时,认为零假设 H_{0}为真。
  3. II 类错误通常称为 漏报

在一些极端情况下,我们通常选择一个假设 (如一直选择零假设),确保某个错误不再出现 (假设我们一直选择零假设,不再出现 I 类错误)。不过,一般来说,一些单一的数据会降低某个错误类型的可能性,增加另一种错误类型的出现几率,两者是存在联系的。

降落伞例子

这个例子可以让你了解假设检验中犯错的极端情况。出现 I 类错误,会有一个人死去。出现 II 错误,你会减少 30 美元。

在接下来课程中你构建的假设检验,你能够选择 I 类错误阈值,并且保证 I 类错误率符合要求后,你的假设检验可以最小化 II 类错误。

import numpy as np
import pandas as pd

par_data = pd.read_csv('parachute_dataset.csv')
par_data.tail(10)

(par_data['actual']!= par_data['predicted']).mean()

#错误总比例
(par_data['actual']!= par_data['predicted']).mean()   0.039972551037913875

#I类错误的比例
(par_data.query('actual == "fails"')['predicted'] == 'opens').sum()/len(par_data) 0.00017155601303825698

#II类错误的比例
(par_data.query('actual == "opens"')['predicted'] == 'fails').sum()/len(par_data)
0.039800995024875621

#如果预测所有降落伞无法打开,则出现 I 类错误的比例
0

#如果预测所有降落伞无法打开,则出现 II 类错误的比例
#如果预测所有降落伞无法打开,所有打开的个体都是 II 类错误。
(par_data['actual'] == 'opens').mean()
0.99176531137416368

11111

假设检验的一般类型

你通常针对 总体参数 进行假设测验,而不是针对统计量。统计量是已经从数据中得到的,因此不需要假设测试验证这些数值。

常见的假设检验包括:

  1. 测试总体平均数 (单样本 t 检验)
  2. 测试均数差 (双样本 t 检验)
  3. 测试个体治疗前后的差异 (配对 t 检验)
  4. 测试总体比例 (单样本 z 检验)
  5. 测试总体比例的差异 (双样本 z 检验)

这有几百个不同的假设检验! 不过,你不是记忆如何完成所有这些检验,而是找到最佳估算参数的统计量,然后使用自助法模拟抽样分布。然后你可以利用抽样分布,帮助选择合适的假设检验。

在两种假设中如何选择?

  • 利用置信区间模拟统计量的抽样分布,然后观察我们的假设与在抽样分布中观察到的是否一致
  • 假设测验的通用方法:模拟我们认为原始假设中会出现的情况,然后观察我们的数据是否与它一致

例子:喝咖啡数据集 (包括喝咖啡和不喝咖啡人群) 中所有个体的平均身高是否大于70?

H_{0}: ​\mu\leqslant 70      

H_{1}: \mu> 70

第一种方法:利用置信区间的逻辑

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

np.random.seed(42)

df = pd.read_csv('coffee_dataset.csv')
sample_df = df.sample(150) 

bootsample_df = df.sample(150,replace=True)
means = []
for _ in range(10000):
    bootsample_df = df.sample(150,replace=True)
    means.append(bootsample_df.height.mean())    

low,high = np.percentile(means,2.5),np.percentile(means,97.5)

plt.hist(means);
plt.axvline(x=low,color = 'r',linewidth = 2);
plt.axvline(x=high,color = 'r',linewidth = 2);

通过使用置信区间,你可以很容易发现区间是否低于零假设空间或备择假设空间,选择你认为正确的假设。显然,我们区间低于 70,表明零假设 (总体平均数低于 70) 实际上为真。

第二种方法:模拟原始假设

在假设检验中,如果数据来自零假设,我们会利用正确的特性,从零假设中模拟抽样分布。

思路:假如原始假设为真,我们用原始假设中最接近备择假设的值(70)和抽样分布的标准偏差(我们可以知道抽样分布的形状)模拟正态分布。如果这个值来自原始假设,根据中心极限定理, 样本容量足够大,平均数的抽样分布越接近正态分布。样本均值应该等于70。如果样本均值不等于70那表示这个值不是原始假设的值。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

np.random.seed(42)

df = pd.read_csv('coffee_dataset.csv')
sample_df = df.sample(150)

bootsample_df = df.sample(150,replace=True)
means = []
for _ in range(10000):
    bootsample_df = df.sample(150,replace=True)
    means.append(bootsample_df.height.mean())    

null_vals = np.random.normal(70,np.std(means),10000)
plt.hist(null_vals);

sample_df.height.mean()  67.63297688228066 

可以看出,样本均值在尾端,不再中心,使用70不在原始假设里。

注意,这两种方式得出的结果是不一样的。这是因为在“模拟原始假设”中是以 μ = 70 为中心模拟出的正态分布,因此最终拒绝的零假设是 μ = 70, 而并非 μ ≤ 70。

你想知道喝咖啡的人的平均身高是否低于不喝咖啡的人的身高?

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

np.random.seed(42)

full_data = pd.read_csv('coffee_dataset.csv')
sample_data = full_data.sample(200)

sample = sample_data.sample(200,replace=True)

#对于10000次迭代:自展程序会对样本数据进行抽样,
#计算喝咖啡的人和不喝咖啡的人的平均身高,并计算每个样本的平均差异。
coff_mean,nocoff_mean,diff_mean = [],[],[]
for _ in range(10000):
    sample = sample_data.sample(200,replace=True)
    coff = sample.query('drinks_coffee')['height'].mean()
    nocoff = sample.query('drinks_coffee == False')['height'].mean()
    coff_mean.append(coff)
    nocoff_mean.append(nocoff)
    diff_mean.append(coff-nocoff)    

np.std(coff_mean),np.std(nocoff_mean),np.std(diff_mean)
(0.24770324916038863, 0.40424838147759407, 0.47073353065613077)

plt.hist(nocoff_mean, alpha = 0.5);
plt.hist(coff_mean, alpha = 0.5);

plt.hist(diff_mean, alpha = 0.5);

         

每个抽样分布都是正太分布,均数差的标准差大于个体的标准差。实际上,均数差的标准差值是单个抽样分布方差总和的平方根。平均数是初始数值的标准差除以样本容量的平方根。

使用你观察到的平均值差异抽样分布来模拟正态分布:如果零假设是真的,你会期望抽样分布是什么样的。

diff = np.random.normal(0,np.std(diff_mean),10000)
plt.hist(diff);

#计算在sample_data中观察到的样本均值差。
coff = sample_data.query('drinks_coffee')['height'].mean()
nocoff = sample_data.query('drinks_coffee == False')['height'].mean()
diff = coff - nocoff   1.3347071093073879

可以看出,样本均值在尾端,不再中心,0不在原始假设里。

什么是 p 值?

p 值的定义是 如果零假设为真,观察到统计量 (或支持备择假设的更多极端) 的概率

你可以学习如何计算这类数值。这个表述中 支持备择假设的更多极端 部分决定了 p 值相关的阴影。

所以,你会得到下列情况:

如果参数大于备择假设中的某个数值,为了得到 p 值,你的阴影可能是这样的:

如果参数小于备择假设中的某个数值,为了得到 p 值,你的阴影可能是这样的:

如果你的参数不等于备择假设中的某个数值,为了得到 p 值,你的阴影可能是这样的:

你可以集成抽样分布,得到每个 p 值的区域。另外,你将会在接下来的概念中得到这些比例。

计算 p 值

例子:喝咖啡数据集 (包括喝咖啡和不喝咖啡人群) 中所有个体的平均身高是否大于70?

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

np.random.seed(42)

df = pd.read_csv('coffee_dataset.csv')
sample_df = df.sample(150)

bootsample_df = df.sample(150,replace=True)
means = []
for _ in range(10000):
    bootsample_df = df.sample(150,replace=True)
    means.append(bootsample_df.height.mean())    

null_vals = np.random.normal(70,np.std(means),10000)
plt.hist(null_vals);

sample_mean = sample_df.height.mean()  67.63297688228066 

对比统计量和零假设中的数值:样本均值为67.63在零假设模拟的末端。所以70不在原始假设里。

(1)如果

H_{0}: ​\mu\leqslant 70      

H_{1}: \mu> 70

(null_vals > sample_mean).mean()   1

因为P值很大,因此我们不会抛弃原始假设。这表明实际均值小于等于70.

(2)如果

H_{0}: ​\mu\geq 70      

H_{1}: \mu< 70

(null_vals < sample_mean).mean()   0

因为P值很小,因此我们要抛弃原始假设,选择备择假设。这表明实际均值小于70.

(3)如果

H_{0}: ​\mu= 70      

H_{1}: \mu\neq 70

null_mean = 70
(null_vals <sample_mean).mean() + (null_vals > null_mean + (null_mean -sample_mean)).mean()

因为P值很小,因此我们要抛弃原始假设。这表明实际均值小于70.

总结假设检验过程:

  1. 模拟零假设中得出统计量的数值。(就是利用原始假设值与抽样分布偏差模拟的正太分布)
  2. 计算你实际从数据中得到统计量的数值。(就是样本的统计量,比如均值,均差值)
  3. 对比统计量和零假设中的数值。
  4. 根据备择假设,计算 被视为极端 空值的比例

假设你想在办公室开展一项新项目,可以提高公司道德水平。你通过评价项目实施前后,测量每个员工的道德水平。你希望了解这个项目是否成功。使用这个场景完成下列匹配。

H_{0}:   新项目不可以提高公司道德水平    

H_{1}: 新项目可以提高公司道德水平

我们所计算的统计量是项目实施后样本平均数减去项目实施前的样本平均数

连通错误和 p 值

p 值是零假设为真时,得到统计量或更极端数值的概率。

所以,p 值小,表示零假设不正确。相反,我们的统计量可能来自备择假设的分布。

p 值很大时,我们可以证明统计量很可能来自零假设。所以我们无法拒绝零假设。

通过对比 p 值和 I 类错误阈值 (\alpha),我们可以决定选择哪个假设。

pval\leq \alpha \Rightarrow 拒绝H_{0}

pval> \alpha \Rightarrow 不拒绝 H_{0}

无论是在零假设还是在备择假设中,陈述时要避免出现 接受 这个单词。我们并不是陈述某个假设为真。相反对于 I 类错误的阈值,你根据零假设中数据的相似性做出决定。所以,可以出现在假设检验中的措辞包括:我们拒绝零假设 或者 我们不拒绝零假设。 这有助于你最初零假设默认为真,并且如果没有收集数据,在测试最后 "选择" 零假设,是正确选择。

其他要考虑的事情

如果我们样本很大怎么办?

解读任何统计结果 (这一点常被忽视) 的最重要一方面在于确保样本可以代表你感兴趣的总体。

尤其是在当今计算机时代收集数据的方式,应答偏差 非常重要,要牢记于心。2016年美国大选中,许多媒体进行的民意调查与实际民意调查存在惊人差异。

假设检验与机器学习

样本容量很大时,假设检验会产生 统计意义 最小的发现。然而,这些发现可能根本不具有现实意义。

例如,假设你在一项针对 100 多万人的研究中发现 从统计学上来说 更多人喜欢啤酒 1,而不是啤酒 2。根据这个结果,你决定开店售卖啤酒 1。然后你发现啤酒 1 的流行度只比啤酒 2 高出 0.0002% (但是在样本容量很大的情况中,这个具有统计意义)。但不具有现实意思。实际上,你应该开店售卖两种啤酒。

假设检验采用综合方法,得出基于数据的结论,因为这些检验旨在了解总体参数 (即综合的总体数值)。

另外,机器学习技巧采用个体方法得出结论,因为他们旨在预测每个特殊数据点的结果。

如果我们需要多次检验怎么办?

如果我们把同一类型的假设检验进行20次,即使零假设实际为真,如果一类假设错误率为5%,可以预计其中一次检验的结果是选择对立假设。

如果完成多个假设检验,你的 I 类错误更加严重。为了纠正这点,通常采用 邦弗朗尼 校正法。这种校正法 非常保守,但是假如 I 类最新错误率应为实际想得到的错误率除以完成检验的数量。

所以,如果你想在 20 个假设检验中把 I 类错误率维持在 1%,邦弗朗尼 校正率应为 0.01/20 = 0.0005。你应该使用这个新比率,对比每 20 个检验的 p 值,做出决定。

import numpy as np
import pandas as pd

df = pd.read_csv('judicial_dataset_pvalues.csv')
df.head()

如果我们将每个个体都视为一个单一的假设检验,找到保守 Bonferroni 校正的 α (即alpha)水平,我们应该用该水平来维持5%的 I 型错误率。

bonf_alpha = 0.05/df.shape[0]
bonf_alpha  6.86530275985171e-06

如果不使用校正,I 型错误的比例是多少?如果使用矫正,I 型错误的比例是多少?

df.query("actual == 'innocent' and pvalue < 0.05").count()[0]/df.shape[0] # If not used
0.001510366607167376

df.query("actual == 'innocent' and pvalue < @bonf_alpha").count()[0]/df.shape[0] # If used
0

思考如何使用假设检验,以及为什么这个例子不能以这种方式使用假设检验。

假设检验针对集合 (总体中的参数) 使用。

最小的 p 值依然大于使用邦弗朗尼校正后的 I 类错误率。

如何对比置信区间和假设检验?

一个双尾假设检验(备择假设中包含≠ )在结论方面与作为置信区间的结论相同,只要:

1 - 0.95 = 0.05

例如,95%置信区间将得出与假设选择的 I 型错误率为 0.05 的假设检验相同的结论,因为:

1 - 0.95 = 0.05

在备择假设是双尾检验的时候。

免费课程:https://classroom.udacity.com/courses/ud201?contentVersion=1.0.0&contentLocale=en-us

总结

你学习到:

  1. 如何设置假设检验。学习了零假设是收集数据前我们假设正确的内容,备择假设是我们想要证明为真的内容。
  2. 学习了 I 类错误和 II 类错误。I 类错误是最严重的错误类型,这与零假设实际为真时选择备择假设相关。
  3. 学习了 p 值是零假设为真的情况下,观察支持备择假设的数据或更极端内容的概率。学习了利用拔靴样本得到的置信区间,可以做出与假设检验相同的决定 (在没有混淆 p 值的情况下)。
  4. 学习了如何根据 p 值做出决定。如果 p 值小于 I 类错误阈值,你可以拒绝零假设,选择备择假设。否则,不拒绝零假设。
  5. 学习了样本容量很大时,任何内容都具有统计意义 (最终拒绝所有零假设),但这些结果不具有现实意义。
  6. 学习了完成多个假设检验时,错误会更加严重。因此使用一些校正法,确保 I 类错误率,非常重要。邦弗朗尼校正是简单且保守的一种方法,你应该用\alpha水平 (或 I 类错误阈值) 除以完成检验的数量。
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值