¿Cómo hacer un modelo lineal generalizado con múltiples variables dependientes en R?

17

Tengo seis variables dependientes (datos de conteo) y varias variables independientes, veo que en un MMR el script es así:

my.model <- lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn)

Pero, dado que mis datos son recuentos, quiero usar un modelo lineal generalizado y probé esto:

my.model <- glm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn, family="poisson")

Y aparece este mensaje de error:

Error in glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  : 
  (subscript) logical subscript too long`

¿Alguien puede explicarme este mensaje de error o una forma de resolver mi problema?

Juan
fuente
Continuando con la respuesta de @Giorgio Spedicato: ¿debemos suponer que usted quiere un conjunto de modelos que traten cada variable dependiente por separado, como lmcuando le da una matriz?
conjugateprior
Echo de menos la segunda parte del análisis. En un MMR (Regresión múltiple multivariante) después de: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) Debo
Juan
Me podría haber acaba de ajustar mi respuesta a responder a esta pregunta. Además, recuerde no presionar regresar en los comentarios :-)
conjugateprior
Echo de menos la segunda parte del análisis. En un MMR (Regresión múltiple multivariante) después de: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) Debo usar el comando manova () de esta manera: summary(manova(my.model)) para hacer un análisis de varianza multivariante y ver la importancia de cada variable independiente. Ese es el objetivo final.
Juan
Ni manova ni anova se definen para este tipo de datos, por lo tanto, no se ofrecen. Pero si desea ver el impacto de cada IV, entonces la tabla de regresión proporcionada por summaryse los dará para cada DV.
conjugateprior

Respuestas:

11

La respuesta corta es que glmno funciona así. El lmva a crear mlmobjetos si le das una matriz, pero esto no es apoyado ampliamente en los medicamentos genéricos y de todos modos no podría generalizar fácilmente a glmporque los usuarios deben ser capaces de especificar variables dependientes de doble columna para modelos de regresión logística.

La solución es adaptar los modelos por separado. Suponga que sus IV y DV viven en un data.frame llamado ddy están etiquetados como están en su pregunta. El siguiente código hace una lista de modelos ajustados indexados por el nombre de la variable dependiente que usan:

models <- list()
dvnames <- paste("DV", 1:6, sep='')
ivnames <- paste("IV", 1:n, sep='') ## for some value of n

for (y in dvnames){
  form <- formula(paste(y, "~", ivnames))
  models[[y]] <- glm(form, data=dd, family='poisson') 
}

Para examinar los resultados, simplemente envuelva sus funciones habituales en un lapply, como este:

lapply(models, summary) ## summarize each model

Sin duda, hay formas más elegantes de hacer esto en R, pero eso debería funcionar.

conjugadoprior
fuente
6

Me dijeron que existen modelos lineales generalizados (mixtos) multivariados que abordan su problema. No soy un experto al respecto, pero me gustaría consultar la documentación de SABRE y este libro sobre GLM multivariados. Quizás ellos ayuden ...

Giorgio Spedicato
fuente
2
Traes un punto interesante (+1). Los GLM multivariados ciertamente existen. Por otro lado, dar lmuna matriz para una variable dependiente probablemente debería verse más como un azúcar sintáctico que como la expresión de un modelo multivariante: si fuera un modelo multivariante (normal), sería aquel donde están los errores ' esférico ', es decir, uno en el que podría haber ejecutado regresiones separadas en cada elemento de la variable dependiente y obtenido la misma respuesta.
conjugateprior