Usar la función de predicción en un modelo de regresión lineal en R

Jesse John 21 junio 2023
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.

  1. Un objeto modelo.
  2. Nuevos datos.

En este contexto, hay dos consideraciones importantes que debemos tener en cuenta.

  1. 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.

  2. 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().

  1. Debemos pasar un data frame al argumento newdata de la función predict(). Esto se hizo arriba después del primer error.
  2. 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
Autor: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

Artículo relacionado - R Error