为什么Python中的t-test(scipy,statsmodels)给出的结果与R、Stata或Excel不同?

2024-05-17 08:20:13 发布

您现在位置:Python中文网/ 问答频道 /正文

(问题已解决;x、y和s1、s2大小不同)

在R中:

x <- c(373,398,245,272,238,241,134,410,158,125,198,252,577,272,208,260)
y <- c(411,471,320,364,311,390,163,424,228,144,246,371,680,384,279,303)
t.test(x,y)
t = -1.6229, df = 29.727, p-value = 0.1152

在STATA和Excel中得到相同的数字

t.test(x,y,alternative="less")
t = -1.6229, df = 29.727, p-value = 0.05758

无论我尝试哪个选项,都无法使用statsmodels.stats.weightstats.ttest_ind或scipy.stats.ttest_ind复制相同的结果。

statsmodels.stats.weightstats.ttest_ind(s1,s2,alternative="two-sided",usevar="unequal")
(-1.8912081781378358, 0.066740317997990656, 35.666557473974343)

scipy.stats.ttest_ind(s1,s2,equal_var=False)
(array(-1.8912081781378338), 0.066740317997990892)

scipy.stats.ttest_ind(s1,s2,equal_var=True)
(array(-1.8912081781378338), 0.066664507499812745)

一定有成千上万的人使用Python计算t-test。我们都得到了错误的结果吗?(我通常依赖Python,但这次我用STATA检查了结果)。


Tags: testdfvaluevarstatsscipyequals2
2条回答

简而言之,Python中提供的t-tests与R和Stata中的t-tests是相同的结果,Python数组中有一个额外的元素。

I wouldn't bank on Excel's robustness, however.

这就是我得到的结果,默认值等于var:

>>> x_ = (373,398,245,272,238,241,134,410,158,125,198,252,577,272,208,260)
>>> y_ = (411,471,320,364,311,390,163,424,228,144,246,371,680,384,279,303)

>>> from scipy import stats
>>> stats.ttest_ind(x_, y_)
(array(-1.62292672368488), 0.11506840827144681)

>>> import statsmodels.api as sm
>>> sm.stats.ttest_ind(x_, y_)
(-1.6229267236848799, 0.11506840827144681, 30.0)

而当var不相等时:

>>> statsmodels.stats.weightstats.ttest_ind(x_, y_,alternative="two-sided",usevar="unequal")
(-1.6229267236848799, 0.11516398707890187, 29.727196553288369)
>>> stats.ttest_ind(x_, y_, equal_var=False)
(array(-1.62292672368488), 0.11516398707890187)

相关问题 更多 >