Towards Data Science

How to Get More Statistical Power from Fewer Research Participants

8.5内容质量

TL;DR · AI 摘要

通过within-subject设计和交叉统计校正,可在较少参与者中提高统计功效。文章提供在线模拟器和代码实现方法。

核心要点

  • 使用within-subject设计可使每个参与者完成多个条件,提升统计功效
  • 在线模拟器可预估不同实验设计的统计功效(https://nathanbos.github.io/power-sim/)
  • 交叉统计校正能有效处理数据依赖性问题

结构提纲

按章节快速跳转。

  1. 揭示传统统计功效分析在复杂实验设计中的局限性

  2. 通过政府研究项目案例说明传统设计导致样本量需求爆炸

  3. 提出within-subject设计结合交叉统计校正的创新方法

  4. 展示GUI+LLM聊天助手的A/B测试案例及参数计算过程

  5. 提供在线模拟器和GitHub代码实现完整方法论

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • 提高统计功效的方法
    • 实验设计
      • within-subject设计
      • 交叉统计校正
    • 工具支持
      • 在线模拟器
      • GitHub代码库

金句 / Highlights

值得收藏与分享的关键句。

#统计学#实验设计#研究方法#数据科学
打开原文

如何从更少的研究参与者中获得更多的统计功效 | Towards Data Science

人工智能

如何从更少的研究参与者中获得更多的统计功效

一段肮脏的故事,一种新颖的方法和一个实用的在线模拟器

Nathan Bos

2026年8月4日

17分钟阅读

分享

作者使用Gemini/Nano Banana创作的图片

TL;DR版

这是一个关于统计功效分析方法的故事,其起源充满恐惧、挫败感和统计不确定性的巨大空白,最终催生了一个美丽的模拟实验。我将在解释模拟实验的同时讲述这段历史,就像那些在线食谱一样,将蓝莓玉米莎莎酱的食谱与你侄女的婚礼派对故事交织在一起。或者你可以直接跳到食谱:

在线模拟:https://nathanbos.github.io/power-sim/

包含模拟指南的GitHub仓库:

https://github.com/nathanbos/power-sim

TL;DR剧透:通过使用组内设计(每个参与者完成多个条件),让每个参与者在每个条件下完成多个任务/问题,并将结果视为具有交叉统计校正的半独立数据点以处理依赖性,可以从有限的受试者池中获得更多的统计功效。该模拟可以帮助你估算这种方法的效果。

功效分析:为什么没人想邀请统计学家参加派对

进行功效分析的人是派对上没人想邀请的客人,但每个人都知道你必须这么做。十多年前,我曾为一个价值数百万美元的政府研究项目(我称之为“不可能计划”)担任这个坏消息的传递者。该项目希望进行大规模、严格控制的评估,包含大型群体、多个嵌套条件,并能够检测出它们之间的微小差异。使用传统的组间设计进行这项研究时,功效需求(所需受试者数量)急剧上升。每组10人意味着每个10人组的样本量N=1,而其中许多组只是我们实际想研究的条件的对照组。复杂的设计需要进行大量比较,而小效应量意味着每个比较都难以确定。

即使没有复杂的群体研究设计,也会让统计学家沦为派对上的异类。即使是很简单的设计,如果你诚实地面对需求,也会让人望而生畏。在目前的工作中,我正在研究当给传统图形用户界面(GUI)用户提供一个由大型语言模型(LLM)驱动的聊天指南时会发生什么。我可能想设置一个简单的A/B测试,A是“仅GUI”,B是“GUI+指南”。在规划A/B研究时,我会使用功效分析来提问:“我需要多少参与者?”或者更精确地说:“如果这些条件之间存在‘中等’大小的差异,我需要多少参与者才能有80%的机会检测到这种差异?”

我打开R的pwr包并输入以下内容:

pwr.t.test(d = 0.5, sig.level = 0.05, power = 0.8, type = "two.sample")

然后得到结果:n = 63.76561

这意味着每个条件需要63人。我需要总共126人来测试我的GUI指南是否有所改进。对于一个小规模的设计研究来说,126这个数字在招募和运行如此多的会话时往往是一个难以实现的高数字。

我的选择有哪些?

  • 尽可能多地召集人手进行实验,希望要么能获得非常显著的效果量,要么碰巧走运。
  • 将研究设计为探索性而非假设检验,这样就不需要那么严格的控制。(参见 Landauer 和 Nielsen,1993 年,以及许多关于可用性测试功效分析的后续研究。)
  • 让我们的实习生重复执行任务 126 次。哈哈,但我们做不到,对吗?

我们团队在“不可能计划”中采取了最后这个思路。我们能否让每个小组解决更多问题,但小组数量更少?例如,如果有 100 个小组,每个小组解决 25 个问题,那么我们就能获得 2500 个数据点,而不是 100 个,这更接近可行范围。这样做是合理的吗?

如上所述,答案是否定的。我们会违反数据点相互独立的统计假设;同一小组的响应数据是相关的。更传统的方法是让每个小组解决多个问题,但将它们平均成一个分数,但就功效而言,这又回到了 N=100 的情况。

但如果我们不跨问题平均分数,而是将数据视为半独立的,并使用多层次回归来控制依赖性,这样可行吗?

那不可能!被试间设计根本行不通。

我的团队很快遇到了两个问题。一个是被试间实验的数学原理,第二个是顽固的任务负责人,也就是我本人,我一开始不愿意相信初步结果。

表 1. 在被试间设计中增加问题数量(增加 M)对提高统计功效帮助甚微。表格和图表是作者创建的截图。

我的团队成员进行了数学分析,显示在被试间设计中增加问题几乎没有任何帮助,如表 1 所示。这张表显示了 N 名参与者和 M 个问题的观察统计功效(检测到差异的运行百分比)。当我看到这个结果时,我并不想相信它。直觉上,这似乎不对。我们怎么会有这么多数据却无法获得更多信息?

因此,我们构建了分析 #2,一个小型的蒙特卡洛模拟,虽然速度较慢但更透明。这就是当前模拟的工作方式:它生成参与者的合成人群和问题,添加一个“效应”和一些噪声,多次测试该效应是否可被统计检测,并报告发现这个“真实”效应的次数,80% 是常规目标。

两种分析得出了完全相同的结论。如果我们使用被试间设计,即每个人只参与一种条件,那么通过增加问题并独立分析它们,我们几乎无法获得关于测试的额外信息。这个想法彻底失败了。

为什么会这样?为什么更多数据不能提供更多信息?在被试间设计中,A 组和 B 组由完全不同的人员组成。这引入了不可消除的人类噪声——基线个体差异。在小样本和被试间设计下,我们无法排除 B 组可能恰好比 A 组有更快、更聪明或更疲惫的参与者的可能性,而增加更多问题无法解决这个问题。更多问题确实能提供更多信息,这可能帮助你更准确地估计被试能力和问题难度,但无法提供关于条件的任何新信息。

被试内设计扭转了局面。

这是一场名为“Program Impossible”的项目启动会议,一年后,表演者(我们将评估其产品的团队)排成一行,等待轮到自己上台讲述T&E计划存在多少问题。当权者决定不解决电源问题,以及一系列其他潜在问题。我被要求代表团队坐在舞台上,默示支持我们认为存在致命缺陷的T&E计划。我照做了。之后我们回到家中,我让团队继续深入研究电源模拟。

我们采取了新的策略:如果我们交叉条件会怎样?在组内设计中,每个参与者会完成多个条件。由于你直接将参与者在条件A中的表现与他们在条件B中的表现进行比较,这种基线“人类噪声”会被抵消。

表2. 在组间设计中,增加问题对提高统计功效的作用更明显。

通过使用组内设计,我们的模拟显示了我想要看到的结果:增加问题并将答案视为半独立变量,可以提升统计功效。你可以在使用模拟默认设置运行的表2输出中清晰看到这一点。例如,在N=32的列中,表格顶部显示了一个功效不足的“红色”数字12.5%,而随着增加问题数量,沿着该列向下,我们在M=16时达到了统计“绿色”数字。表格还显示了边际效益递减,这是另一个重要的发现。

成功!我们至少在理论上找到了一种方法,通过增加问题数量,从相同规模的参与者群体中获得更多的统计功效,并且拥有了一个可以准确估算所需参与者和问题数量的模拟器。

模拟的工作原理及不同类型的变异

如前所述,这是一个蒙特卡洛模拟。这些百分比不是估计值,而是我们在每个单元格中检测到条件间统计显著差异的次数观察结果。(使用“模拟运行”标签页查看实际运行数据。)

与变异相关的PIPS设置

更多细节:

人类变异

人类具有不同的能力、个性、经验等,这些因素会影响实验结果,因此要了解不同条件对人类的影响,我们需要用大量人类进行测试。我们模拟的参与者非常简单,用一个数字表示,称为participant_ability,通过随机正态函数生成。在R中生成128个模拟人员很简单:subj_ability = rnorm(128)。

问题变异

问题的难度也会变化,在模拟中,这些问题也用一个数字表示。生成64个问题使用同样的简单代码:item_diff = rnorm(64)。这些数字来自标准正态分布;该分布的均值为0,标准差为1,每次随机抽样时(希望)都会有一些变化。

添加模拟的“真实”效应

为了模拟参与者在两个条件中完成问题且效应量为0.5(中等效应),我们只需将参与者的能カ与问题的难度相加,然后在条件B的得分中增加0.5,而条件A保持不变。

还有一些其他来源的变异可以建模。

测量误差

没有任何实验任务或问题能完全一致地作为度量标准。我们将这种现象建模为可靠性数值,默认值为0.70。对于大多数测试来说,0.7的可靠性水平被认为是“良好”的。

Participant by Condition variability. 受试者对实验条件的反应可能超出其能力范围,存在个体差异。要设置这种受试者与条件间的变异性,请调整“受试者基线标准差”参数。默认值为0.25,相当于中等效应量的一半。

Problem by Condition variability. 问题本身也可能以非预期的方式与实验条件相互作用,这种现象通过“项目基线标准差”进行建模。通常我认为这属于次要关注点,因为实验者对问题难度有更强的控制力,因此默认值设为0。

选择效应量

你应该建模哪种效应量?效应量本质上是在问“实验条件间差异有多大”,其单位是标准差。因此效应量为1意味着均值间相差一个标准差。经典参考文献是Jacob Cohen的《行为科学统计功效分析》。该书与前文提到的pwr包是我最常参考的资源。效应量对统计功效有巨大影响(见下文截图),但在实验前如何预估其大小?Cohen曾分析过大量行为科学研究,建议对于简单均值检验:0.2是难以检测的小效应,0.5是中等效应,0.8是大效应。预估效应量的一种方法是寻找具有类似预期结果的已有研究,采用其中观察到的效应量。我默认使用“中等”效应量,除非研究对象本身存在特别大或特别小的效应。

#### 对比分析中“小”和“大”效应量的默认PIPS设置

表3. 小效应量下统计功效更难达到

表4. 大效应量下的默认设置表。统计功效更容易实现。

一些考量与假设

“所有模型都是错误的,但有些是有用的。” – George Box

我将简要回应两种主要反对意见,这些意见与我们对每个问题都粗放地视为独立数据点、以及对被试内研究的随意使用有关。

所有任务真的独立吗?

该模型通过将每个问题的产出视为半独立变量,同时通过统计控制来处理同一受试者多次响应的情况。(更传统的替代方法是将结果平均后视为单一数值,但方差更小。)我坚持认为这是一种合法的统计方法,但在现实中很难设计出大量真正相互独立的实验任务。以我设想的GUI + Guide研究(如果未来开展)为例,我可以设计一系列任务,但要创造128个真正独立的任务可能并不现实。

当你看到一项研究(尤其要注意LLM基准测试)声称拥有数千个问题时,请仔细阅读其附录说明。很容易设计出少量问题并让LLM按模式生成更多问题,但将这些视为独立数据点在统计上并不诚实。

此外,对于涉及真实人类被试的实验,大量问题的时间成本会变得不现实。我的建议:

A) 计划投入大量时间开发真正多样化的任务。LLM可以辅助,但需要设计多样化提示,并承诺投入人力进行反复修改。将原本用于招募被试的时间转而用于优化任务设计。

