2010-05-26 11 views
6

Je voudrais connaître un moyen d'effectuer ANCOVA (analyse de covariance) en utilisant Python avec scipy. Il s'agit essentiellement d'une comparaison statistique des lignes de régression. Je sais que Python peut faire l'ANOVA et il peut également faire l'ajustement de ligne de régression avec Scipy.stats. Je ne suis pas sûr de savoir comment les assembler pour obtenir une ANCOVA efficace, si c'est possible.ANCOVA en Python avec les statistiques de Scipy/Numpy

Répondre

10

ANCOVA peut être fait avec régression et en utilisant des variables fictives dans la matrice de conception pour les effets qui dépendent de la variable catégorielle.

Un exemple simple est à http://groups.google.com/group/pystatsmodels/browse_thread/thread/aaa31b08f3df1a69?hl=en utilisant la classe OLS de scikits.statsmodels

partie pertinente de la construction de la matrice de conception xg comprend les numéros de groupe/étiquettes, x1 est continue des motifs variables

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

Estimer le modèle

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

"hypothèse de test que tous les groupes ont la même interception"

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

fortement rejeté parce que les différences dans interception sont très grandes

Mise à jour (deux ans et demi plus tard):

scikits.statsmodels a été renommé statsmodels

et à la question:

Avec la dernière version de statsmodels, il est plus pratique d'utiliser les formules pour spécifier les effets catégoriels et les effets d'interaction. statsmodels utilise patsy pour gérer les formules et crée les matrices de conception.

Plus d'informations sont disponibles aux liens vers la documentation statsmodels dans https://stackoverflow.com/a/19495920/333700