空值永远为假?这个经典编程陷阱至今仍在困扰开发者
速览
本文回顾了2014年一篇关于SQL中NULL值逻辑判断的经典技术文章。文章深入探讨了NULL在布尔表达式中的行为,指出其既非真也非假的三值逻辑特性。这一讨论对于理解数据库查询中的边界条件和避免数据错误具有长期的参考价值。
AI 深度解读
The Null Is Always False (Except When It Is True) (2014) 深度解读
背景
在统计学和科学研究中,零假设显著性检验(Null Hypothesis Significance Testing, NHST)长期以来占据着核心地位。其基本逻辑是:零假设(Null Hypothesis)假定两个总体均值之间的差异恰好为零。然而,从这两个总体中抽取的样本均值会随着每次抽样而变化,且数据量越少,方差越大。随着样本量趋于无穷大,两个均值之间的差异会无限接近于零。这是频率学派(Frequentist)统计方法的一个核心假设。
因此,只要总体中的差异为零,样本中观察到的差异并非恰好为零这一事实并不重要。然而,这一假设在现实世界中是否成立一直备受争议。
核心内容
零假设在现实世界中是否真的“永远为假”?
一些研究者,如 Cohen (1990),对总体差异是否真的恰好为零表示怀疑。Cohen 指出:
“零假设,如果按字面意思理解(而在形式假设检验中只能这样理解),在现实世界中永远是假的。它只能在运行蒙特卡洛模拟(Monte Carlo study)的计算机处理器内部为真(即便如此,一个 stray electron 也可能使其为假)。如果它是假的,哪怕只是微小程度,那么足够大的样本量必然会产生显著结果并导致其被拒绝。所以,如果零假设永远是假的,拒绝它又有什么大不了的?”
拒绝微小差异的代价与困境
拒绝零假设的“大麻烦”之一在于:要拒绝一个极小的差异(例如 Cohen’s d 为 0.001),你需要至少 3100 万名参与者才能在 t 检验中以可观的概率观察到这种统计差异。在如此巨大的样本量下,我们使用的几乎所有统计方法(例如正态性检验)都会失效,并开始返回无意义的结果。
另一个“大麻烦”在于,我们不知道观察到的差异是否会随着样本量的增加而保持同等大小(如果是准确测量的真实效应,理应如此),还是会随着测量次数的增加而变得越来越小,直至不再具有统计显著性(如果实际上没有效应)。Hagen (1997) 在文章《赞美零假设显著性检验》中解释了后一种情况,以防止人们错误地假设只要增加参与者,每个观察到的差异都会变得显著。他写道:
“因此,虽然看起来越来越大的 N(样本量)正在追逐越来越小的差异,但当零假设为真时,执行追逐的检验统计量的方差是它所追逐的差异方差的函数。因此,‘追逐者’永远不会离‘被追逐者’更近。”
“真实世界”的动态性与频率学派的视角
更关键的问题是:现实世界中是否真的总是存在真实的差异?以及“真实世界”究竟指什么?
让我们考虑现实世界中的人群。当你阅读这句话时,人群中有些人去世了,有些人出生了。对于大多数心理学问题而言,总体与永恒运行的蒙特卡洛模拟惊人地相似。即使你能在一毫秒内测量世界上所有人,且测试-重测相关性完美,你现在得到的答案与一小时后得到的答案也会不同。
频率学派(使用 NHST 的人)并不特别关心“现在”、“一小时后”或“下周四”的确切值,而是关心“长期”的平均值。今天现实世界中的值可能永远不为零,但也永远不是某个固定值,因为它在不断变化。如果我们想对世界做出可推广的陈述,我认为零假设在任何特定时刻都不精确为真这一事实并不是问题。
随机化与 p 值的分布
当条件分配可以实现完美随机化,且零假设为真时,每个 p 值出现的可能性是相等的。Jim Grange 的一篇精彩博客文章通过 R 语言模拟解释了如果零假设为真,p 值将服从均匀分布。你可以修改他的脚本,改变样本量(例如每组 100,000)或方差,只要两组的均值保持相同,p 值就会呈均匀分布。
虽然理论上差异可能在长期内围绕零随机波动,但一些研究者认为这通常不成立。特别是在相关研究或参与者未被随机分配到条件的任何情况下,这是一个真正的问题。
Meehl 指出,在心理学中,每个个体差异变量(如特质、地位、人口统计特征)都与每个其他变量相关,这意味着零假设在实践中几乎从不成立。在这些情况下,测试零假设并非毫无意义,但也不具备信息量。如果一切都与一切相关,你需要建立好的模型并测试这些模型。简单的零假设显著性检验不会带你走得太远。笔者对此表示同意。
实证分析:Many Labs 项目数据
为了说明在大数据集中何时 NHST 能提供信息,何时不提供信息,笔者分析了 Many Labs 项目中包含 6344 名参与者的数据集。笔者分析了 10 个因变量,看它们是否受到 A) 性别 和 B) 在第一个研究中被分配到高锚定或低锚定条件的影响。
- 性别是一个测量的个体差异变量,而非操纵变量,因此可能受到 Meehl 所称的“crud factor”(无关变异因素)的影响。
- 锚定条件是随机分配的。
笔者对 10 个因变量进行了 8 个 t 检验和 2 个卡方检验,因子分别为性别或随机分配到高/低条件。
结果分析:
-
锚定条件(随机分配): 当我们分析 10 个因变量作为锚定条件的函数时,没有任何差异具有统计显著性(尽管参与者超过 6000 人)。你可以尝试运行脚本,重复分析与其他三个锚定问题相关的条件(记得进行多重比较校正),看看随机化如何在非常大的样本量下返回非显著结果。如果零假设永远是假的,拒绝它是非常困难的。显然,当我们分析人们在第一个锚定问题上给出的答案时,我们发现高 vs. 低锚定条件之间存在巨大效应。在这里,NHST 有效。可能确实存在某种机制。如果锚定效应是一种完全新颖的现象,这将是重要的初步发现,随后将是复制、扩展,最后是模型构建和测试。
-
性别(个体差异变量): 如果使用性别作为因子,结果会发生巨大变化。在引用归因、系统合理化、赌徒谬误、想象接触、对艺术和数学的显式评价以及互惠规范相关的因变量上存在性别效应。在政治认同(保守或自由)、响应量表操纵或收益 vs. 损失框架上没有显著差异(尽管 p = .025,对于 5500 名参与者来说,这样高的 p 值比支持备择假设更支持零假设)。
令人惊讶的是,零假设(性别不影响参与者给出的回答)在十个效应中的七个被拒绝。笔者个人(也许因为对性别效应缺乏专业知识)实际上非常惊讶,尽管效应很小(与...)。
关键要点
- 零假设的“虚假”悖论:在现实世界中,由于总体是动态变化的(如人口更替),零假设(差异为零)在字面上永远为假。但这并不意味着 NHST 无用,因为频率学派关注的是长期平均值而非瞬时值。
- 大样本量的陷阱:随着样本量无限增大,极微小的、无实际意义的差异也会变得统计显著。当样本量极大时(如数千万),常规统计检验(如正态性检验)可能失效,且拒绝微小差异需要天文数字般的样本量。
- 随机化的力量:当实验条件通过完美随机化分配时,即使样本量巨大,如果零假设为真(即无真实效应),p 值将呈均匀分布,很难拒绝零假设。这证明了随机化能有效控制无关变量,使 NHST 在检测真实效应时有效。
- 个体差异变量的局限性:对于性别等非操纵的个体差异变量,由于存在“crud factor”(即所有变量间存在广泛的相关性),零假设在实践中几乎从不成立。此时,简单的 NHST 缺乏信息量,应转向构建和测试更复杂的模型。
- 实证对比:在 Many Labs 数据中,随机分配的锚定条件在 n=6344 时未显示出显著差异(符合随机化预期),而性别变量则在 70% 的测试中显示出显著差异,尽管效应量很小。这突显了区分“随机实验”与“相关研究”在