B) 对实际能纳入的任务数量保持现实预期。

C) 如果你遇到一组彼此高度相似的问题,应将其视为子量表,通过增加另一层统计嵌套来修改模拟,以反映这种关联性。

跨条件交互是否会污染研究结果?

组内设计意味着参与者需要在多个条件下完成任务,无法完全避免某一条件下的体验对其他条件产生影响。平衡呈现顺序是必要的统计控制手段,但并非总是足够的。你也可以通过向模型中添加一个简单的整数变量“order”来建模呈现顺序。或者采用更复杂的人类学习模型,引入艾宾浩斯遗忘曲线作为控制变量。但即使采取这些措施,学习效应仍然难以完全量化。

我过去曾因担心这些不可控因素而避免使用组内设计,但随着时间推移,我对其接受度显著提高。组内设计确实增加了复杂性,但这种复杂性更贴近现实且具有重要价值。观察不同条件间的学习效应本身就能提供非常有价值的信息。虽然还有很多内容可以探讨,但我的核心建议是:对所有让你担忧的未控制因素进行系统性思考,并考虑每个案例可能带来的洞见。以我的GUI指南研究为例:学习效应可能强到足以让接触指南的参与者在无指南条件下彻底改变GUI使用方式,从而导致条件B污染条件A。这种情况似乎不太可能,但如果真的发生,我就能观察到在“GUI”条件下应用了哪些“指南”策略来产生如此显著的差异。发现能产生如此显著差异的策略本身可能成为研究的主要发现,其重要性可能超过我原本关注的条件差异。

