2013-12-20 16 views
5

(Problem gelöst ist, x, y und s1, s2 unterschiedlicher Größe waren)Warum gibt der T-Test in Python (scipy, statsmodels) andere Ergebnisse als R, Stata oder Excel?

in 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 

Gleiche Zahlen in STATA und Excel

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

erhalten werden, kann ich nicht replizieren das selbe ergebnis entweder mit statsmodels.stats.weightstats.test_ind oder scipy.stats.ltest_ind, egal welche Optionen ich versuche.

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) 

Es muss Tausende von Leuten geben, die Python verwenden, um T-Test zu berechnen. Erhalten wir alle falsche Ergebnisse? (Ich verlasse mich normalerweise auf Python, aber dieses Mal habe ich meine Ergebnisse mit STATA überprüft).

+3

Ich lief stats.ttest_ind (x, y, equal_var = True) und bekam Array (-1,6229, 0,1152). In Ihrem Beispiel überprüfen Sie, dass s1/s2 == x/y. – tnknepp

+0

Welche Version von Scipy verwenden Sie? –

+0

Wenn ich weiter in das Problem schaue, sehe ich, dass, während R df = 29.727 gibt, Python df = 35.666 ergibt. Also ich vermute, dass der Fehler durch df-Berechnungen verursacht werden muss ... Warren, ich bekomme immer noch stats.test_ind (s1, s2, gleich_var = True) (array (-1.8912081781378338), 0.066664507499812745). Ich verwende die neueste Enthought Canopy Python-Installation. – Oleg

Antwort

2

, dass das Ergebnis ist, dass ich bekomme, mit Standard gleich 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) 

und mit ungleichen 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) 
2

Die kurze Antwort ist, dass die t-Tests wie in Python zur Verfügung gestellt werden die gleichen Ergebnisse wie in R und Stata, hatten Sie nur ein zusätzliches Element in Ihren Python-Arrays.

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

Verwandte Themen