web-dev-qa-db-fra.com

Erreur dans lm.fit (x, y, offset = offset, singular.ok, ...), cas non-NA avec formule Boxcox

J'essaie d'exécuter une transformation boxcox avec le code suivant:

urban1 <- subset(ski,urban <= 4,na.rm=TRUE)
ski$gender <- as.numeric((as.character(ski$gender)),na.rm=TRUE)
urban1 <- as.numeric((as.character(urban1)))
x <- (ski$gender*urban1)
y <- ski$EPSI.
bc <- boxcox(y ~ x) 
(trans <- bc$x[which.max(bc$y)]) 
model3 <- lm(y ~ x) 
model3new <- lm(y^trans ~ x)
ski$EPSI. <- ski$EPSI. + 1

Mais je continue à avoir cette erreur:

Erreur dans lm.fit (x, y, offset = offset, singular.ok = singular.ok, ...): 0 (non-NA) cas Appels: ... eval -> eval -> boxcar -> boxcar. formula -> lm -> lm.fit Exécution arrêtée

Merci d'avance!

6
Vickie Ip

Le message d'erreur

lm.fit (x, y, offset = offset, singulier.ok = singulier.ok, ...): 0 cas (non NA)

est généré par la commande lm(y ~ x) lorsque les variables x ou y (ou les deux) ont uniquement des NA.
Voici un exemple:

n <- 10
x <- rnorm(n,1)
y <- rep(NA,n)
lm(y ~ x)

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  0 (non-NA) cases

Dans votre code, je suggère de tester (juste avant vos commandes lm) si l'une de vos variables a toutes les NA utilisant:

all(is.na(x))
all(is.na(y))
all(is.na(y^trans))

Dans mon exemple:

all(is.na(y))
[1] TRUE
5
Marco Sandri

L'erreur peut être déclenchée par NA dans vos données ou une mauvaise transformation

#From the mtcars dataset
mpg.reg3 <- lm(mpg ~ cylinders + displacement + horsepower + weight + acceleration + year + Origin, data=Auto, na.action=na.exclude)

Notez l'argument na.action=. Définir ceci sur na.exclude permettra à la fonction lm d'ignorer les NA de vos données. Une autre option est na.omit, qui agit de manière légèrement différente. 

L’autre problème peut être une mauvaise transformation de vos données - vérifiez bien les termes et manipulations de vos interactions. 

1
ToastyDre