Python中t-test(均值之差)的置信区间

28

我希望在Python中快速获得两个均值差的t-test置信区间,类似于R中的函数:

X1 <- rnorm(n = 10, mean = 50, sd = 10)
X2 <- rnorm(n = 200, mean = 35, sd = 14)
# the scenario is similar to my data

t_res <- t.test(X1, X2, alternative = 'two.sided', var.equal = FALSE)    
t_res

输出:

    Welch Two Sample t-test

data:  X1 and X2
t = 1.6585, df = 10.036, p-value = 0.1281
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -2.539749 17.355816
sample estimates:
mean of x mean of y 
 43.20514  35.79711 

接下来:

>> print(c(t_res$conf.int[1], t_res$conf.int[2]))
[1] -2.539749 17.355816

在statsmodels或scipy中我没有找到类似的内容,这很奇怪,因为显著性区间在假设检验中非常重要(以及最近只报告p值的做法受到了多少批评)。


我给它打了双标签;也许使用R的人知道Python的答案。现在很多人都同时使用两者。 - Anarcho-Chossid
2
它在statsmodels中可用,但接口不是很方便。http://www.statsmodels.org/stable/generated/statsmodels.stats.weightstats.CompareMeans.html - Josef
这些函数中哪一个提供了我所要求的内容? - Anarcho-Chossid
很多SO问题都给出了示例,请查看t测试置信区间 - lrnzcig
我查看了很多SO的例子,但没有一个恰好解决我想要做的事情。我需要计算两个均值之间t检验的置信区间,而不是描述我的数据的t检验。 - Anarcho-Chossid
此外,还可以参考这个答案,了解如何使用 numpyscipypandas 进行手动编码。 - Warm_Duscher
2个回答

38

以下是如何使用StatsModels的CompareMeans计算均值之间差异的置信区间:

import numpy as np, statsmodels.stats.api as sms

X1, X2 = np.arange(10,21), np.arange(20,26.5,.5)

cm = sms.CompareMeans(sms.DescrStatsW(X1), sms.DescrStatsW(X2))
print cm.tconfint_diff(usevar='unequal')

输出结果为:

(-10.414599391793885, -5.5854006082061138)

并匹配 R:

> X1 <- seq(10,20)
> X2 <- seq(20,26,.5)
> t.test(X1, X2)

    Welch Two Sample t-test

data:  X1 and X2
t = -7.0391, df = 15.58, p-value = 3.247e-06
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -10.414599  -5.585401
sample estimates:
mean of x mean of y 
       15        23 

嘿@ulrich-stern,感谢您的回答。我想知道这个CI是用于相对差异还是绝对差异?您知道如何计算相对差异的CI吗? - CanCeylan
@CanCeylan,我的回答是针对“常规”差异的。有一个交叉验证问题建议在相对差异的情况下使用自助法。 - Ulrich Stern

0

使用 pingouin 的另一种答案(基本上是从 这里 复制的代码,并适应了 Ulrich Stern 的变量)

import pingouin as pg
x1, x2 = np.arange(10,21), np.arange(20,26.5,.5)
res = pg.ttest(x1, x2, paired=False)
print(res)

打印

            T    dof       tail     p-val            CI95%  cohen-d       BF10  power
T-test -7.039  15.58  two-sided  0.000003  [-10.41, -5.59]    3.009  2.251e+04    1.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接