You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Scipy与Excel的两样本t检验p值存在细微差异?

关于Scipy与Excel双样本异方差t检验p值差异的原因解析

你在对比Scipy和Excel的双样本异方差t检验结果时,肯定疑惑过:明明t值完全一致,怎么p值会有微小的差异(Scipy给出0.108425721876,Excel是0.1082…)?其实这个差异的核心原因,是两者计算自由度的方式不一样,具体来说:

  • Scipy的stats.ttest_ind(wt, mut, equal_var=False)采用的是Welch-Satterthwaite公式的精确计算版本,会保留自由度的小数部分(比如这次计算出来的自由度大概是3.87),然后用这个非整数自由度去查询t分布计算p值,结果会更精准。
  • 而Excel的「t-检验:双样本异方差假设」功能,会把Welch公式算出的非整数自由度向下取整为整数(也就是把3.87改成3),再用整数自由度来计算p值。正是这个取整操作,导致了p值出现细微偏差。

我们可以手动验证一下自由度的计算:
先计算两组的样本方差(用无偏估计,即ddof=1):

import numpy as np
wt = np.array([71.93636,71.34689,72.2162])
mut = np.array([71.58995,70.82698,70.89562])
s1_sq = np.var(wt, ddof=1)  # 约0.198
s2_sq = np.var(mut, ddof=1) # 约0.147
n1, n2 = len(wt), len(mut)

代入Welch-Satterthwaite公式:

df = (s1_sq/n1 + s2_sq/n2)**2 / ( (s1_sq/n1)**2/(n1-1) + (s2_sq/n2)**2/(n2-1) )

算出来的自由度约为3.87,Scipy用这个精确值计算p值,Excel则取整为3,两者的p值自然会有细微差别。

这种差异在样本量较小的时候会比较明显,当样本量增大,自由度的小数部分对p值的影响会越来越小,两者的结果就会几乎一致了。

内容的提问来源于stack exchange,提问作者lanselibai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:38:57