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