2010-05-26 26 views
6

Me gustaría conocer una forma de realizar ANCOVA (análisis de covarianza) usando Python con scipy. Básicamente es una comparación estadística de líneas de regresión. Sé que Python puede hacer ANOVA y también puede ajustar la línea de regresión con Scipy.stats. Sin embargo, no estoy seguro de cómo armarlos para obtener un ANCOVA efectivo, si es posible.ANCOVA en Python con estadísticas de Scipy/Numpy

Respuesta

10

ANCOVA se puede hacer con regresión y utilizando variables ficticias en la matriz de diseño para los efectos que dependen de la variable categórica.

Un ejemplo sencillo es en http://groups.google.com/group/pystatsmodels/browse_thread/thread/aaa31b08f3df1a69?hl=en Utilización de la clase OLS de scikits.statsmodels

parte pertinente de la construcción de matriz de diseño xg incluye números de grupo/etiquetas, x1 es continua variable explicativa

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

Estimar el modelo

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

"hipótesis de prueba que todos los grupos tienen la misma interceptar"

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

fuertemente rechazado por las diferencias en la intercepción son muy grandes

Update (dos años y medio más tarde):

scikits.statsmodels tiene ha cambiado el nombre a statsmodels

ya la pregunta:

Con la última versión de modelos de estadísticas, es más conveniente usar las fórmulas para especificar los efectos categóricos y los efectos de interacción. statsmodels usa patsy para manejar las fórmulas y crea las matrices de diseño.

Más información está disponible en los enlaces a la documentación de statsmodels en https://stackoverflow.com/a/19495920/333700

Cuestiones relacionadas