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

##Desarrollo del ejercicio para el tipo de Vivienda 2: Tipo = Apartamento, área= 300, Parqueaderos = 3, Baños = 3, Habitaciones = 5, Estrato 5 o 6, Zona = Sur, Credito Preaprobado = 850 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: 5 × 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
## 4  5992 Zona S… 02          4     400       280            3      5            3
## 5  1212 Zona N… 01          5     260        90            1      2            3
## # ℹ 5 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## #   base <chr>

Se muestran algunos registros de la marca de la zona sur y de tipo “Apartamento”

## # A tibble: 3 × 14
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  5098 Zona S… 05          4     290        96            1      2            3
## 2   698 Zona S… 02          3      78        40            1      1            2
## 3  8199 Zona S… <NA>        6     875       194            2      5            3
## # ℹ 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 Apartamento y de la Zona Sur

##        id           zona               piso              estrato    
##  Min.   :   3   Length:2787        Length:2787        Min.   :3.00  
##  1st Qu.:2292   Class :character   Class :character   1st Qu.:4.00  
##  Median :4004   Mode  :character   Mode  :character   Median :5.00  
##  Mean   :4131                                         Mean   :4.63  
##  3rd Qu.:5876                                         3rd Qu.:5.00  
##  Max.   :8302                                         Max.   :6.00  
##                                                                     
##     preciom         areaconst       parqueaderos        banios     
##  Min.   :  75.0   Min.   : 40.00   Min.   : 1.000   Min.   :0.000  
##  1st Qu.: 175.0   1st Qu.: 65.00   1st Qu.: 1.000   1st Qu.:2.000  
##  Median : 245.0   Median : 85.00   Median : 1.000   Median :2.000  
##  Mean   : 297.3   Mean   : 97.47   Mean   : 1.415   Mean   :2.488  
##  3rd Qu.: 335.0   3rd Qu.:110.00   3rd Qu.: 2.000   3rd Qu.:3.000  
##  Max.   :1750.0   Max.   :932.00   Max.   :10.000   Max.   :8.000  
##                                    NA's   :406                     
##   habitaciones       tipo              barrio             longitud     
##  Min.   :0.000   Length:2787        Length:2787        Min.   :-76.57  
##  1st Qu.:3.000   Class :character   Class :character   1st Qu.:-76.54  
##  Median :3.000   Mode  :character   Mode  :character   Median :-76.53  
##  Mean   :2.966                                         Mean   :-76.53  
##  3rd Qu.:3.000                                         3rd Qu.:-76.52  
##  Max.   :6.000                                         Max.   :-76.46  
##                                                                        
##     latitud          base          
##  Min.   :3.334   Length:2787       
##  1st Qu.:3.370   Class :character  
##  Median :3.383   Mode  :character  
##  Mean   :3.390                     
##  3rd Qu.:3.406                     
##  Max.   :3.497                     
## 

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 350
  • Hay una cantidad mayoritaria de viviendas con un area entre los 45 y 150 m2.
  • La gran mayoria de viviendas tiene 2 baños. Hay datos con 0 baños?
  • La gran mayoria de las viviendas tiene entre 3 habitaciones. También hay datos con 0 habitaciones?
  • La gran mayoria de las viviendas es de estrato 4 y 5, seguidas de estrato 6 y estrato 3.

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
## 1860  1    1       1       1         1      1            1    1      1        1
## 521   1    1       1       1         1      1            1    1      1        1
## 305   1    1       1       1         1      1            1    1      1        1
## 101   1    1       1       1         1      1            1    1      1        1
##       0    0       0       0         0      0            0    0      0        0
##      latitud base parqueaderos piso     
## 1860       1    1            1    1    0
## 521        1    1            1    0    1
## 305        1    1            0    1    1
## 101        1    1            0    0    2
##            0    0          406  622 1028

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 importante entre el precio de la vivienda y el numero de baños, lo que es lo mismo entre la variable baños y area construida, lo que quiere decir que a mayor numero de baños, mayor area construida, lo cual tiene sentido.

Paso 3 - Estimación del Modelo

Paso a Paso:

##             Step Df   Deviance Resid. Df Resid. Dev      AIC
## 1                NA         NA      2786  102222866 29293.22
## 2    + areaconst -1 58732885.4      2785   43489980 26913.38
## 3      + estrato -1 12599342.2      2784   30890638 25962.01
## 4 + parqueaderos -1  3375404.7      2783   27515234 25641.51
## 5       + banios -1  1919297.5      2782   25595936 25442.00
## 6 + habitaciones -1   405477.7      2781   25190458 25399.49

MCO:

## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = viv_aptos_sur)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1252.31   -42.15    -2.06    36.32   934.06 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -221.04614   13.47771 -16.401  < 2e-16 ***
## areaconst       1.46061    0.04876  29.956  < 2e-16 ***
## estrato        57.00608    2.79648  20.385  < 2e-16 ***
## habitaciones  -22.71789    3.39549  -6.691 2.68e-11 ***
## parqueaderos   48.36353    3.02343  15.996  < 2e-16 ***
## banios         48.60871    3.04050  15.987  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 95.17 on 2781 degrees of freedom
## Multiple R-squared:  0.7536, Adjusted R-squared:  0.7531 
## F-statistic:  1701 on 5 and 2781 DF,  p-value: < 2.2e-16

Este modelo explica el 75% 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 $1.46 en el precio de la vivienda.
  • Estrato: si este valor aumenta una unidad, el precio de la vivienda aumente $57 millones.
  • Habitaciones: aqui seguro los datos inconsistentes podrian generar los errores en los estimados obtenidos en el modelo.
  • Parqueaderos: el valor de cada parqueadero aumenta el valor de la vivienda en $48.3 millones
  • Baños: un baño adicional aumentaria $48.6 aproximadamente el precio de la vivienda.

Ademas, se determina que basicamente todas las variables tienen una incidencia importante en el modelo.

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 
## -813.79  -42.62   -0.03   37.59  836.17 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -192.71242   16.74950 -11.506   <2e-16 ***
## areaconst       2.14418    0.07374  29.077   <2e-16 ***
## estrato        54.10685    3.45563  15.658   <2e-16 ***
## habitaciones  -35.62569    4.26107  -8.361   <2e-16 ***
## parqueaderos   39.48148    3.88106  10.173   <2e-16 ***
## banios         37.12983    3.87625   9.579   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 91 on 1666 degrees of freedom
## Multiple R-squared:  0.7939, Adjusted R-squared:  0.7933 
## F-statistic:  1284 on 5 and 1666 DF,  p-value: < 2.2e-16

Los resultados del entrenamiento no arrojan variaciones representativas en comparacion al modelo original creado: - todas las variables se mantienen como determinantes al buscar una relación entre el precio de la vivienda - se mantienen los valores inconsistentes en el estimado para las habitaciones - este modelo explicaria el 79.4% de las variaciones en el precio de la vivienda.

Considero que los resultados son logicos, excepto por el de las habitaciones. Creo que es necesario ajustar los valores aqui relacionados.

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 
## -1143.30   -44.27    -3.59    36.01   944.91 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -213.36329   18.29723 -11.661  < 2e-16 ***
## areaconst       1.32723    0.06469  20.515  < 2e-16 ***
## estrato        58.13381    3.81683  15.231  < 2e-16 ***
## habitaciones  -28.21479    4.51893  -6.244 5.41e-10 ***
## parqueaderos   51.51719    3.95470  13.027  < 2e-16 ***
## banios         53.71240    4.14191  12.968  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 100.5 on 1666 degrees of freedom
## Multiple R-squared:  0.7343, Adjusted R-squared:  0.7335 
## F-statistic: 920.8 on 5 and 1666 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 se mantiene. Este ultimo modelo explicaria el 73.43% 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 al inicio y 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_aptos_sur, statistic = fun_coeficientes, R = 9999)
## 
## 
## Bootstrap Statistics :
##        original      bias    std. error
## t1* -221.046145  2.76350948  17.5377848
## t2*    1.460612  0.06023138   0.3238293
## t3*   57.006076 -0.47797569   3.5252884
## t4*  -22.717887 -0.69905626   5.7761046
## t5*   48.363531 -0.82720331   7.2144342
## t6*   48.608712 -1.30101427   7.5330439

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 los apartamentos de estrato 5:  679.495118573595 ; Precio de los apartamentos de estrato 6:  736.501195048086"

Se obtiene que entonces hay viviendas de estrato 5 con precio al rededor de 680 millones de pesos y de estrato 6 de 736 millones, lo cual estaría dentro del presupuesto de credito preaprobado.

Paso 6 - Potenciales ofertas

## # A tibble: 5 × 14
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  7182 Zona S… <NA>        5     730       573            3      8            5
## 2  7512 Zona S… <NA>        5     670       300            3      5            6
## 3  5248 Zona S… 08          6    1150       344            4      5            5
## 4  6023 Zona S… 08          6    1150       464            4      6            5
## 5     4 Zona S… <NA>        6    1280       346            4      6            5
## # ℹ 5 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## #   base <chr>

Hay 2 ofertas que tienen un precio menor o igual a 850 millones de pesos y que, además, tienen un area mayor o igual al requerido, sin embargo hay una unica oferta que se considera muy buena ya que tiene 573 m2, 8 baños, 5 habitaciones y es de estrato 5. Las demas ofertas sobrepasan el valor y el área aumenta. En el mapa, podemos visualizar con rojo las dos mejores opciones para el cliente: