Come fare un modello lineare generalizzato con più variabili dipendenti in R?


17

Ho sei variabili dipendenti (contare i dati) e diverse variabili indipendenti, vedo che in un MMR lo script va così:

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

Ma, poiché i miei dati sono conteggi, voglio usare un modello lineare generalizzato e ho provato questo:

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

E appare questo messaggio di errore:

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`

Qualcuno può spiegarmi questo messaggio di errore o un modo per risolvere il mio problema?


Seguendo la risposta di @Giorgio Spedicato: supponiamo che tu voglia un set di modelli che trattino ciascuna variabile dipendente separatamente, come lmquando le dai una matrice?
conjugateprior,

Mi manca la seconda parte dell'analisi. In un MMR (Multivariate Multiple Regression) dopo: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) I must
Juan,

Ho potuto appena regolato la mia risposta a rispondere a questa domanda. Inoltre, ricorda di non premere Invio nei commenti :-)
Coniugateprior il

Mi manca la seconda parte dell'analisi. In un MMR (Multivariate Multiple Regression) dopo: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) devo usare il comando manova () in questo modo: summary(manova(my.model)) per fare un'analisi multivariata della varianza e vedere il significato di ogni variabile indipendente. Questo è l'obiettivo finale.
Juan,

Né manova né anova sono definiti per questo tipo di dati, quindi non vengono offerti. Ma se vuoi vedere l'impatto di ogni IV allora la tabella di regressione fornita da te summaryli darà per ogni DV.
conjugateprior,

Risposte:


11

La risposta breve è che glmnon funziona così. La lmcreerà mlmgli oggetti, se si dà una matrice, ma questo non è ampiamente supportato nei farmaci generici e comunque non potrebbe facilmente generalizzare glmperché gli utenti devono essere in grado di specificare doppia colonna variabili dipendenti per i modelli di regressione logistica.

La soluzione è di adattare i modelli separatamente. Supponi che i tuoi IV e DV vivano in un data.frame chiamato dde siano etichettati come sono nella tua domanda. Il codice seguente crea un elenco di modelli adattati indicizzati dal nome della variabile dipendente che utilizzano:

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

Per esaminare i risultati, basta avvolgere le normali funzioni in a lapply, in questo modo:

lapply(models, summary) ## summarize each model

Ci sono senza dubbio modi più eleganti per farlo in R, ma dovrebbe funzionare.


6

Mi è stato detto che esistono modelli lineari (misti) generalizzati multivariati che risolvono il tuo problema. Non ne sono un esperto, ma darei un'occhiata alla documentazione di SABRE e a questo libro sui GLM multivariati. Forse aiutano ...


2
Visualizzi un punto interessante (+1). Le GLM multivariate certamente esistono. D'altra parte, dando lmuna matrice per una variabile dipendente dovrebbe probabilmente essere visto più come zucchero sintattico, che come l'espressione di un modello multivariato: se fosse un modello multivariato (normale) sarebbe quello in cui gli errori sono ' sferico ", ovvero uno in cui avresti potuto eseguire regressioni separate su ciascun elemento della variabile dipendente e ottenere la stessa risposta.
conjugateprior,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.