更可能的情况是,学习效应较小且呈累积性,伴随大量变异性。这虽然会增加统计不确定性,但也为你提供了更深入理解策略、使用模式等的实验环境。在组内研究中,你还可以要求参与者直接比较两种条件,而这是组间设计无法实现的。

这些复杂性在医疗临床试验等高风险场景中不值得冒险,但在应用研究中,组内设计往往在统计效力和解释性方面带来的收益足以抵消控制力的损失。

让我们重启那个模拟!

"Impossible"项目最终未能挽救这艘船。那个永远无法完成的评估方案,如今沉没在宏大愿景被现实复杂性吞噬的深渊底部。我们关于提升统计效力的构想也随船沉没,相关模拟从未发表。原始代码和分析结果保存在某个我无法访问的备份磁带上,且涉及我并不拥有的知识产权。不过,这些年来我多次从该项目中获得启发。现在……是时候让它从深渊中重生了。

2026年7月4日周末。在周末期间,我和Claude Code、Gemini 3 Pro组成团队,重新构建并扩展了这个精巧的小型模拟,现在将其命名为“Impossible Power Simulation”(PIPS)。

这个版本更优秀。你可以包含关于主题和项目之间独立性、变异性及相对重要性的不同假设。文档解释了如何通过试点数据或可比研究进行调整,方法是直接从使用R的lme4包对数据进行的线性混合效应分析中获取参数。

PIPS可通过浏览器运行,无需安装,这得益于Github Pages的魔力。根据Gemini的建议,现在模拟使用Clark的最小F’(准F统计量)来近似线性混合模型,这在浏览器中实现起来会更困难,详见文档获取详细信息。

你应该如何使用PIPS?

作为“直觉泵”使用

第一次构建和使用这个模拟时,极大地提升了我对统计功效、参与者数量、任务设计和研究设计之间相互作用的直觉。我希望PIPS也能帮助其他人获得类似的提升。PIPS包含一个查看单次运行结果的视图,虽然在统计上并非必要,但我发现这对理解变异性以及模型运行之间的差异很有帮助。

PIPS模型运行查看器

用于功效分析

你可以将PIPS用于自己的功效分析,但需注意一些限制。我们从未将其发展到可以发表的阶段,因此没有经过同行评审或验证研究。该工具有一些强假设,因此请务必仔细思考它如何适用于你的使用场景。如今这比以前更容易实现。首先自行阅读文档,然后将你最喜欢的LLM指向代码库,与它“对话”以讨论你的问题和顾虑。

扩展PIPS以适应你的研究

真实的研究总是包含新颖的复杂性。PIPS是开源的,采用Apache 2.0许可证发布,因此你可以扩展它以满足你的需求。你和你最喜欢的代码助手应该能够克隆代码库并修改PIPS,使其更适合你的研究。你可能需要进行的修改包括:

  • 模拟更多条件和更复杂的设计。
  • 添加真正的多层分析(我推荐使用R的lme4包)而不是F检验近似。
  • 添加单尾检验选项。
  • 模拟包含类型聚类的任务,需要额外的嵌套层级。

现在你已经了解了背景和操作方法,如果你觉得这个工具有用,请给我发个消息。[email protected]

参考文献

Cohen, J. (2013). Statistical power analysis for the behavioral sciences. Routledge.

Nielsen, J., & Landauer, T. K. (1993, May). A mathematical model of the finding of usability problems. In Proceedings of the INTERACT’93 and CHI’93 conference on Human factors in computing systems (pp. 206-213).

致谢

Jonathon Kopecky为原始模拟完成了大部分编码工作,他是一位比Gemini更优秀的统计学合作者,尽管在凌晨3点不太容易联系到他。Isaiah Harbison完成了我最初不相信的第一个模拟,并在其他方面做出了诸多贡献。Rebecca Rhodes在整个过程中提供了清晰的见解。作者对任何错误或遗漏负全责。

撰写者

查看Nathan Bos的所有文章

数据科学

,

深度解析

功效分析

心理学

统计学

分享这篇文章

  • 在Facebook上分享
  • 在LinkedIn上分享
  • 在X上分享

Towards Data Science是一个社区出版物。提交你的见解以触达全球受众,并通过TDS作者支付计划获得报酬。

更新为你的实际投稿URL

为TDS撰写文章

✦ 结束CTA ✦