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

使用Numpy计算t值与Scipy结果不符,求问题排查建议

排查单样本t检验手动计算与Scipy结果不一致的问题

嘿,我一眼就发现你手动计算t值时的公式错误啦!咱们来一步步拆解问题:

核心错误:标准误的计算逻辑搞反了

单样本t检验的t值计算公式是:

t = (样本均值 - 假设总体均值) / (样本标准差 / √样本量)

这里的样本标准差/√样本量就是标准误(Standard Error),而你在代码里把分母写成了std_x * np.sqrt(n),相当于把标准误算成了样本标准差 * √样本量,直接把结果缩小了100倍(因为n=100,√n=10,乘以10和除以10的差距就是100倍),这就是为什么你的手动结果和Scipy差了两个数量级。

修正后的代码

把t值计算的分母改成除法就可以啦:

import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
np.random.seed(seed=42) # make example reproducible
n = 100
x = np.random.normal(loc=1.78, scale=.1, size=n) # the sample is here
tval, pval = stats.ttest_1samp(x, 1.75)
var_x = x.var(ddof=1)
std_x = np.sqrt(var_x)
# 修正:把*改成/
tval1 = (x.mean() - 1.75) / (std_x / np.sqrt(n))
print("Scipy: ",tval,"\nNumpy: ",tval1)

运行这段修正后的代码,你会发现手动计算的tval1和Scipy输出的tval完全一致(都是2.1598800019529265)。

额外验证小技巧

可以先单独计算标准误,确认数值是否正确:

standard_error = std_x / np.sqrt(n)
print("标准误:", standard_error)

这样能更直观地检查每一步的计算是否符合统计公式,避免类似的符号错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:53:17