P值并不意味着人们所认为的那样;它们依赖于不太可能实现的隐藏假设;它们偏离了真正的问题。下面是如何在R中使用Bootstrap的方法。 放弃p值,改用Bootstrap置信区间。
抛弃P值
你应该放弃p值的原因有很多,我将在这里研究其中三个主要原因:
- 它们并不意味着人们所认为的那样
- 它们依赖于不太可能实现的隐藏假设
- 它们偏离了真正的问题
1.它们并不意味着人们所认为的那样
当你进行应用数据分析时,无论是在私人、非盈利还是公共部门,你的目标是为决策提供信息。我们需要解决的问题的很大一部分是不确定性:数据告诉我们这个数字是10,但它可能是5?也许是100?我们能依赖数据分析所吐露的数字吗?经过几年,有时是几十年,对商业伙伴的教育,他们一般都能理解不确定性的风险。不幸的是,他们经常从那里跳到假设P值代表一个结果是由机会造成的概率:0.03的P值意味着有3%的机会,我们认为是正数的数字确实是空数或负数。它并不是这样。事实上,它代表的是假设真实值确实为零时看到我们看到的结果的概率。
在科学术语中,真实值为零或为负数被称为无效假设(缩写为H0),而真实值严格高于零被称为替代假设(缩写为H1)。人们错误地认为P值是给定数据的H0的概率,即P(H0|data),而实际上它是给定数据的H0的概率,即P(data|H0)。你可能会想:土豆粑粑,这是在拆台,一个非常小的P值确实是一个好的迹象,表明一个结果不是由于偶然性造成的。在许多情况下,你会大致正确,但在某些情况下,你会完全错误。
让我们举一个简化的但有启示意义的例子:我们想确定罗伯特的公民身份。无效假设:H0,罗伯特是美国公民。替代假设:H1,他不是。我们的数据:我们知道罗伯特是一名美国参议员。在3.3亿美国公民中,有100名参议员,所以在无效假设下,我们数据的概率(即P值)是100/300,000,000≈0.000000303。根据统计学意义的规则,我们可以安全地得出结论,我们的无效假设被拒绝,罗伯特不是美国公民。这显然是错误的,那么什么地方出了问题?如果罗伯特是美国公民,他是美国参议员的概率确实很低,但如果他不是,概率就更低了(即零!)。P值在这里不能帮助我们,即使有更严格的0.01甚至0.001的阈值(关于这个问题的另一种说明,请看xkcd)。
2.它们依赖于隐藏的假设
P值是在所有计算都必须用手完成的时候发明的,因此它们依赖于简化的统计假设。广义上讲,它们假设你观察到的现象服从一些有规律的统计分布,通常是正态分布(或同族的分布)。不幸的是,这很少是真的²。
- 除非你在测量一些低层次的心理生理变量,否则你所关注的人群通常是由异质群体组成的。假设你是 "不可能的汉堡 "的市场经理,正在研究对肉类替代品的需求。你必须考虑到两个群体:一方面是素食主义者,对他们来说,相关的替代品是不同的素食产品;另一方面是肉食者,他们可以被吸引,但与肉食本身相比,他们会更关心味道和价格。
- 正态分布是对称的,在两个方向上都延伸到无穷大。在现实生活中,存在着不对称性、阈值和极限。人们从不购买负数,也不购买无限量的。他们在18岁之前根本不投票,120岁的市场比90岁和60岁的市场要窄得多。
- 相反,我们看到 "肥尾 "分布,其中极端值比正常分布的预期要频繁得多。比起从百万富翁和亿万富翁的数量来看,有更多的亿万富翁。
这意味着,来自标准模型的P值往往是错误的。即使你正确地把它们当作P(data|H0)而不是P(H0|data),它们也常常会有明显的偏差。
3.它们偏离了真正的问题
假设你已经把前面两个问题放在心上,并建立了一个完整的贝叶斯模型,最终使你能够正确地计算P(H0|data),即在观察到的数据下,真实值为零或为负的概率。你应该把它带给你的决策者吗?我认为你不应该,因为它并不反映经济结果。
假设一个商业决策者正在思考两个可能的行动,A和B。根据观察到的数据,零或负效益的概率是。
- 行动A为0.08
- 行动B为0.001
根据这些数字,决策者应该选择行动B吗?如果我告诉你,相应的90%的置信区间是。
- 行动A为[-50万美元;9950万美元]。
- 行动B为[10万;20万]。
行动B可能有较低的概率导致零或负的结果,但它对企业的预期价值要低得多,除非企业是难以置信的规避风险。在大多数情况下,决策者的 "经济意义 "取决于两个问题:
我们有可能获得多少钱?(又称预期值)
在一个 "合理的、可能的最坏情况 "下,我们会损失多少钱?(又称置信区间的下限)
置信区间是回答这些问题的一个更好的工具,而不是单一的概率数字。
使用Bootstrap代替
让我们举一个具体的例子,从我的书中改编和简化¹。一家公司进行了一项时间研究,根据面包师的经验水平,他们需要多长时间来准备定制的蛋糕。让工业工程师在全国各地的商店测量制作一个蛋糕所需的时间,既昂贵又费时,所以数据集只有10个点,如下图所示。

