Usar la función de predicción en un modelo de regresión lineal en R
Después de haber construido un modelo de regresión lineal usando la función lm()
, una de las cosas que podemos hacer con ella es predecir valores de la variable de respuesta (también llamada salida o dependiente) para nuevos valores de la función (también llamada las variables de entrada o independientes).
En este artículo, veremos los argumentos básicos de la función predecir()
de R en el contexto de la regresión lineal. En particular, veremos que la función espera que la entrada esté en un formato específico con nombres de columna específicos.
Utilice la función predict()
en un modelo de regresión lineal en R
Para demostrar la función predecir()
, primero construiremos un modelo de regresión lineal con algunos datos de muestra.
Observe los nombres de las columnas en el marco de datos y observe cómo se usan en la fórmula de regresión lineal.
Código de ejemplo:
Feature = c(15:24)
set.seed(654)
Response = 2* c(15:24) + 5 + rnorm(10, 0,3)
DFR = data.frame(Response, Feature)
DFR
# The arguments' formula and data are named for clarity.
LR_mod = lm(formula = Response~Feature, data = DFR)
LR_mod
Producción :
> Feature = c(15:24)
> set.seed(654)
> Response = 2* c(15:24) + 5 + rnorm(10, 0,3)
> DFR = data.frame(Response, Feature)
> DFR
Response Feature
1 32.71905 15
2 35.83089 16
3 44.06888 17
4 40.71729 18
5 43.28590 19
6 47.45182 20
7 50.19730 21
8 51.81954 22
9 53.22364 23
10 51.69406 24
> # The arguments' formula and data are named for clarity.
> LR_mod = lm(formula = Response~Feature, data = DFR)
> LR_mod
Call:
lm(formula = Response ~ Feature, data = DFR)
Coefficients:
(Intercept) Feature
2.096 2.205
Usa predict()
para predecir la respuesta
Ahora que tenemos un modelo de regresión lineal, podemos usar la función predict()
de R para predecir valores de la respuesta correspondientes a nuevos valores de las variables de características.
La función predict()
necesita al menos dos argumentos para un modelo de regresión lineal.
- Un objeto modelo.
- Nuevos datos.
En este contexto, hay dos consideraciones importantes que debemos tener en cuenta.
-
Necesitamos proporcionar los nuevos datos como un marco de datos. En nuestro ejemplo, la característica es una sola variable.
Si le damos un vector a la función
predict()
, obtendremos un error. -
Si el nombre de la columna de la variable de característica en el nuevo marco de datos difiere del nombre de la columna correspondiente en el marco de datos original, obtenemos un resultado inesperado.
Código de ejemplo:
# First, let us create new values for the feature variable.
NewFeature = c(20.5, 16.5, 22.5)
# If we provide a vector, we get an error.
predict(object = LR_mod, newdata = NewFeature)
# Make a data frame.
DFR2 = data.frame(NewFeature)
# Another error.
# R saw the correct number of rows in the new data but did not use them.
predict(LR_mod, newdata = DFR2)
Producción :
> # First, let us create new values for the feature variable.
> NewFeature = c(20.5, 16.5, 22.5)
> # If we provide a vector, we get an error.
> predict(object = LR_mod, newdata = NewFeature)
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) :
'data' must be a data.frame, environment, or list
> # Make a data frame.
> DFR2 = data.frame(NewFeature)
> # Another error.
> # R saw the correct number of rows in the new data but did not use them.
> predict(LR_mod, newdata = DFR2)
1 2 3 4 5 6 7 8 9 10
35.17674 37.38209 39.58745 41.79280 43.99816 46.20351 48.40887 50.61422 52.81958 55.02494
Warning message:
'newdata' had 3 rows but variables found have 10 rows
Debemos asegurarnos de dos cosas para obtener el resultado correcto de la función predict()
.
- Debemos pasar un data frame al argumento
newdata
de la funciónpredict()
. Esto se hizo arriba después del primer error. - El nombre de la columna de las variables de características debe ser el mismo que el utilizado en el marco de datos original para construir el modelo. Haremos este cambio en el siguiente segmento de código.
También es una buena práctica nombrar los argumentos.
Con estos aspectos abordados, obtenemos el resultado esperado de la función predict()
.
Código de ejemplo:
# The feature column of the new data frame is given the same name as in the original data frame.
DFR3 = data.frame(Feature = NewFeature)
# Finally, predict() works as expected.
predict(LR_mod, newdata = DFR3)
Producción :
> # The feature column of the new data frame is given the same name as in the original data frame.
> DFR3 = data.frame(Feature = NewFeature)
> # Finally, predict() works as expected.
> predict(LR_mod, newdata = DFR3)
1 2 3
47.30619 38.48477 51.71690