2010-05-26 44 views
6

Mi piacerebbe conoscere un modo di eseguire ANCOVA (analisi della covarianza) usando Python con scipy. È fondamentalmente un confronto statistico delle linee di regressione. So che Python può fare ANOVA e può anche fare il montaggio della linea di regressione con Scipy.stats. Non sono sicuro di come metterli insieme per ottenere un ANCOVA efficace, se è possibile.ANCOVA in Python con statistiche Scipy/Numpy

risposta

10

ANCOVA può essere eseguito con la regressione e utilizzando variabili fittizie nella matrice di progettazione per gli effetti che dipendono dalla variabile categoriale.

Un semplice esempio è http://groups.google.com/group/pystatsmodels/browse_thread/thread/aaa31b08f3df1a69?hl=en utilizzando la classe OLS da scikits.statsmodels

parte rilevante di costruzione della matrice disegno xg comprende numeri di gruppo/etichette, x1 è continua variabile esplicativa

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

Stima del modello

>>> 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) 

"ipotesi di prova che tutti i gruppi hanno lo stesso intercettare"

>>> 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> 

respinto con forza, perché le differenze di intercettazione sono molto grandi

Update (due anni e mezzo più tardi):

scikits.statsmodels ha stato rinominato in statsmodels

e alla domanda:

Con l'ultima versione di statsmodels, è più comodo utilizzare le formule per specificare gli effetti categoriali e gli effetti di interazione. statsmodels utilizza patsy per gestire le formule e crea le matrici di progetto.

Ulteriori informazioni sono disponibili ai collegamenti alla documentazione statsmodels in https://stackoverflow.com/a/19495920/333700