Unidad 2: Modelo de Regresión Lineal Múltiple - Actividad 2

##Desarrollo del ejercicio para el tipo de Vivienda 1: Tipo Casa, área= 200, Parqueaderos = 1, Baños = 2, Habitaciones = 4, Estrato 4 o 5, Zona = Norte, Credito Preaprobado = 350 millones

Desarrollo de los pasos requeridos para la obtención de los resultados

Paso 1

Se marca la base de datos para obtener un filtro mas sencillo de las bases que queremos comparar. Luego, se genera un mapa para identificar si las viviendas estan localizadas en la zona que les corresponde.

## Rows: 8,322
## Columns: 13
## $ id           <dbl> 1147, 1169, 1350, 5992, 1212, 1724, 2326, 4386, 1209, 159…
## $ zona         <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur…
## $ piso         <chr> NA, NA, NA, "02", "01", "01", "01", "01", "02", "02", "02…
## $ estrato      <dbl> 3, 3, 3, 4, 5, 5, 4, 5, 5, 5, 6, 4, 5, 6, 4, 5, 5, 4, 5, …
## $ preciom      <dbl> 250, 320, 350, 400, 260, 240, 220, 310, 320, 780, 750, 62…
## $ areaconst    <dbl> 70, 120, 220, 280, 90, 87, 52, 137, 150, 380, 445, 355, 2…
## $ parqueaderos <dbl> 1, 1, 2, 3, 1, 1, 2, 2, 2, 2, NA, 3, 2, 2, 1, 4, 2, 2, 2,…
## $ banios       <dbl> 3, 2, 2, 5, 2, 3, 2, 3, 4, 3, 7, 5, 6, 2, 4, 4, 4, 3, 2, …
## $ habitaciones <dbl> 6, 3, 4, 3, 3, 3, 3, 4, 6, 3, 6, 5, 6, 2, 5, 5, 4, 3, 3, …
## $ tipo         <chr> "Casa", "Casa", "Casa", "Casa", "Apartamento", "Apartamen…
## $ barrio       <chr> "20 de julio", "20 de julio", "20 de julio", "3 de julio"…
## $ longitud     <dbl> -76.51168, -76.51237, -76.51537, -76.54000, -76.51350, -7…
## $ latitud      <dbl> 3.43382, 3.43369, 3.43566, 3.43500, 3.45891, 3.36971, 3.4…
## # A tibble: 3 × 14
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  1147 Zona O… <NA>        3     250        70            1      3            6
## 2  1169 Zona O… <NA>        3     320       120            1      2            3
## 3  1350 Zona O… <NA>        3     350       220            2      2            4
## # ℹ 5 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## #   base <chr>

Se muestran algunos registros de la marca de la zona norte y de tipo “Casa”

## # A tibble: 3 × 14
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  1209 Zona N… 02          5     320       150            2      4            6
## 2  1592 Zona N… 02          5     780       380            2      3            3
## 3  4057 Zona N… 02          6     750       445           NA      7            6
## # ℹ 5 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## #   base <chr>

Aqui viene el mapa:

Se logra observar entonces que hay algunas discrepancias en los datos de latitud y longitud dentro de la base, algunos puntos no estan bien ubicados conforme a la zona geografica identificada dentro del mapa de Cali.

Paso 2 - Analisis Exploratorio

Veamos como estan compuestos los datos de las viviendas tipo Casa y de la Zona Norte

##        id             zona               piso              estrato     
##  Min.   :  58.0   Length:722         Length:722         Min.   :3.000  
##  1st Qu.: 766.2   Class :character   Class :character   1st Qu.:3.000  
##  Median :2257.0   Mode  :character   Mode  :character   Median :4.000  
##  Mean   :2574.6                                         Mean   :4.202  
##  3rd Qu.:4225.0                                         3rd Qu.:5.000  
##  Max.   :8319.0                                         Max.   :6.000  
##                                                                        
##     preciom         areaconst       parqueaderos        banios      
##  Min.   :  89.0   Min.   :  30.0   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 261.2   1st Qu.: 140.0   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 390.0   Median : 240.0   Median : 2.000   Median : 3.000  
##  Mean   : 445.9   Mean   : 264.9   Mean   : 2.182   Mean   : 3.555  
##  3rd Qu.: 550.0   3rd Qu.: 336.8   3rd Qu.: 3.000   3rd Qu.: 4.000  
##  Max.   :1940.0   Max.   :1440.0   Max.   :10.000   Max.   :10.000  
##                                    NA's   :287                      
##   habitaciones        tipo              barrio             longitud     
##  Min.   : 0.000   Length:722         Length:722         Min.   :-76.59  
##  1st Qu.: 3.000   Class :character   Class :character   1st Qu.:-76.53  
##  Median : 4.000   Mode  :character   Mode  :character   Median :-76.52  
##  Mean   : 4.507                                         Mean   :-76.52  
##  3rd Qu.: 5.000                                         3rd Qu.:-76.50  
##  Max.   :10.000                                         Max.   :-76.47  
##                                                                         
##     latitud          base          
##  Min.   :3.333   Length:722        
##  1st Qu.:3.452   Class :character  
##  Median :3.468   Mode  :character  
##  Mean   :3.460                     
##  3rd Qu.:3.482                     
##  Max.   :3.496                     
## 

