1 Introducción

En esta ocasión se requiere hacer una regresión lineal de la variable precio de vivienda en función de las variables Tipo de vivienda (categorica) y área construida(cuantitativa).Recordemos que la base de datos de vivienda, la cual cuenta con 8319 registros y 12 variables de diferentes viviendas en Cali. A continuación haremos un breve analisis exploratorio de la variable, precio,área construida y tipo de vivienda .

Variable Precio:

##        Media   Desviación    Asimetría          Min          Max     Coef.var 
##  433.8919471  328.6472443    1.8495890   58.0000000 1999.0000000    0.7574403
hist(Vivienda$precio_millon,freq=F,main="Histograma y diagrama de caja-precio",col="aquamarine3",
xlab="Precio en millones",ylab="Densidad")
par(new = TRUE)
boxplot(Vivienda$precio_millon, horizontal = TRUE, axes = FALSE,
lwd = 2, col = rgb(0, 0, 0, alpha = 0.2))

El precio por vivienda toma valores entre 58 millones de pesos y 1999 millones de pesos, el precio promedio es 433 millones sin embargo es de 0.75, indicando que la media de los datos no es tan representativa y pierde confiabilidad. Como se aprecia en la gráfica existe asimetria positiva es decir, la cola de la derecha se alarga.Adicionalmente el 75% (5975) de los datos toma valores menores o igual a 500.

Variable Área construida

##        Media   Desviación    Asimetría          Min          Max     Coef.var 
##  174.9349381  142.9641260    2.6938460   30.0000000 1745.0000000    0.8172417
hist(Vivienda$Area_contruida,freq=F,main="",col="aquamarine3",xlab="Área construida",ylab="Densidad")
par(new = TRUE)
boxplot(Vivienda$Area_contruida,horizontal=TRUE,axes=FALSE,lwd = 2, col = rgb(0, 0, 0, alpha = 0.2))

La variable área construida toma valores entre 30 metros cuadrados y 1745 metros cuadrados, en promedio las viviendas tienen un área de 174 sin embargo coeficiente de variación de 0.81, este valor es aún más cercano a 1 por lo que la media es aún menos representativa de los datos. Como se aprecia en la gráfica anterior obtenemos una asimetría positiva, mucha mas asimetria que la variable precio.Por otro lado,el 75% de los datos tienen áreas menores o igual a 229.

Variable Tipo de Vivienda

Esta variable tiene dos categorias las cuales son Apartamento y Casa, el 61% de las viviendas son de tipo apartamento y el 38% de tipo casa.

## 
## Apartamento        Casa 
##   0.6130545   0.3869455

Ahora bien, puesto que nuestro interes es ajustar un modelo de regresión para predecir la variable precio realizamos un diagra de caja de ambos tipos de vivienda y el precio.

boxplot(Vivienda$precio_millon~ Vivienda$Tipo, col=c("#A2CD5A","#66CDAA"),xlab = "Tipo de vivienda", ylab = "Precio en millones")

Como se aprecia en el gráfico anterior el precio de una vivienda es aparentemente más grande cuando el tipo de vivienda es una casa los valores de una casa están entre 77 millones y 1999 millones, el precio promedio de una casa es 430 millones . Por otro lado, los precios de los apartamentos están entre 58 y 1950 millones y en promedio el precio de una apartamento es 366.9 millones. Lo anterior nos da un indicio de que el tipo de vivienda puede ser una variable que explique bien el precio de una vivienda.

2. Ajustando el modelo

Para ajustar el modelo de regresión necesitamos hacer una tranformación en la variable Tipo y agregarle un uno si la vivienda es una casa y cero en el caso contrario.Eso lo hacemos con la siguiente función.

mod = lm(precio_millon~Area_contruida+Tipo_Apartamento, data=Newdata)
summary(mod)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida + Tipo_Apartamento, 
##     data = Newdata)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2926.71  -122.58   -49.12    71.12  1276.36 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       49.19021    7.17011    6.86 7.36e-12 ***
## Area_contruida     1.79514    0.02145   83.69  < 2e-16 ***
## Tipo_Apartamento 115.29391    6.29551   18.31  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 234.1 on 8316 degrees of freedom
##   (3 observations deleted due to missingness)
## Multiple R-squared:  0.4929, Adjusted R-squared:  0.4928 
## F-statistic:  4042 on 2 and 8316 DF,  p-value: < 2.2e-16