除了样本量非常小之外,它还包含一个异常值,在左上角:一个新员工花了一天的大部分时间为公司的务虚会做一个复杂的蛋糕。应该如何向商业伙伴报告这些数据呢?人们可以抛弃这个极端的观察。但那个观察结果虽然不寻常,但本身并不是一个反常现象。没有测量错误,而这些情况可能时有发生。另一个选择是只报告总的平均持续时间,即56分钟,但这也会产生误导,因为它不会传达数据中的变异性和不确定性。
,或者,我们可以根据传统的统计假设计算一个正常的置信区间(CI)。正态置信区间与P值密切相关:当且仅当相应的置信区间不包括零时,一个估计值才具有统计学意义。正如你在任何统计课上所学到的,正常的95%置信区间的下限等于平均值减去1.96倍的标准误差,而上限等于平均值加1.96倍的标准误差。不幸的是,在目前的情况下,置信区间是[-23;135],我们可以想象,商业伙伴不会对烘烤时间为负数的可能性太客气......
这个问题来自于烘烤时间为正态分布的假设,显然它们不是。人们可以尝试拟合一个更好的分布,但使用Bootstrap置信区间要简单得多。
<3>1.Bootstrap是通过替换抽样来工作的
要建立Bootstrap置信区间,你只需要通过从原始样本中替换抽样来建立 "大量的类似样本"。在R中,用替换法绘图非常简单,我们只需将 "替换 "设置为真:
boot_dat <- slice_sample(dat, n=nrow(dat), replace = TRUE)
为什么我们要用替换法绘图?为了真正掌握Bootstrap发生了什么,值得退一步,记住统计学的要点:我们有一个无法完全检查的群体,所以我们试图根据有限的样本对这个群体进行推断。为此,我们通过统计假设或自举法创建一个 "假想的 "人口。对于统计假设,我们说,"想象这个样本是从一个具有正态分布的群体中抽取的,"然后在此基础上进行推断。用 "自举法",我们会说,"想象人口的概率分布与样本完全相同,"或者说,"想象样本是从一个由大量(或无限)样本组成的人口中抽取的。"然后从该样本中以替换方式抽取,相当于从该假想人口中以非替换方式抽取。正如统计学家所说,"Bootstrap样本对于样本来说就像样本对于人口一样。"
我们把这个过程重复多次(比方说2000次):
mean_lst <- list()
B <- 2000
N <- nrow(dat)
for(i in 1:B){
boot_dat <- slice_sample(dat, n=N, replace = TRUE)
M <- mean(boot_dat$times)
mean_lst[[i]] <- M}
mean_summ <- tibble(means = unlist(mean_lst))
这个过程的结果是一个Bootstrap样本平均值的列表,我们可以用直方图来绘制:

