web-dev-qa-db-fra.com

Erreur dans model.frame.default: les longueurs variables diffèrent

Lors de l'exécution d'un modèle gam à l'aide du package mgcv, j'ai rencontré un étrange message d'erreur que je n'arrive pas à comprendre:

"Erreur dans model.frame.default (formule = mort ~ pm10 + Lag (resid1, 1) +: les longueurs variables diffèrent (trouvées pour 'Lag (resid1, 1)')").

Le nombre d'observations utilisées dans model1 est exactement le même que la longueur du résidu de déviance, donc je pense que cette erreur n'est pas liée à la différence de taille ou de longueur des données.

J'ai trouvé un message d'erreur assez lié sur le web ici , mais ce message n'a pas reçu de réponse adéquate, il n'est donc pas utile à mon problème.

Voici des exemples et des données reproductibles:

library(quantmod)
library(mgcv) 
require(dlnm)

df <- chicagoNMMAPS
df1 <- df[,c("date","dow","death","temp","pm10")] 
df1$trend<-seq(dim(df1)[1]) ### Create a time trend

Exécutez le modèle

model1<-gam(death ~ pm10 + s(trend,k=14*7)+ s(temp,k=5),
data=df1, na.action=na.omit, family=poisson)

Obtenir des résidus de déviance

resid1 <- residuals(model1,type="deviance")

Ajouter une déviance décalée d'un jour au modèle 1

model1_1 <- update(model1,.~.+ Lag(resid1,1),  na.action=na.omit)

model1_2<-gam(death ~ pm10 + s(trend,k=14*7)+ s(temp,k=5) + Lag(resid1,1), data=df1, 
na.action=na.omit, family=poisson)

Ces deux modèles ont produit le même message d'erreur.

17
Meso

Joran a suggéré de supprimer d'abord les NA avant d'exécuter le modèle. J'ai donc supprimé les NA, exécuté le modèle et obtenu les résidus. Lorsque j'ai mis à jour model2 en incluant les résidus décalés, le message d'erreur ne s'est plus affiché.

Supprimer les NA

df2<-df1[complete.cases(df1),]

Exécutez le modèle principal

model2<-gam(death ~ pm10 + s(trend,k=14*7)+ s(temp,k=5), data=df2, family=poisson)

Obtenir des résidus

resid2 <- residuals(model2,type="deviance")

Mettre à jour le modèle 2 en incluant les résidus de décalage 1

model2_1 <- update(model2,.~.+ Lag(resid2,1),  na.action=na.omit)
12
Meso

Une autre chose qui peut provoquer cette erreur est la création d'un modèle avec la fonction de normalisation de centrage/mise à l'échelle à partir du package arm - m <- standardize(lm(y ~ x, data = train))

Si vous essayez ensuite predict(m), vous obtenez la même erreur que dans cette question.

5
arr

C'est simple, assurez-vous simplement que le type de données dans vos colonnes est le même. Par exemple J'ai fait face à la même erreur, cela et une autre erreur:

Erreur dans contrasts<- (*tmp*, value = contr.funs [1 + isOF [nn]]): les contrastes ne peuvent être appliqués qu'aux facteurs à 2 niveaux ou plus

Donc, je suis retourné à mon fichier Excel ou fichier csv, définir un filtre sur la variable en me lançant une erreur et vérifié si les types de données distincts sont les mêmes. Et ... Oh! il y avait des nombres et des chaînes, donc j'ai converti des nombres en chaîne et cela a très bien fonctionné pour moi.

4
Maitri Tolia