Al ajustar un modelo de regresión de la variable precio en millones en función de las variables área construida y tipo de vivienda, en esta caso pusimos tipo apartamento (valores 1) , el R2 nos dice que el 49% de la variabilidad del precio de la vivienda está siendo explicado por el modelo.En comparación con el modelo anterior en el cual el precio estaba sólo en función del área construida aumentó en un 5% sin embargo el error estándar también aumentó.

El primer coeficiente nos dices que si el área aumenta en un metro cuadrado el precio aumenta en 1.79514 millones y el segundo coeficiente nos dice que el precio de los apartamentos en promedio es 115.29391 millones mayor que el de las casas.

7 Evaluación de supuestos

Homocedasticidad

res.stud<-studres(mod)
mod.fit<-mod$fitted.values

par(mfrow=c(1,2))
plot(mod.fit,res.stud,ylab="Residuos estudentizados",xlab="Valores ajustados")
abline(h=0,lty=2)
lines(lowess(res.stud~mod.fit), col = 2)
plot(mod.fit,abs(res.stud),ylab="|Residuos estudentizados|",xlab="Valores ajustados")
lines(lowess(abs(res.stud)~mod.fit), col = 2)

En la figura anterior se observa como la varianza aumenta a medida que lo hacen los valores ajustados, decimos así que el modelo no cumple el supuesto de homocedasticidad.

bptest(mod)
## 
##  studentized Breusch-Pagan test
## 
## data:  mod
## BP = 1922.7, df = 2, p-value < 2.2e-16

De la salida anterior se observa que el valor-P es menor que el nivel de significancia usual de 5%, por lo tanto, hay evidencias para decir que no se cumple la homocedasticidad de los errores.

Normalidad

car::qqPlot(mod)

## [1] 1017 3324

El gráfico qqplot muestra como el modelo no cumple con el supuesto de normalidad.

Transformación

Para solucionar los problemas de incumplimiento de supuestos realizaremos una trasformación por BoxCox.

boxcox = MASS::boxcox(mod,lambda=seq(-3,3,length.out = 1000),
ylab='log-verosimilitud')

boxcox$x[boxcox$y ==max(boxcox$y)]
## [1] 0.03303303

El valor al cual se elevará la variable respuesta es aquel que maximiza la logverosimilitud. De modo que realizamos la transformación Y0.03303 para un nuevo modelo.

modBox<-lm(precio_millon^0.03303~Area_contruida+Tipo,data=Vivienda)

Evaluación de supuestos

A continuación procederemos a evaluar los supuestos del modelo transformado.

Normalidad

car::qqPlot(modBox)

## [1] 1017 3324

Tras realizar la transformación se nota que ha habido una gran mejora en el gráfico qqplot.

Homocedasticidad

res.stud.box<-studres(modBox)
mod.fit.box<-modBox$fitted.values

par(mfrow=c(1,2))
plot(mod.fit.box,res.stud.box,ylab="Residuos estudentizados",xlab="Valores ajustados")
abline(h=0,lty=2)
lines(lowess(res.stud.box~mod.fit.box), col = 2)
plot(mod.fit.box,abs(res.stud.box),ylab="|Residuos estudentizados|",xlab="Valores ajustados")
lines(lowess(abs(res.stud.box)~mod.fit.box), col = 2)

A pesar de haber logrado una mejora considerable en el gráfico qqPlot, no se obtuvo el mismo resultado para el gráfico de los residuos contra los valores ajustados. Además, se obtiene un valor de R2 de 0.4633, el cual es un poco inferior al obtenido sin la transformación.

summary(modBox)
## 
## Call:
## lm(formula = precio_millon^0.03303 ~ Area_contruida + Tipo, data = Vivienda)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.223265 -0.013248 -0.000351  0.012873  0.058205 
## 
## Coefficients:
##                  Estimate Std. Error  t value Pr(>|t|)    
## (Intercept)     1.191e+00  3.433e-04 3469.748   <2e-16 ***
## Area_contruida  1.363e-04  1.807e-06   75.392   <2e-16 ***
## TipoCasa       -4.729e-03  5.305e-04   -8.914   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01972 on 8316 degrees of freedom
##   (3 observations deleted due to missingness)
## Multiple R-squared:  0.4633, Adjusted R-squared:  0.4631 
## F-statistic:  3589 on 2 and 8316 DF,  p-value: < 2.2e-16