Comment faire un modèle linéaire généralisé avec plusieurs variables dépendantes dans R?

17

J'ai six variables dépendantes (données de comptage) et plusieurs variables indépendantes, je vois que dans un MMR le script va comme ceci:

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

Mais, comme mes données sont des nombres, je veux utiliser un modèle linéaire généralisé et j'ai essayé ceci:

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

Et apparaît ce message d'erreur:

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`

Quelqu'un peut-il m'expliquer ce message d'erreur ou un moyen de résoudre mon problème?

Juan
la source
Dans le prolongement de la réponse de @Giorgio Spedicato: devons-nous supposer que vous voulez un ensemble de modèles qui traitent chaque variable dépendante séparément, comme lmlorsque vous lui donnez une matrice?
conjugateprior
Je manque la deuxième partie de l'analyse. Dans une MMR (régression multiple multivariée) après: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) Je dois
Juan
J'aurais peut- être juste ajusté ma réponse pour répondre à cette question. N'oubliez pas non plus d'appuyer sur Retour dans les commentaires :-)
conjugateprior
Je manque la deuxième partie de l'analyse. Dans une MMR (régression multiple multivariée) après: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) Je dois utiliser la commande manova () comme ceci: summary(manova(my.model)) pour faire une analyse multivariée de la variance et voir la signification de chaque variable indépendante. Voilà l'objectif final.
Juan
Ni manova ni anova ne sont définies pour ce type de données, elles ne sont donc pas proposées. Mais si vous voulez voir l'impact de chaque IV, le tableau de régression fourni par vous summaryles donnera pour chaque DV.
conjugateprior

Réponses:

11

La réponse courte est que glmcela ne fonctionne pas comme ça. Le lmcréera des mlmobjets si vous lui donnez une matrice, mais cela n'est pas largement pris en charge dans les génériques et de toute façon ne pourrait pas facilement être généralisé glmcar les utilisateurs doivent pouvoir spécifier des variables dépendantes de deux colonnes pour les modèles de régression logistique.

La solution est de monter les modèles séparément. Supposez que vos IV et DV vivent dans un data.frame appelé ddet sont étiquetés comme ils le sont dans votre question. Le code suivant fait une liste des modèles ajustés indexés par le nom de la variable dépendante qu'ils utilisent:

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

Pour examiner les résultats, enveloppez simplement vos fonctions habituelles dans un lapply, comme ceci:

lapply(models, summary) ## summarize each model

Il existe sans aucun doute des façons plus élégantes de le faire dans R, mais cela devrait fonctionner.

conjugateprior
la source
6

On m'a dit qu'il existe des modèles linéaires généralisés (mixtes) multivariés qui répondent à votre problème. Je ne suis pas un expert en la matière, mais j'aimerais consulter la documentation SABRE et ce livre sur les GLM multivariés. Peut-être qu'ils aident ...

Giorgio Spedicato
la source
2
Vous soulevez un point intéressant (+1). Les GLM multivariés existent certainement. D'un autre côté, donner lmune matrice pour une variable dépendante devrait probablement être considéré plus comme du sucre syntaxique que comme l'expression d'un modèle multivarié: s'il s'agissait d' un modèle multivarié (normal), ce serait celui où les erreurs sont '' sphérique ', c'est-à-dire où vous auriez pu exécuter des régressions distinctes sur chaque élément de la variable dépendante et obtenir la même réponse.
conjugateprior