R d'erreur qui dit “les Modèles n'étaient pas tous équipés de la même taille de dataset”
J'ai créé deux modèles linéaires généralisés comme suit:
glm1 <-glm(Y ~ X1 + X2 + X3, family=binomial(link=logit))
glm2 <-glm(Y ~ X1 + X2, family=binomial(link=logit))
J'utilise ensuite la anova
fonction:
anova(glm2,glm1)
mais un message d'erreur:
"Erreur dans l'analyse de la variance.glmlist(c ((liste d'objet),dotargs), la dispersion = dispersion :
les modèles n'étaient pas tous équipés de la même taille de dataset"
Qu'est-ce que cela signifie et comment puis-je résoudre ce problème? J'ai attach
ed l'ensemble de données au début de mon code pour les deux modèles qui ont un travail hors du même ensemble de données.
Sur une note de côté, ne pas utiliser de
Aussi, je suis en supposant que vous avez utilisé
Oui j'ai utilisé. Des excuses que je n'ai pas poster ici correctement avant. Toute idée de ce qui pourrait être mauvais?
Sans voir de vos données ou de code, pas de. À l'aide de
vous avez besoin d'utiliser
attach()
.Aussi, je suis en supposant que vous avez utilisé
glm(Y~X1...)
et pas seulement (Y~X1...)
? Et pourquoi avez-vous des virgules séparant les variables?Oui j'ai utilisé. Des excuses que je n'ai pas poster ici correctement avant. Toute idée de ce qui pourrait être mauvais?
Sans voir de vos données ou de code, pas de. À l'aide de
attach
pourrait certainement causer ce problème.vous avez besoin d'utiliser
data=YourData
dans le glm
, et vous ne pouvez pas utiliser des virgules pour séparer les variables comme ça.
OriginalL'auteur REnthusiast | 2013-08-22
Vous devez vous connecter pour publier un commentaire.
La principale cause de cette erreur, c'est quand il y a des valeurs manquantes dans une ou plusieurs des variables prédictives. Dans les versions récentes de R l'action par défaut est d'omettre toutes les lignes qui ont toutes les valeurs manquantes (le défaut précédent était de produire une erreur). Ainsi par exemple, si le bloc de données a 100 lignes et il y a une valeur manquante dans X3, alors votre modèle de glm1 sera apte à 99 lignes de données (chute de la ligne où X3 est absent), mais le glm2 objet sera apte à 100 lignes de données (puisqu'il n'utilise pas de X3, pas de lignes doivent être supprimées).
Alors la
anova
fonction vous donne une erreur car les 2 modèles ont été ajustés à des ensembles de données différents (et comment voulez-vous calculer les degrés de liberté, etc.).Une solution consiste à créer un nouveau bloc de données qui comporte uniquement les colonnes qui seront utilisés dans au moins l'un de vos modèles et de supprimer toutes les lignes avec des valeurs manquantes (le
na.omit
ouna.exclude
fonction de rendre cela facile), puis monter les deux modèles de la même bloc de données qui n'ont pas de valeurs manquantes.Autres options serait de regarder des outils pour l'imputation multiple ou d'autres moyens de traiter les données manquantes.
Avec
attach
vous ont peut-être eu une variable de même nom dans l'environnement mondial/espace de travail qui a été gâcher les choses. L'une des raisons de ne pas utiliserattach
. Pour obtenir une p-valeur deanova
ajoutertest="Chisq"
, voir?anova.glm
pour plus de détails (et assurez-vous que vous êtes heureux avec les hypothèses).OriginalL'auteur Greg Snow
Pour éviter la
"models were not all fitted to the same size of dataset"
erreur, vous devez adapter les deux modèles sur la même sous-ensemble de données. Il ya deux façons simples de le faire:data=glm1$model
dans le 2ème ajustement du modèledata=na.omit(orig.data[ , all.vars(formula(glm1))])
dans le 2ème ajustement du modèleVoici un exemple reproductible à l'aide de
lm
(pourglm
la même approche devrait fonctionner) etupdate
:Voir aussi:
OriginalL'auteur landroni
La solution est d'utiliser:
Cela fera R incluent les cas de données manquantes (NA) dans le modèle ajusté. Cela garantit que les jeux de données sont identiques à travers les différents modèles, peu importe comment les données manquantes est distribué.
na.exclude
approche ne fonctionnera pas nécessairement. Essayez ceci:mtcars[1,2] <- NA; xa <- lm(mpg~cyl+disp, mtcars, na.action = na.exclude); xaa <- lm(mpg~disp, mtcars, na.action = na.exclude); anova(xa, xaa)
Vous êtes de droite. Il ne fonctionne pas dans ce cas. Il n'a toutefois veiller à ce que
predict
insèreNA
s pour les points de données qui ont des valeurs manquantes dans les données. La lecture de la documentation pourna.exclude
il note que cela ne fonctionne que pournaresid
etnapredict
qui sont connectés àresid
etpredict
. Apparemment,anova
utilise autre chose. Apparemment, on aura de sous-ensemble à l'intégralité des cas, les premiers, en utilisant par exemplena.omit
. Au moins, c'est les conseils donnés ici.Il y a au moins deux approches simples pour faire ce dont je discute dans cette réponse.
OriginalL'auteur Deleet
Je suppose que vous vouliez dire, à type de:
La formule de l'interface pour la R fonctions de régression ne reconnaît pas les virgules que l'ajout de covariables pour le membre de droite de la formule. Et n'utilisez pas
attach()
; utiliser les données de l'argument de fonctions de régression.Je voudrais utiliser un
data
argument qui a été le même pour les deuxglm
appels: na.omettre(YourData[ , c("Y" , "X1","X2","X3")])`. De cette façon, vous retirez le "cas supplémentaires" sont présents pour X1 et X2 qui ne sont pas dans X3.Dois-je mettre cette glm1 <-glm(Y ~ X1+X2+X3, family=binomial(link= "logit"), na.omettre(YourData[ , c("Y" , "X1","X2","X3")])) lors de la définition à la fois glms?
Les données argument devrait être la même et les formules doivent être différents.
OriginalL'auteur 42-
La cause est bien décrite par Greg Neige. Une alternative et une solution très simple est d'ajouter une nouvelle variable, correspondant à la problématique de la variable de NA et autrement avec la valeur 1. L'inclure dans les deux modèles et R, d'exclure les mêmes lignes dans les deux modèles (--> ensembles de données permettra de match).
OriginalL'auteur cpt. couteau