values studio predicted observations new función funcion forecast for data r prediction lm

studio - Obteniendo Advertencia: “''newdata'' tenía 1 fila pero las variables encontradas tienen 32 filas” en predic.lm



predict glm r (4)

Encontré peculiaridad al usar la función de predicción y lm en R. Obtuve resultados diferentes para el marco de datos y el vector para los mismos datos.

Código de marco de datos:

data(mtcars) fitCar<-lm(mtcars$mpg~mtcars$wt) predict(fitCar, data.frame(x=mean(mtcars$wt)), interval="confidence")

Salida:

fit lwr upr 1 23.282611 21.988668 24.57655 2 21.919770 20.752751 23.08679 3 24.885952 23.383008 26.38890 4 20.102650 19.003004 21.20230 5 18.900144 17.771469 20.02882 6 18.793255 17.659216 19.92729 7 18.205363 17.034274 19.37645 8 20.236262 19.136179 21.33635 9 20.450041 19.347720 21.55236 10 18.900144 17.771469 20.02882 11 18.900144 17.771469 20.02882 12 15.533127 14.064349 17.00190 13 17.350247 16.104455 18.59604 14 17.083024 15.809403 18.35664 15 9.226650 6.658271 11.79503 16 8.296712 5.547468 11.04596 17 8.718926 6.052112 11.38574 18 25.527289 23.927797 27.12678 19 28.653805 26.519252 30.78836 20 27.478021 25.554415 29.40163 21 24.111004 22.715653 25.50635 22 18.472586 17.319886 19.62529 23 18.926866 17.799465 20.05427 24 16.762355 15.452833 18.07188 25 16.735633 15.423002 18.04826 26 26.943574 25.112491 28.77466 27 25.847957 24.198041 27.49787 28 29.198941 26.963760 31.43412 29 20.343151 19.242185 21.44412 30 22.480940 21.268498 23.69338 31 18.205363 17.034274 19.37645 32 22.427495 21.219818 23.63517

Mensaje de advertencia:

''newdata'' tenía 1 fila pero las variables encontradas tienen 32 filas

Cuando separo ambos datos en vector, obtuve una respuesta diferente

Código para vector

predict(fit,data.frame(x=mean(x)), interval="confidence")

Salida:

fit lwr upr 1 20.09 18.99 21.19

¿Cuál es la razón de esta diferencia?


En la fórmula para la función lm no se refieren a las variables que usan el patrón datasetname $ variablename. En su lugar, use variablename + variablename ... Esto no arrojará la advertencia: ''newdata'' tenía una fila nrow (prueba) pero las variables encontradas tienen filas nrow (tren).


Este es un problema de usar diferentes nombres entre sus data y sus newdata data y no un problema entre el uso de vectores o marcos de datos.

Cuando ajusta un modelo con la función lm y luego usa la predict para hacer predicciones, la predict intenta encontrar los mismos nombres en sus datos newdata . En su primer caso, el nombre x entra en conflicto con mtcars$wt y, por lo tanto, obtiene la advertencia.

Vea aquí una ilustración de lo que digo:

Esto es lo que hiciste y no recibiste un error:

a <- mtcars$mpg x <- mtcars$wt #here you use x as a name fitCar <- lm(a ~ x) #here you use x again as a name in newdata. predict(fitCar, data.frame(x = mean(x)), interval = "confidence") fit lwr upr 1 20.09062 18.99098 21.19027

Observe que en este caso se ajusta a su modelo con el nombre x y también predice con el nombre x en sus newdata . De esta manera no recibirá advertencias y es lo que espera.

Veamos qué sucede cuando cambio el nombre a otro cuando me ajusto al modelo:

a <- mtcars$mpg #name it b this time b <- mtcars$wt fitCar <- lm(a ~ b) #here I am using name x as previously predict(fitCar, data.frame(x = mean(x)), interval = "confidence") fit lwr upr 1 23.282611 21.988668 24.57655 2 21.919770 20.752751 23.08679 3 24.885952 23.383008 26.38890 4 20.102650 19.003004 21.20230 5 18.900144 17.771469 20.02882 Warning message: ''newdata'' had 1 row but variables found have 32 rows

Lo único que hice ahora fue cambiar el nombre x al ajustar el modelo a b y luego predecir usando el nombre x en los newdata . Como puede ver, recibí el mismo error que en su pregunta.

Espero que esto esté claro ahora!


Tuve el mismo problema cuando estaba usando el nombre de la variable en conjunción con el nombre de los datos con el uso del signo $ .

Entonces en lugar de:

fitCar<-lm(mtcars$mpg~mtcars$wt) predict(fitCar, data.frame(x=mean(mtcars$wt)), interval="confidence")

Utilizar este:

fitCar<-lm(mpg~wt , data = mtcars) predict(fitCar, wt = mean(mtcars$wt), interval = "confidence")


Una forma de evitar esto sin hacer nombres es usar lo siguiente:

fitCar<-lm(mpg ~ wt, mtcars) #here you use x as a name predict(fitCar,data.frame(wt=mean(mtcars$wt)), interval="confidence")