R和Python之间的不同t检验pvalues

时间:2017-03-27 03:20:29

标签: python r t-test

我目前是一个python newb,我正在尝试了解有关倾向得分匹配的更多信息。我从Stanford.edu找到了一个很棒的教程(因为这是我的第一个帖子堆栈溢出赢了但是让我发布了两个链接,但谷歌斯坦福倾向得分匹配)涵盖了这一点。我的目标是在python中重新创建这一切,并了解发生了什么。

我的问题是当我进入第1.2节差异:治疗前协变量并开始运行t检验。我不明白为什么对于相同的测试和相同的数据,R和Python之间的p值是如此不同。

R代码:     with(ecls, t.test(race_white ~ catholic, var.equal=FALSE))

R输出:



Welch Two Sample t-test

data:  race_white by catholic
t = -13.453, df = 2143.3, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.1936817 -0.1444003
sample estimates:
mean in group 0 mean in group 1 
      0.5561246       0.7251656
&#13;
&#13;
&#13;

当我在python中执行相同的思考时,我的t-stat和自由度是相同的但是我的p值是偏离的。

Python代码:

cath=dat[dat['catholic']==1]['race_white']
noncath=dat[dat['catholic']==0]['race_white']
fina =sms.ttest_ind(noncath,cath,alternative='two-sided', usevar='unequal')
print(fina)
print("The t-statistic is %.3f the p-value is %.3f and the df is %.3f"%fina) 

Python输出:     (-13.45342570302274, 1.1413329198468439e-39, 2143.2902027156415)     The t-statistic is -13.453 the p-value is 0.000 and the df is 2143.290'

我使用完全相同的数据集只是无法找出两者不同的原因。我在另一个SO主题中看到了相似但他们的结论是尺寸不同。这是使用相同的数据集,因此大小不同。

对于用于python和R的数据文件(ecls.csv),可以找到数据文件here。非常感谢有关为什么p值与此t检验不同的任何帮助

1 个答案:

答案 0 :(得分:0)

R不会打印低于2.2e-16的p值,但会计算和存储它们。试试这个R代码:

with(ecls, t.test(race_white ~ catholic, var.equal=FALSE))$p.value
[1] 1.141333e-39

该值实际上为零,这就是为什么当您使用Python将其打印到3位小数时,您会看到0.000。尝试在Python中打印未修改的p值(不要使用%.3f - 事实上你已经做过了!print(fina))我希望你会看到与R相同的值(事实上你做!)