Importar Datos y librerias

Acontinuación vamos a cargar los datos de precios de vivienda para la zona (barrio) multicentro en Cali-Valle

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.

Exploración Univariado

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.

Exploratorio Bivariado

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

Análisis Univariado de la Varible Piso

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.

ESTIMACIÓN DEL MODELO DE REGRESIÓN LINEAL

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 .

Prediciones con el Modelo

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

Inferencia en los Parametros del Modelo

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.

Validación de Supuesto

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.

Validación Cruzada (PRONOSTICO)

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.

MODELO DE REGRESIÓN MULTIPLE

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.

Cuál es el precio de promedio (de mercado) de un apto de 110 mt2 con 1 parqueadero en un piso 2?

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.

Cuál es el precio de un apartamento de 150 mts2, en un piso 3 y con dos parqueaderos?

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)