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
model1<-gam(death ~ pm10 + s(trend,k=14*7)+ s(temp,k=5),
data=df1, na.action=na.omit, family=poisson)
resid1 <- residuals(model1,type="deviance")
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.
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é.
df2<-df1[complete.cases(df1),]
model2<-gam(death ~ pm10 + s(trend,k=14*7)+ s(temp,k=5), data=df2, family=poisson)
resid2 <- residuals(model2,type="deviance")
model2_1 <- update(model2,.~.+ Lag(resid2,1), na.action=na.omit)
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.
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.