正如你所看到的,直方图是非常不规则的:有一个接近我们原始数据集平均值的峰值,以及与某些模式相对应的较小的峰值。鉴于我们的离群点有多极端,七个峰值中的每一个都对应于它在Bootstrap样本中的重复次数,从零到六。换句话说,它在平均值位于第一个(最左边)峰值的样本中完全没有出现,在平均值位于第二个峰值的样本中正好出现一次,以此类推。
2.从Bootstrap样本中计算出置信区间
从这里,我们可以计算出Bootstrap置信区间(CI)。CI的界限是由前面的平均值的经验分布决定的。我们可以简单地将数值从小到大排序,然后查看2.5%的四分位数和97.5%的四分位数,找到双尾95%的置信区间,而不是试图去拟合一个统计分布(如正态分布)。在2000个样本中,2.5%的四分位数等于第50个最小的平均值的值(因为2,000*0.025=50),而97.5%的四分位数等于从小到大的第1950个平均值的值,或第50个最大的平均值(因为两个尾巴有相同数量的值)。幸运的是,我们不需要手工计算这些:
LL_b <- as.numeric(quantile(mean_summ$means, c(0.025)))
UL_b <- as.numeric(quantile(mean_summ$means, c(0.975)))
下图显示了与之前相同的直方图,但增加了均值的平均值、正常CI界限和Bootstrap CI界限。
2,000个样本的平均值分布,包括平均值(粗蓝线)、正常的95%-CI界限(黑色虚线)和Bootstrap CI界限(蓝色虚线)[/caption]
Bootstrap 95%-CI是[7.50;140.80](加减一些抽样差异),这更符合实际。没有像正常假设那样的负值!
3.Bootstrap对商业决策来说更加灵活和相关
一旦你开始使用Bootstrap,你会对其灵活性感到惊讶。小样本量、不规则分布、商业规则、预期值、有分组的A/B测试:Bootstrap都能做到!
让我们想象一下,例如,我们前面例子中的公司正在考虑制定一个时间承诺--"你的蛋糕在三小时内完成,否则打五折"--并想知道目前一个蛋糕需要超过三个小时才能烤好的频率。我们的估计将是样本百分比:在10个观察到的案例中,有1个发生了这种情况,即10%。但我们不能就这样算了,因为这个估计值有很大的不确定性,我们需要表达出来。10个观察值中的10%比100个或1000个观察值中的10%要不确定得多。那么,我们怎样才能围绕这个10%的数值建立一个CI呢?当然是用Bootstrap!
Bootstrap估计的直方图也提供了一个很好的可视化,向商业伙伴展示:"这条垂直线是实际测量的结果,但你也可以看到它可能采取的所有值"。90%或95%的下限提供了基于现有信息的 "合理的最坏情况"。
最后,如果你的老板或商业伙伴对P值有偏见,Bootstrap提供了一个类似的指标,即达到的显著性水平(ASL)。ASL只是Bootstrap值为零或更少的百分比。这种解释与人们错误地赋予P值的解释非常接近,所以需要的教育非常有限:"ASL是3%,所以有3%的机会,真实值是零或更少;ASL小于0.05,所以我们可以把这个结果视为显著。
结论
总结一下,尽管P值在应用数据分析中仍然无处不在,但它们已经过期了。它们并不意味着人们普遍认为的那样;而且即使它们是那样,那也不是决策者正在寻找的答案。即使在学术界,目前也在大力推动减少对P值的盲目依赖(见下面的ASA声明⁴)。
使用Bootstrap置信区间,既简单又有说服力。它们不依赖于隐藏的统计假设,只依赖于一个直接的假设:整体人口看起来与我们的样本相同。它们提供了关于可能结果的信息,这些信息更丰富,与商业决策更相关。
