我目前是一个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;
当我在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检验不同的任何帮助
答案 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相同的值(事实上你做!)