1 Análisis exploratorio

En esta ocasión contamos con una base de datos de vivienda, la cual cuenta con 8319 registros y 12 variables de diferentes viviendas en Cali . A Continuación haremos un análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y área de la vivienda (metros cuadrados).

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 el coeficiente de variación 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, el coeficiente de variación es 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.

2 Análisis bivariado

plot(Vivienda$Area_contruida,Vivienda$precio_millon,col="aquamarine3",xlab="Area construida",ylab="Precio")

Con la gráfica de dispersión de ambas variables se puede apreciar cierta relación entre el precio de una vivienda y el área de la misma, la relación evidentemente podría ser positiva lo que quiere decir que si el área aumenta el precio de la vivienda también. Para comprobar lo anterior realizamos el test de correlación de Pearson. Se obtiene un p-valor muy pequeño, indicando que el coeficiente de Pearson es distinto de 0. El coeficiente obtenido es de 0.6873, con lo que vemos factible aplicar un modelo de regresión lineal.

cor.test(Vivienda$precio_millon,Vivienda$Area_contruida)
## 
##  Pearson's product-moment correlation
## 
## data:  Vivienda$precio_millon and Vivienda$Area_contruida
## t = 86.304, df = 8317, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.6758453 0.6985236
## sample estimates:
##      cor 
## 0.687352

3 Modelo de regresión lineal simple

mod<-lm(precio_millon~Area_contruida,data=Vivienda)
summary(mod)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = Vivienda)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2659.88  -120.78   -47.55    67.27  1330.10 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    157.47636    4.13640   38.07   <2e-16 ***
## Area_contruida   1.58018    0.01831   86.30   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 238.7 on 8317 degrees of freedom
##   (3 observations deleted due to missingness)
## Multiple R-squared:  0.4725, Adjusted R-squared:  0.4724 
## F-statistic:  7448 on 1 and 8317 DF,  p-value: < 2.2e-16

Tras realizar el ajuste del modelo, obtenemos un valor de \(B_0\) de 157.47, sin embargo este valor no tiene una interpretación debido a que no tenemos valores de área costruida cercanos a 0. El valor de \(B_1\) es de 1.5801, este valor nos indica que por cada metro cuadrado el precio de la vivienda aumenta aproximadamente en 1.5801 millones de pesos.

4 Intervalo de confianza

confint(mod)
##                     2.5 %     97.5 %
## (Intercept)    149.367981 165.584740
## Area_contruida   1.544286   1.616067

El resultado anterior nos dice que por cada aumento de un metro en el area, el precio medio de la vivienda incrementa entre 1.544 y 1.616 millones con un nivel de confianza del 95%.

En las pruebas t realizadas se tiene como hipótesis alternativa que los coeficientes son 0. Al obtener valores inferiores a 0.05, decimos que los coeficientes son significativos.

En los intervalos de confianza del 95% notamos que estos no contienen el valor 0, corroborando así los resultados obtenidos mediante las pruebas individuales t.

5 Indicador de bondad R2

El valor R2 obtenido es de 0.4725, es decir, el modelo logra explicar aproximadamente el 47.25% de la variabilidad de la variable respuesta (precio de la vivienda).

6 Predicción

¿Es buena una oferta de 200 millones para un apartamento de 110 m2? Realizando una predicción para un apartamento con 110 m2 tenemos el siguiente resultado:

datos<-data.frame(Area_contruida=110)
predict(mod,datos,interval='confidence',level = 0.95)
##        fit      lwr      upr
## 1 331.2958 325.6605 336.9311

Dentro del intervalo de confianza del 95% no se encuentra el valor de 200, por lo tanto el precio ofrecido es muy bajo a lo que se esperaría para un apartamento con esta área.

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 = 1609.3, df = 1, 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

La anterior gráfica muestra los cuantiles muestrales contra los cuantiles teóricos que se esperarían bajo normalidad. Se observa claramente que los residuos no cumplen con la normalidad.

Transformaciones

Realizaremos una transformación por BoxCox para corregir los supuestos.

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

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

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

modBox<-lm(precio_millon^0.015~Area_contruida,data=Vivienda)

Evaluación de supuestos

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

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.4564, el cual es un poco inferior al obtenido sin la transformación.

summary(modBox)
## 
## Call:
## lm(formula = precio_millon^0.015 ~ Area_contruida, data = Vivienda)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.086437 -0.005566 -0.000164  0.005186  0.024266 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    1.083e+00  1.403e-04 7714.33   <2e-16 ***
## Area_contruida 5.190e-05  6.211e-07   83.56   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.008099 on 8317 degrees of freedom
##   (3 observations deleted due to missingness)
## Multiple R-squared:  0.4564, Adjusted R-squared:  0.4563 
## F-statistic:  6983 on 1 and 8317 DF,  p-value: < 2.2e-16