Como fazer um modelo linear generalizado com múltiplas variáveis ​​dependentes em R?

17

Eu tenho seis variáveis ​​dependentes (dados de contagem) e várias variáveis ​​independentes, vejo que em um MMR o script é assim:

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

Mas, como meus dados são contados, quero usar um modelo linear generalizado e tentei o seguinte:

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

E aparece esta mensagem de erro:

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`

Alguém pode me explicar essa mensagem de erro ou uma maneira de resolver meu problema?

Juan
fonte
Seguindo a resposta de @Giorgio Spedicato: devemos supor que você deseja um conjunto de modelos que tratem cada variável dependente separadamente, como lmquando você fornece uma matriz?
conjugateprior
Sinto falta da segunda parte da análise. Em um MMR (multivariada regressão múltipla) depois: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) Devo
Juan
Talvez eu tenha ajustado minha resposta para responder a essa pergunta. Além disso, lembre-se de não pressionar return nos comentários :-)
conjugateprior
Sinto falta da segunda parte da análise. Em uma MMR (Regressão Múltipla Multivariada) após: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) Devo usar o comando manova () como este: summary(manova(my.model)) para fazer uma análise multivariada de variância e ver o significado de cada variável independente. Esse é o objetivo final.
Juan Juan
Nem manova nem anova são definidas para esse tipo de dados, portanto, eles não são oferecidos. Porém, se você quiser ver o impacto de cada IV, a tabela de regressão fornecida por summaryeles o fornecerá para cada DV.
conjugateprior

Respostas:

11

A resposta curta é que glmnão funciona assim. Ele lmcriará mlmobjetos se você fornecer uma matriz, mas isso não é amplamente suportado nos genéricos e, de qualquer maneira, não poderia ser generalizado facilmente, glmporque os usuários precisam poder especificar variáveis ​​dependentes de coluna dupla para modelos de regressão logística.

A solução é ajustar os modelos separadamente. Suponha que seus IVs e DVs morem em um data.frame chamado dde sejam rotulados da maneira que estão na sua pergunta. O código a seguir faz uma lista de modelos ajustados indexados pelo nome da variável dependente que eles usam:

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 os resultados, basta agrupar suas funções usuais em a lapply, assim:

lapply(models, summary) ## summarize each model

Não há dúvida de maneiras mais elegantes de fazer isso no R, mas isso deve funcionar.

conjugado
fonte
6

Disseram-me que existem modelos lineares generalizados multivariados (mistos) que tratam do seu problema. Eu não sou especialista nisso, mas gostaria de dar uma olhada na documentação do SABRE e neste livro sobre GLMs multivariados. Talvez eles ajudem ...

Giorgio Spedicato
fonte
2
Você traz um ponto interessante (+1). Certamente existem GLMs multivariados. Por outro lado, fornecer lmuma matriz para uma variável dependente provavelmente deve ser visto mais como açúcar sintático do que como expressão de um modelo multivariado: se fosse um modelo multivariado (normal), seria aquele onde os erros seriam ' esférico ', ou seja, aquele em que você poderia executar regressões separadas em cada elemento da variável dependente e obter a mesma resposta.
conjugateprior