Wie macht man ein verallgemeinertes lineares Modell mit mehreren abhängigen Variablen in R?

17

Ich habe sechs abhängige Variablen (Zähldaten) und mehrere unabhängige Variablen. In einer MMR sieht das Skript folgendermaßen aus:

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

Da meine Daten jedoch gezählt werden, möchte ich ein verallgemeinertes lineares Modell verwenden und habe Folgendes versucht:

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

Und erscheint diese Fehlermeldung:

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`

Kann mir jemand diese Fehlermeldung erklären oder einen Weg finden, um mein Problem zu lösen?

Juan
quelle
Follow-up zu @Giorgio Spedicatos Antwort: Nehmen wir an, Sie möchten eine Reihe von Modellen, die jede abhängige Variable separat behandeln, wie lmwenn Sie ihr eine Matrix geben?
Conjugateprior
Ich vermisse den zweiten Teil der Analyse. In einem MMR (Multivariate Multiple Regression) nach: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) Ich muss
Juan
Ich könnte haben gerade eingestellt ist meine Antwort auf diese Frage zu beantworten. Denken Sie auch daran, in den Kommentaren nicht die Eingabetaste zu drücken :-)
conjugateprior
Ich vermisse den zweiten Teil der Analyse. In einer MMR (Multivariate Multiple Regression) nach: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) Ich muss den Befehl manova () folgendermaßen verwenden: summary(manova(my.model)) um eine multivariate Varianzanalyse durchzuführen und die Bedeutung jeder unabhängigen Variablen zu ermitteln. Das ist das endgültige Ziel.
Juan
Weder Manova noch Anova sind für diese Art von Daten definiert, daher wird sie nicht angeboten. Wenn Sie jedoch die Auswirkungen der einzelnen IVs anzeigen möchten, erhalten Sie diese in der von bereitgestellten Regressionstabelle summaryfür jeden DV.
Conjugateprior

Antworten:

11

Die kurze Antwort ist, dass glmdas so nicht funktioniert. Das Objekt lmwird erstellt mlm, wenn Sie ihm eine Matrix geben, aber dies wird in den Generika nicht allgemein unterstützt und kann ohnehin nicht leicht verallgemeinert werden, glmda Benutzer in der Lage sein müssen, zweispaltige abhängige Variablen für logistische Regressionsmodelle anzugeben.

Die Lösung besteht darin, die Modelle separat zu montieren. Angenommen, Ihre IVs und DVs befinden sich in einem data.frame mit dem Namen ddund sind so gekennzeichnet, wie sie in Ihrer Frage stehen. Mit dem folgenden Code wird eine Liste angepasster Modelle erstellt, die nach dem Namen der von ihnen verwendeten abhängigen Variablen indexiert sind:

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

Um die Ergebnisse zu untersuchen, packen Sie einfach Ihre üblichen Funktionen in a lapply:

lapply(models, summary) ## summarize each model

Es gibt zweifellos elegantere Möglichkeiten, dies in R zu tun, aber das sollte funktionieren.

Conjugateprior
quelle
6

Mir wurde gesagt, dass es multivariate verallgemeinerte lineare (gemischte) Modelle gibt, die sich mit Ihrem Problem befassen. Ich bin kein Experte darüber, aber ich würde einen Blick auf die SABRE-Dokumentation und dieses Buch über multivariate GLMs werfen . Vielleicht helfen sie ...

Giorgio Spedicato
quelle
2
Sie sprechen einen interessanten Punkt an (+1). Es gibt sicherlich multivariate GLMs. Auf der anderen Seite, so dass lmeine Matrix für eine abhängige Variable sollte wohl gesehen mehr als syntaktischer Zucker werden, als als Ausdruck eines multivariaten Modell: wenn es waren eine multivariate (normal) Modell würde es derjenige sein , wo die Fehler sind " sphärisch ', dh eine, bei der Sie für jedes Element der abhängigen Variablen separate Regressionen hätten ausführen und die gleiche Antwort erhalten können.
Conjugateprior