A partir de los graficos obtenidos, se pueden inferir los siguientes puntos:

  • La mayoria de las viviendas en la zona norte tienen un precio inferior a los 1.000.
  • Hay una cantidad mayoritaria de viviendas con un area entre los 50 y 200 m2 que no superan los 200 millones. La gran mayoria de viviendas se ubica en rangos inferiores a los 400 millones, con areas inferiores a los 400 m2.
  • La gran mayoria de viviendas tiene entre 2 y 4 baños. Hay datos con 0 baños?
  • La gran mayoria de las viviendas tiene entre 3 y 5 habitaciones. También hay datos con 0 habitaciones?
  • La gran mayoria de las viviendas es de estrato 5, seguidas de estrato 3 y estrato 4.

Hay algunos valores con nulos en los campos parqueaderos y piso, los cuales tendran que ser tenidos en cuenta a la hora de generar el modelo.

##     id zona estrato preciom areaconst banios habitaciones tipo barrio longitud
## 254  1    1       1       1         1      1            1    1      1        1
## 181  1    1       1       1         1      1            1    1      1        1
## 96   1    1       1       1         1      1            1    1      1        1
## 191  1    1       1       1         1      1            1    1      1        1
##      0    0       0       0         0      0            0    0      0        0
##     latitud base parqueaderos piso    
## 254       1    1            1    1   0
## 181       1    1            1    0   1
## 96        1    1            0    1   1
## 191       1    1            0    0   2
##           0    0          287  372 659

Ahora, sera necesario revisar la correlación entre la variable precio en función del área contruida, estrato, numero de baño y numero de habitaciones.

## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels

## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## A marker object has been specified, but markers is not in the mode
## Adding markers to the mode...
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels

## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## A marker object has been specified, but markers is not in the mode
## Adding markers to the mode...
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels

## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## A marker object has been specified, but markers is not in the mode
## Adding markers to the mode...
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels

## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## A marker object has been specified, but markers is not in the mode
## Adding markers to the mode...
## Warning: Can only have one: highlight

## Warning: Can only have one: highlight

## Warning: Can only have one: highlight

## Warning: Can only have one: highlight

Una vez observados estos graficos, podemos establecer que:

  • Hay una relacion destacable entre el precio de la vivienda y el area construida, lo que quiere decir que a medida que el tamaño de la vivienda aumenta, el precio tambien.
  • Respecto al estrato, podriamos decir que hay una relación moderada, tiene sentido en que cuanto un nivel mayor de estrato, mayor sea el precio de la vivienda.
  • Tambien hay una relación moderada entre el precio de la vivienda y el numero de baños, lo que es lo mismo entre la variable baños y habitaciones, lo que quiere decir que a mayor numero de baños, mayor numero de habitaciones.

Paso 3 - Estimación del Modelo

Paso a Paso:

##          Step Df   Deviance Resid. Df Resid. Dev      AIC
## 1             NA         NA       721   51926104 8076.348
## 2 + areaconst -1 27773709.6       720   24152394 7525.701
## 3   + estrato -1  5069011.9       719   19083382 7357.623
## 4    + banios -1   944488.2       718   18138894 7322.975

MCO:

## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = viv_casas_norte)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -964.04  -80.10  -17.08   50.06 1069.45 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -236.47551   30.36582  -7.788 2.40e-14 ***
## areaconst       0.82677    0.04368  18.926  < 2e-16 ***
## estrato        86.42579    7.39747  11.683  < 2e-16 ***
## habitaciones    1.44443    4.16411   0.347    0.729    
## parqueaderos   -1.67672    4.31505  -0.389    0.698    
## banios         26.97978    5.34384   5.049 5.65e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 159.1 on 716 degrees of freedom
## Multiple R-squared:  0.6508, Adjusted R-squared:  0.6484 
## F-statistic: 266.9 on 5 and 716 DF,  p-value: < 2.2e-16

Este modelo explica el 65% de la variación de los precios de las viviendas. En cuanto a los coeficientes de las variables predictoras:

  • Area construida: un aumento de una unidad en el area construida estara asociado a un aumento de aproximadamente $0.82 en el precio de la vivienda.
  • Estrato: si este valor aumenta una unidad, el precio de la vivienda aumente $86.42.
  • Habitaciones: el coeficiente no es significativo, lo que quiere decir que el numero de habitaciones no tiene una relación tan significante para afectar el precio de la vivienda.
  • Parqueaderos: los valores nulos pueden estar afectando los resultados en esta variable
  • Baños: un baño adicional aumentaria $18.9 aproximadamente el precio de la vivienda.

Paso 4 - Validación Cruzada

Validación simple:

## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = train_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -396.80  -81.72  -19.07   50.02  956.76 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -257.94671   39.55593  -6.521 1.98e-10 ***
## areaconst       1.04059    0.06126  16.987  < 2e-16 ***
## estrato        81.09851    9.60019   8.448 4.71e-16 ***
## habitaciones    9.32165    5.48172   1.700   0.0898 .  
## parqueaderos   -8.62167    5.45830  -1.580   0.1150    
## banios         17.64544    6.89589   2.559   0.0108 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 158.8 on 427 degrees of freedom
## Multiple R-squared:  0.683,  Adjusted R-squared:  0.6793 
## F-statistic:   184 on 5 and 427 DF,  p-value: < 2.2e-16

Los resultados del entrenamiento arrojan variaciones representativas en comparacion al modelo original creado: - el area construida y estrato se mantienen como determinantes al buscar una relación entre el precio de la vivienda - los baños podrian considerarse como una variable no tan significante. - este modelo explicaria el 68.3% de las variaciones en el precio de la vivienda.

Considero que los resultados son logicos, si bien en el modelo original el numero de baós constituye una variable representativa, en la vida real esta variable no es determinante para incidir en el precio de una vivienda.

Probando otra validacion tomando 100 iteraciones:

## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = train_data_subset)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -359.50  -80.95  -14.91   45.04 1029.63 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -239.68016   38.43396  -6.236 1.08e-09 ***
## areaconst       0.91745    0.05674  16.171  < 2e-16 ***
## estrato        84.68179    9.21771   9.187  < 2e-16 ***
## habitaciones    5.93870    5.06267   1.173  0.24143    
## parqueaderos    3.59451    5.46299   0.658  0.51091    
## banios         16.73154    6.43813   2.599  0.00968 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 152.4 on 427 degrees of freedom
## Multiple R-squared:  0.678,  Adjusted R-squared:  0.6742 
## F-statistic: 179.8 on 5 and 427 DF,  p-value: < 2.2e-16

No hay variaciones mayores respecto a los dos modelos de validación. El rango de explicaciones de las variables predictoras si cambia respecto al modelo original de manera importante, pero la incidencia de las variables area, estrato y baños se mantiene. Este ultimo modelo explicaria el 67.8% de las variaciones de precio en las viviendas.

Validación de Supuestos

Al validar los valores residuales, en el primer grafico se debería mostrar una completa aleatoriedad porque se espera que los residuales no tengan ningún comportamiento, como se observa en este caso, lo que quiere decir que los residuales tienen una componente sistemática que podría incorporarse. En el grafico de normalidad, donde se debería distinguir una distribución normal, existe un pedazo muy pequeño al inicio y, sobre todo, al final que se salen de este comportamiento.

Aplicación del bootstrapping:

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

## 
## ORDINARY NONPARAMETRIC BOOTSTRAP
## 
## 
## Call:
## boot(data = viv_casas_norte, statistic = fun_coeficientes, R = 9999)
## 
## 
## Bootstrap Statistics :
##        original      bias    std. error
## t1* -236.475512  2.48414327  31.7212000
## t2*    0.826774  0.00649065   0.1101651
## t3*   86.425791 -0.75739537   9.4138148
## t4*    1.444431 -0.05359858   5.2068291
## t5*   -1.676721 -0.02158661   5.4454510
## t6*   26.979782 -0.25937400   7.4784679

En este caso, algunos coeficientes tienen un sesgo cercano a cero, lo que sugiere que las estimaciones son relativamente imparciales. Los errores estándar varían para cada coeficiente, lo que indica diferentes niveles de precisión en las estimaciones, sin embargo, en general los errores estándar son relativamente bajos.

Paso 5 - Predecir el precio de la vivienda

Se generan los grupos de datasets necesario para ser operados por el modelo construido y se genera una salida:

## [1] "Precio de la  casa de estrato 4:  331.928809541603 ; Precio de la casa de estrato 5:  417.197357631102"

Se obtiene que entonces hay vviendas de estrato 4 con precio al rededor de 332 millones de pesos, lo cual estaría dentro del presupuesto de credito preaprobado.

Paso 6 - Potenciales ofertas

## # A tibble: 11 × 14
##       id zona   piso  estrato preciom areaconst parqueaderos banios habitaciones
##    <dbl> <chr>  <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
##  1  3889 Zona … 01          4     520       350            1      2            4
##  2  1222 Zona … 02          4     360       216            2      2            4
##  3  1822 Zona … <NA>        4     340       295            2      2            4
##  4   403 Zona … 02          5     780       500            2      2            4
##  5  3121 Zona … 02          5     580       247            3      2            4
##  6  2847 Zona … <NA>        5     500       320            2      2            4
##  7  1163 Zona … <NA>        5     350       216            2      2            4
##  8  2557 Zona … <NA>        5     900       850            1      2            4
##  9  4555 Zona … <NA>        5     550       200            3      2            4
## 10  4548 Zona … 02          5     850       296            4      2            4
## 11  1943 Zona … <NA>        5     350       346            1      2            4
## # ℹ 5 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## #   base <chr>

Hay 3 ofertas que tienen un precio menor o igual a 350 millones de pesos y que, además, tienen al menos 1 parqueadero (hay dos ofertas que tienen 2 parqueaderos y un área mayor al requerido). Las demas ofertas sobrepasan el valor, pero aumentan considerablemente el área construida. En el mapa, podemos visualizar con rojo las tres mejores opciones para el cliente: