library(readxl)
Datos = read_excel("C:/REst/Datos_Vivienda2.xlsx")
Datos
## # A tibble: 27 x 12
## Zona piso Estrato precio area parqueaderos Banos Habitaciones Tipo Barrio
## <chr> <chr> <dbl> <dbl> <dbl> <chr> <dbl> <dbl> <chr> <chr>
## 1 Zona~ 3 5 250 86 NA 2 3 Apar~ multi~
## 2 Zona~ 3 5 385 118 2 3 4 Apar~ multi~
## 3 Zona~ NA 5 395 130 NA 3 4 Apar~ multi~
## 4 Zona~ 4 6 419 181 2 3 3 Apar~ multi~
## 5 Zona~ 4 5 240 86 1 2 3 Apar~ multi~
## 6 Zona~ 3 5 320 98 2 2 3 Apar~ multi~
## 7 Zona~ 4 5 480 170 2 4 4 Apar~ multi~
## 8 Zona~ 4 5 268 96 1 3 3 Apar~ multi~
## 9 Zona~ NA 5 240 85 1 3 3 Apar~ multi~
## 10 Zona~ 4 5 450 170 2 4 4 Apar~ multi~
## # ... with 17 more rows, and 2 more variables: cordenada_longitud <dbl>,
## # Cordenada_latitud <dbl>
Acontinuacion realizaremos el primer acercamiento con Regresion linel en la plataforma R
Se observa que la base de datos contiene un total de 27 ofertas de vivienda (apartamentos) en el barrio multicentro. Con un total de 12 variables referentes a las caracteristicas de la vivienda como: precio, area, estrato entre otras.
summary(Datos$precio)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 240.0 252.5 320.0 366.1 402.5 1250.0
hist(Datos$precio,col="green")
Se Encontro un Dato Atipico [1.200 mm] el cual fue excluido….
Datos2=Datos[-25,]
summary(Datos2$precio)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 240.0 251.2 305.0 332.1 395.0 480.0
hist(Datos2$precio,col="gray")
Inicialmente se observa un valor atipico en el precio de las viviendas de las de 1.200 millones de pesos que se considera demasiado alto de acuerdo a los resultados. Se elimina este registro y genera nuevamente el histograma con un comportamiento bimodal (dos picos) indicando posiblemente dos tipos de vivienda con precios diferenciados.
plot(Datos2$area,Datos2$precio)
cor(Datos2$area,Datos2$precio)
## [1] 0.9190295
Se observa que en la grafica se encuentra un indicador de correlacion de person de 0.91, siendo este muy fuerte e indicando una relación positivamente fuerrte
summary(Datos2$piso)
## Length Class Mode
## 26 character character
Datos2$piso=as.numeric(Datos2$piso)
## Warning: NAs introducidos por coerción
hist.default(Datos2$piso)
De acuerdo al análisis Univariado,el mayor porcentaje de los apartamentos estan en un 4 piso.
mod=lm(precio ~ area, data = Datos2)
mod
##
## Call:
## lm(formula = precio ~ area, data = Datos2)
##
## Coefficients:
## (Intercept) area
## 86.234 2.124
Se observa que los valores optimos son \(\beta_0=86.23\) y \(\beta_1=2.12\) de acuerdo con MCO.Es decir que el modelo estimado seria de la forma:
\(precio= \beta_0 + \beta_1*area\) es decir \(precio= 86.234 + 2.124*area\)
La interpretación de los valores es: teniendo en cuenta que \(\beta_0\) no se debe interpretar ya que el rango de X (area) no contiene el cero, vamos a suponer que este lo es. En tal caso diriamos que el precio de una vivienda cuya area contruida es de cero seria aproximadamente de 86.23 millones de pesos (ejemplo precio del lote sin construir).
\(precio= \beta_0 + \beta_1*area\) es decir \(precio= 86.234 + 2.124*area\)
plot(Datos2$area,Datos2$precio)
abline(mod,col="blue")
Se observa que la linea azul es el modelo por MCO que garantiza la menor suma de uadrados del error. Menor distancia de los puntos a la linea .
¿ Cual seria el precio estimado de un apartamento de 110 metros cuadrados de la Zona de acuerdo al Modelo ?
predict(mod,list(area=110))
## 1
## 319.8706
El Modelo predíce que un apartamento de 110 metros cuadrados puede costar en promedio 319.8706
¿Si se esta negociando un apto de estas caracteristicas en 305 millones se considera buena oferta? ¿ Ahora si el precio se baja a 280 millones??
predict(mod,list(area=110),interval = "confidence",level = 0.95)
## fit lwr upr
## 1 319.8706 306.3133 333.4279
Se observa que el precio promedio de un apto de 110 mt2 en la zona se encuentra entre los 306 a 333 millones de pesos con un 95% de confianza. Es decir que la oferta de 305 es levemente interesante pero la de 280 si se encuentra por debajo del intervalo y se considera una buena oportunidad de negocio.
summary (mod)
##
## Call:
## lm(formula = precio ~ area, data = Datos2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -51.673 -25.612 -6.085 24.875 67.650
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 86.234 22.479 3.836 0.000796 ***
## area 2.124 0.186 11.422 3.45e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 33.05 on 24 degrees of freedom
## Multiple R-squared: 0.8446, Adjusted R-squared: 0.8381
## F-statistic: 130.5 on 1 and 24 DF, p-value: 3.45e-11
Se observa que el P valio del Coeficiente de \(\beta_1\) es casi cero lo que indica que el area es estadisticametne significativa en el modelo.
Por otro lado se observa que el \(R^2=0.8446\) nos indica que el modelo explica el 84% de la variabilidad de los precios de los aptos.
hist(mod$residuals,col="green",main = "Histograma Residuales")
qqnorm(mod$residuals)
qqline(mod$residuals,col="red")
Como se observa en el grafico qq de normalidad los datos siguen el comportamiento de la linea roja normal. es decir graficamente podemos validar el supuesto.
Cuando el modelo tiene como objetivo realizar pronosticos es importante realizar una validación con datos por fuera de la muestra con la que se estima el modelo. Una alternativa es la validación crazada . Se dividen los datos en una parte para el modelo y otra para validar el pronostico. El enfoque clasico deja por fuera cada observación de forma sistematica.
##Caso un solo valor
mod2=lm(precio~area,data=Datos2[-1,])
pronostico_precio=predict(mod2,list(area=Datos2$area[1]))
diferencia=pronostico_precio-Datos2$precio[1]
diferencia
## 1
## 20.24093
##Caso todos los datos
valida=function(fila){
mod2=lm(precio~area,data=Datos2[-fila,])
pronostico_precio=predict(mod2,list(area=Datos2$area[fila]))
diferencia=pronostico_precio-Datos2$precio[fila]
return(diferencia)
}
valida(fila = 1)
## 1
## 20.24093
diferencias=sapply(1:26, valida)
diferencias
## 1 1 1 1 1 1 1
## 20.240932 -50.071482 -34.184639 62.502985 30.953063 -26.920897 -37.647711
## 1 1 1 1 1 1 1
## 23.319878 28.736800 -3.099168 33.162496 -49.146926 -22.607593 28.736800
## 1 1 1 1 1 1 1
## 19.105767 20.240932 20.240932 -34.184639 -14.883532 1.250179 -70.829777
## 1 1 1 1 1
## 11.780654 -23.714600 -15.691716 66.094685 42.965555
#MAE - Mean Absolut Error
mean(abs(diferencias))
## [1] 30.47363
fit=predict(mod2,list(area=150))
lw=predict(mod2,list(area=150))-30
up=predict(mod2,list(area=150))+30
c(fit,lw,up)
## 1 1 1
## 404.9549 374.9549 434.9549
De acuerdo a la validación cruzada el modelo presenta un error medio adsoluto de pronostico de 30 MM. Es dato importante que se debe cintemplar cuando se use el modleo con fines de pronostico.
Ahora veamos un Modelo que incorpore más variable predictoras por ejemplo que pasaria si incluimos en el modelo el piso del Apto. y los Parqueaderos.
Datos2$piso=as.numeric(Datos2$piso)
Datos2$parqueaderos=as.numeric(Datos2$parqueaderos)
## Warning: NAs introducidos por coerción
mod_multi=lm(precio~area+piso+parqueaderos,data=Datos2)
summary(mod_multi)
##
## Call:
## lm(formula = precio ~ area + piso + parqueaderos, data = Datos2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -45.068 -7.862 3.139 9.117 36.374
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 113.4096 31.4209 3.609 0.00216 **
## area 1.8584 0.1873 9.923 1.73e-08 ***
## piso -18.0386 8.2949 -2.175 0.04406 *
## parqueaderos 43.2240 12.9080 3.349 0.00381 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 22.03 on 17 degrees of freedom
## (5 observations deleted due to missingness)
## Multiple R-squared: 0.9386, Adjusted R-squared: 0.9277
## F-statistic: 86.57 on 3 and 17 DF, p-value: 1.679e-10
El Modelo estimado es: \(precio= \beta_0 + \beta_1*area\) + _2* piso + _3 *parqueadero + error$
El precio promedio en el mercado de un apto de 110 mts2 con un parqueadero en el piso 2 es de 324.977.000 pesos. El valor del inmueble con $_0 = 0 es de 113 mm., por cada mt de area construida aumentaaria 1.8 mm. Si aumenta un piso al segundo piso reduce el valor 18 mm. Por cada parqueadero aumenta 43 mm. El precio promedio en el mercado de un apto de 110 mts2 con un parqueadero en el piso 2 es de 324.977.000 pesos. El valor del inmueble con $_0 = 0 es de 113 mm., por cada mt de area construida aumentaaria 1.8 mm. Si aumenta un piso al segundo piso reduce el valor 18 mm. Por cada parqueadero aumenta 43 mm. En multicentro los aptos no superan el 5 piso y no tienen ascensor. Por esta razón el aumentar de piso disminuye el valor.
predict(mod_multi,list(area=110,piso=2,parqueaderos=1))
## 1
## 324.977
El Modelo estimado es: \(precio= \beta_0 + \beta_1*area\) + _2* piso + _3 *parqueadero + error$
##Caso todos los datos
Datos2=na.omit(Datos2)
valida=function(fila){
mod2=lm(precio~area+piso+parqueaderos,data=Datos2[-fila,])
pronostico_precio=predict(mod2,list(area=Datos2$area[fila],piso=Datos2$piso[fila],parqueaderos=Datos2$parqueaderos[fila]))
diferencia=pronostico_precio-Datos2$precio[fila]
return(diferencia)
}
valida(fila = 1)
## 1
## -22.1806
diferencias=sapply(1:21, valida)
#MAE - Mean Absolut Error
mean(abs(diferencias))
## [1] 19.15609
##Comparado con el modelo de regresión simple anterior donde solo esta ajustado por área el error es mucho mas alto de 30 mm, mientras que el modelo de regresión múltiple esta ajustado con piso y parqueadero ademas del área. Por esa razón el error de predicción es mucho menor 19 mm.
predict(mod_multi,list(area=150,piso=3,parqueaderos=2))
## 1
## 424.4972
##Caso todos los datos
Datos2=na.omit(Datos2)
valida=function(fila){
mod_multi=lm(precio~area+piso+parqueaderos,data=Datos2[-fila,])
pronostico_precio=predict(mod2,list(area=Datos2$area[fila],piso=Datos2$piso[fila],parqueaderos=Datos2$parqueaderos[fila]))
diferencia=pronostico_precio-Datos2$precio[fila]
return(diferencia)
}
valida(fila = 1)
## 1
## -47.40206
diferencias=sapply(1:21, valida)
#MAE - Mean Absolut Error
mean(abs(diferencias))
## [1] 29.36961
El apartamento de 150 mts2 con dos parqeaderos en un piso 3 costaria 424 mm mas o menos 29 mm. Si le venden un aptarmaneto de 150 mts2 con dos parqueadreos en un 3 piso por 300 mm es buen negocio? SI
Por que el valor minimo de venta de un apto con esas caracterisiticas de acuerdo al Modelos Multiple su valor ocila entre 395 mm y 453 mm . Por ende es muy buena inversioón.
##Comparado con el modelo de regresión simple anterior donde solo esta ajustado por área el error es mucho mas alto de 30 mm, mientras que el modelo de regresión múltiple esta ajustado con piso y parqueadero ademas del área. Por esa razón el error de predicción es mucho menor 19 mm, teniendo encuenta que se involucran variables de alta sencibilidad. (area, Piso y Parqueadero)