2010-05-26 21 views
6

Ich würde gerne einen Weg zur Durchführung von ANCOVA (Analyse der Kovarianz) mit Python mit scipy wissen. Es ist im Grunde ein statistischer Vergleich von Regressionsgeraden. Ich weiß, Python kann ANOVA tun und es kann auch eine Regressionslinie mit Scipy.stats anpassen. Ich bin nicht sicher, wie man diese zusammenbringt, um eine effektive ANCOVA zu bekommen, wenn es möglich ist.ANCOVA in Python mit Scipy/Numpy stats

Antwort

10

ANCOVA kann mit Regression und mit Dummy-Variablen in der Entwurfsmatrix für die Effekte durchgeführt werden, die von der kategorialen Variablen abhängen.

Ein einfaches Beispiel ist bei http://groups.google.com/group/pystatsmodels/browse_thread/thread/aaa31b08f3df1a69?hl=en aus scikits.statsmodels die OLS-Klasse

relevanten Teil der Konstruktion von Designmatrix xg umfasst Gruppennummern/Etiketten, x1 ist kontinuierlich erklärende Variable

>>> dummy = (xg[:,None] == np.unique(xg)).astype(float) 
>>> X = np.c_[x1, dummy[:,1:], np.ones(nsample)] 

Schätzung das Modell

>>> res2 = sm.OLS(y, X).fit() 
>>> print res2.params 
[ 1.00901524 3.08466166 -2.84716135 9.94655423] 
>>> print res2.bse 
[ 0.07499873 0.71217506 1.16037215 0.38826843] 
>>> prstd, iv_l, iv_u = wls_prediction_std(res2) 

"Test Hypothese, dass alle Gruppen gleiche abfangen haben"

>>> R = [[0, 1, 0, 0], 
...  [0, 0, 1, 0]] 

>>> print res2.f_test(R) 
<F test: F=array([[ 91.69986847]]), p=[[ 8.90826383e-17]], 
df_denom=46, df_num=2> 

stark abgelehnt, da Unterschiede in Intercept sind sehr groß

Update (zweieinhalb Jahre später):

scikits.statsmodels hat wurde umbenannt in statsmodels

und zu der Frage:

Mit der neuesten Version von statsmodels ist es einfacher, Formeln für die Angabe kategorischer Effekte und Interaktionseffekte zu verwenden. statsmodels verwendet patsy, um die Formeln zu verarbeiten und die Designmatrizen zu erstellen.

Weitere Informationen finden Sie unter den Links zur statsmodels-Dokumentation in https://stackoverflow.com/a/19495920/333700