22 ¿Cómo obtener la matriz \(\boldsymbol{X}\) y el vector \(\boldsymbol{y}\)?

En este corto capítulo se muestra cómo crear la matriz \(\boldsymbol{X}\) y el vector \(\boldsymbol{y}\) necesario para aplicar varios modelos predictivos.

Las funciones model.matrix, model.frame y model.extract son útiles para obtener la matriz \(\boldsymbol{X}\) y el vector \(\boldsymbol{y}\). A continuación se muestra un ejemplo ilustrativo.

Ejemplo

Usando la base de datos de abajo construya la matriz \(\boldsymbol{X}\) y el vector \(\boldsymbol{y}\) para crear un modelo de regresión que explique la variable Precio del apartamento en función del Area del apartamento y Pisci. Tome el nivel Sin de la variable Pisci como nivel de referencia.

Solución

Lo primero es crear el marco de datos así:

datos <- data.frame(Precio = c(12, 15, 25, 11, 16, 7),
                    Area = c(3, 4, 1, 6, 5, 3), 
                    Pisci = factor(x=c('Grande', 'Sin', 'Pequena', 'Pequena', 'Sin', 'Grande'),
                                   levels=c('Sin','Pequena','Grande')))
datos
##   Precio Area   Pisci
## 1     12    3  Grande
## 2     15    4     Sin
## 3     25    1 Pequena
## 4     11    6 Pequena
## 5     16    5     Sin
## 6      7    3  Grande

Luego usamos la función model.matrix para obtener \(\boldsymbol{X}\).

form <- formula(Precio ~ Area + Pisci)
X <- model.matrix(object=form, data=datos)
X
##   (Intercept) Area PisciPequena PisciGrande
## 1           1    3            0           1
## 2           1    4            0           0
## 3           1    1            1           0
## 4           1    6            1           0
## 5           1    5            0           0
## 6           1    3            0           1
## attr(,"assign")
## [1] 0 1 2 2
## attr(,"contrasts")
## attr(,"contrasts")$Pisci
## [1] "contr.treatment"

Luego usamos las funciones model.frame y model.extract para obtener el vector \(\boldsymbol{y}\).

mf <- model.frame(Precio ~ Area + Pisci, data=datos)
y <- model.extract(mf, "response")
y
##  1  2  3  4  5  6 
## 12 15 25 11 16  7