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?


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.


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.