Estoy intentando ejecutar una transformación boxcox con el siguiente código:
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
Pero sigo recibiendo este error:
Error in lm.fit(x,y,offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases Calls:
Gracias de antemano
El mensaje de error
lm.fit(x,y,offset = offset, singular.ok = singular.ok, ...) : 0
Casos (no-NA)
es generado por el comando lm(y ~ x)
cuando las variables x
o y
(o ambas) sólo tienen NAs.
He aquí un ejemplo:
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
En tu código te sugiero que pruebes (justo antes de tus comandos lm
) si una de tus variables tiene todos NAs usando:
all(is.na(x))
all(is.na(y))
all(is.na(y^trans))
En mi ejemplo:
all(is.na(y))
[1] TRUE
El error puede deberse a NA's en los datos o a una mala transformación.
#From the mtcars dataset
mpg.reg3 <- lm(mpg ~ cylinders + displacement + horsepower + weight + acceleration + year + origin, data=Auto, na.action=na.exclude)
Fíjese en el argumento na.action=
. Si se define como na.exclude
, la función lm
ignorará los NA's de los datos. Otra opción es na.omit
, que actúa de forma ligeramente distinta.
El otro problema puede ser una mala transformación de los datos: compruebe los términos de interacción y las manipulaciones.