Pontificia Universidad Javeriana

Maestría en Ciencia de Datos

Actividad 2 - Regresión Lineal Múltiple

Zuly Mayerly Alfonso

Caso CYA

Enunciado

María comenzó como agente de bienes raíces en Cali hace 10 años. Después de laborar dos años para una empresa nacional, se trasladó a Bogotá y trabajó para otra agencia de bienes raíces. Sus amigos y familiares la convencieron de que con su experiencia y conocimientos del negocio debía abrir su propia agencia. Terminó por adquirir la licencia de intermediario y al poco tiempo fundó su propia compañía, C&A (Casas y Apartamentos) en Cali. Santiago y Lina, dos vendedores de la empresa anterior aceptaron trabajar en la nueva compaña. En la actualidad ocho agentes de bienes raíces colaboran con ella en C&A.

Actualmente las ventas de bienes raíces en Cali se han visto disminuidas de manera significativa en lo corrido del año. Durante este periodo muchas instituciones bancarias de ahorro y vivienda están prestando grandes sumas de dinero para la industria y la construcción comercial y residencial. Cuando el efecto producto de las tensiones políticas y sociales disminuya, se espera que la actividad económica de este sector se reactive.

Hace dos días, María recibió una carta solicitando asesoría para la compra de dos viviendas por parte de una compañía internacional que desea ubicar a dos de sus empleados con sus familias en la ciudad.

Las solicitudes incluyen las siguientes condiciones:

Características Vivienda 1 Vivienda 2
Tipo Casa Apartamento
Area construida 200 300
Parqueaderos 1 3
Baños 2 3
Habitaciones 4 5
Estrato 4 o 5 5 o 6
Zona Norte Sur
Crédito preaprobado 350 millones 850 millones

Se debe ayudar a María a responder la solicitud, mediante técnicas modelación que usted conoce. Ella requiere le envíe un informe ejecutivo donde analice los dos casos y sus recomendaciones (Informe). Como soporte del informe debe anexar las estimaciones, validaciones y comparación de modelos requeridos (Anexos).

Pasos requeridos para la obtención de los resultado:

1. Realice: A. un filtro a la base de datos e incluya solo las ofertas de : base1:

A. Casas, de la zona norte de la ciudad.

B. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta.

C. (Adicional un mapa con los puntos de las bases. Discutir si todos los puntos se ubican en la zona correspondiente o se presentan valores en otras zonas, por qué?).

library(paqueteMODELOS)
## Loading required package: boot
## Loading required package: broom
## Loading required package: GGally
## Warning: package 'GGally' was built under R version 4.2.3
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## Loading required package: gridExtra
## Warning: package 'gridExtra' was built under R version 4.2.3
## Loading required package: knitr
## Loading required package: summarytools
data("vivienda")
vivienda
## # A tibble: 8,322 × 13
##       id zona  piso  estrato preciom areac…¹ parqu…² banios habit…³ tipo  barrio
##    <dbl> <chr> <chr>   <dbl>   <dbl>   <dbl>   <dbl>  <dbl>   <dbl> <chr> <chr> 
##  1  1147 Zona… <NA>        3     250      70       1      3       6 Casa  20 de…
##  2  1169 Zona… <NA>        3     320     120       1      2       3 Casa  20 de…
##  3  1350 Zona… <NA>        3     350     220       2      2       4 Casa  20 de…
##  4  5992 Zona… 02          4     400     280       3      5       3 Casa  3 de …
##  5  1212 Zona… 01          5     260      90       1      2       3 Apar… acopi 
##  6  1724 Zona… 01          5     240      87       1      3       3 Apar… acopi 
##  7  2326 Zona… 01          4     220      52       2      2       3 Apar… acopi 
##  8  4386 Zona… 01          5     310     137       2      3       4 Apar… acopi 
##  9  1209 Zona… 02          5     320     150       2      4       6 Casa  acopi 
## 10  1592 Zona… 02          5     780     380       2      3       3 Casa  acopi 
## # … with 8,312 more rows, 2 more variables: longitud <dbl>, latitud <dbl>, and
## #   abbreviated variable names ¹​areaconst, ²​parqueaderos, ³​habitaciones

PUNTO A

SE REALIZA PARA AMBOS TIPOS DE INMUEBLE

base1 = subset(vivienda, tipo == "Casa" & zona == "Zona Norte")

#Aunque no se solicita en el punto se excluye de la base las casas y apartamentos sin habitaciones ya que se sale de las condiciones solicitadas por parte de la compañía internacional.
base1<-base1[base1$habitaciones != 0, ]
kable(head(base1))
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
1209 Zona Norte 02 5 320 150 2 4 6 Casa acopi -76.51341 3.47968
1592 Zona Norte 02 5 780 380 2 3 3 Casa acopi -76.51674 3.48721
4057 Zona Norte 02 6 750 445 NA 7 6 Casa acopi -76.52950 3.38527
4460 Zona Norte 02 4 625 355 3 5 5 Casa acopi -76.53179 3.40590
6081 Zona Norte 02 5 750 237 2 6 6 Casa acopi -76.54044 3.36862
7824 Zona Norte 02 4 600 160 1 4 5 Casa acopi -76.55210 3.42125
base2 = subset(vivienda, tipo == "Apartamento" & zona == "Zona Sur")
base2<-base2[base2$habitaciones != 0, ]
kable(head(base2))
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
5098 Zona Sur 05 4 290 96 1 2 3 Apartamento acopi -76.53464 3.44987
698 Zona Sur 02 3 78 40 1 1 2 Apartamento aguablanca -76.50100 3.40000
8199 Zona Sur NA 6 875 194 2 5 3 Apartamento aguacatal -76.55700 3.45900
1241 Zona Sur NA 3 135 117 NA 2 3 Apartamento alameda -76.51400 3.44100
5370 Zona Sur NA 3 135 78 NA 1 3 Apartamento alameda -76.53600 3.43600
6975 Zona Sur 06 4 220 75 1 2 3 Apartamento alférez real -76.54627 3.39109

PUNTO B

base_tabla = table(vivienda$zona, vivienda$tipo)
kable(base_tabla, caption = "Ubicación de Vivienda por tipo y zona")
Ubicación de Vivienda por tipo y zona
Apartamento Casa
Zona Centro 24 100
Zona Norte 1198 722
Zona Oeste 1029 169
Zona Oriente 62 289
Zona Sur 2787 1939

PUNTO C

library(leaflet)
## Warning: package 'leaflet' was built under R version 4.2.3
colores <- colorFactor(palette = c( "red"), domain = base1$zona)
mapa <- leaflet(base1) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~longitud, lat = ~latitud, color = ~colores(zona), radius = 4)
mapa

La salida del mapa se encontró diferencias de zona, se supone que le hicimos un filtrado a la base para las casas únicamente ubicadas en una zona de la ciudad, pero, hay casas ubicadas en algunos extremos contrarios de la ciudad, deberían estar acumulados los puntos hacia una zona, al parecer la data contine errores en la variable longitud-latitud

2 (APARTAMENTO). Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio del apartamento) en función del área construida, estrato, numero de baños, número de habitaciones y zona donde se ubica la vivienda. Use gráficos interactivos con el paquete plotly e interprete los resultados.

base_apt = subset(vivienda, tipo == "Apartamento" )
summarytools::descr(base_apt[,4:9])
## Descriptive Statistics  
## base_apt  
## N: 5100  
## 
##                     areaconst    banios   estrato   habitaciones   parqueaderos   preciom
## ----------------- ----------- --------- --------- -------------- -------------- ---------
##              Mean      112.78      2.62      4.73           2.97           1.57    366.94
##           Std.Dev       69.36      1.07      0.98           0.68           0.74    289.22
##               Min       35.00      0.00      3.00           0.00           1.00     58.00
##                Q1       68.00      2.00      4.00           3.00           1.00    175.00
##            Median       90.00      2.00      5.00           3.00           1.00    279.00
##                Q3      130.00      3.00      6.00           3.00           2.00    430.00
##               Max      932.00      8.00      6.00           9.00          10.00   1950.00
##               MAD       41.51      1.48      1.48           0.00           0.00    176.43
##               IQR       62.00      1.00      2.00           0.00           1.00    255.00
##                CV        0.61      0.41      0.21           0.23           0.47      0.79
##          Skewness        2.61      0.90     -0.24           0.06           1.97      2.16
##       SE.Skewness        0.03      0.03      0.03           0.03           0.04      0.03
##          Kurtosis       11.17      0.71     -0.96           3.82          10.02      5.43
##           N.Valid     5100.00   5100.00   5100.00        5100.00        4231.00   5100.00
##         Pct.Valid      100.00    100.00    100.00         100.00          82.96    100.00
library(PerformanceAnalytics)
## Warning: package 'PerformanceAnalytics' was built under R version 4.2.3
## Loading required package: xts
## Warning: package 'xts' was built under R version 4.2.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.2.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## Attaching package: 'xts'
## The following object is masked from 'package:leaflet':
## 
##     addLegend
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
chart.Correlation(base_apt[,4:9], histogram = TRUE, method = "pearson")
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

correlation_testA <- cor.test(base_apt$preciom, base_apt$areaconst, method = "pearson")
correlation_testA
## 
##  Pearson's product-moment correlation
## 
## data:  base_apt$preciom and base_apt$areaconst
## t = 105.74, df = 5098, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8199479 0.8371482
## sample estimates:
##       cor 
## 0.8287437
correlation_testB <- cor.test(base_apt$preciom, base_apt$estrato, method = "pearson")
correlation_testB
## 
##  Pearson's product-moment correlation
## 
## data:  base_apt$preciom and base_apt$estrato
## t = 63.967, df = 5098, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.6517619 0.6822236
## sample estimates:
##       cor 
## 0.6672717
correlation_testC <- cor.test(base_apt$preciom, base_apt$banios, method = "pearson")
correlation_testC
## 
##  Pearson's product-moment correlation
## 
## data:  base_apt$preciom and base_apt$banios
## t = 78.666, df = 5098, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.7278186 0.7526237
## sample estimates:
##       cor 
## 0.7404732
correlation_testD <- cor.test(base_apt$preciom, base_apt$habitaciones, method = "pearson")
correlation_testD
## 
##  Pearson's product-moment correlation
## 
## data:  base_apt$preciom and base_apt$habitaciones
## t = 22.248, df = 5098, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2722709 0.3223085
## sample estimates:
##      cor 
## 0.297494

COEFICIENTE DE CORRELACIÓN

Preciom
Area construida Coeficiente de correlación = 0.82,
Intervalo de confianza (0.81, 0.83),
p-valor 2.2e−16
Estrato Coeficiente de correlación = 0.66,
Intervalo de confianza (0.65, 0.68),
p-valor 2.2e−16
Número de Baños Coeficiente de correlación = 0.74,
Intervalo de confianza (0.72, 0.75),
p-valor 2.2e−16
Número de Habitaciones Coeficiente de correlación = 0.29,
Intervalo de confianza (0.27, 0.32),
p-valor 2.2e−16

La relación de correlación entre las variables y el precio de la vivienda solicitada (apartamentos), en todos los casos esta es positiva, pero se destaca su mayor fortaleza en área construida 0,82, Estrato 0,66, número de baños 0,74 y número de habitaciones 0.29.

3. (APARTAMENTO) Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, numero de cuartos, numero de parqueaderos, numero de baños) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).

MRLM

mrlm_base_apt =  lm(preciom ~ areaconst + estrato + parqueaderos + banios + habitaciones, data = base_apt)
int_conf <- confint(mrlm_base_apt)
int_conf
##                   2.5 %      97.5 %
## (Intercept)  -309.58712 -247.367002
## areaconst       1.90977    2.099517
## estrato        50.24479   62.239566
## parqueaderos   82.30120   98.545270
## banios         48.14536   61.548440
## habitaciones  -50.12820  -35.200753
summary(mrlm_base_apt)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + parqueaderos + banios + 
##     habitaciones, data = base_apt)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1699.03   -57.72    -0.67    48.59  1005.44 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -278.47706   15.86822  -17.55   <2e-16 ***
## areaconst       2.00464    0.04839   41.42   <2e-16 ***
## estrato        56.24218    3.05907   18.39   <2e-16 ***
## parqueaderos   90.42324    4.14278   21.83   <2e-16 ***
## banios         54.84690    3.41824   16.05   <2e-16 ***
## habitaciones  -42.66447    3.80700  -11.21   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 137.7 on 4225 degrees of freedom
##   (869 observations deleted due to missingness)
## Multiple R-squared:  0.7845, Adjusted R-squared:  0.7843 
## F-statistic:  3077 on 5 and 4225 DF,  p-value: < 2.2e-16

Para el modelo de RLM cuya variable dependiente/respuesta/explicada es preciom y las variables predictoras/independientes/explicativas son: área construida, estrato, número de parqueaderos, número de baños, número de habitaciones. Estos fueron los resultados:

Preciom = −278.4 + 2.004(áreaconst) + 56.2(estrato) + 90.4(parqueaderos) + 54.8(baños) - 42,6(habitaciones) + ϵ

La estimación de los parámetros fue la siguiente:

Primero para ver el modelo con las variables que contiene la base de datos, se resalta que son variables que en general aportan a predecir el comportamiento del precio de las viviendas en general, sin embargo, se debe revisar a profundidad la data y los errores contenidos en ella, de extracción o de otros factores que mitiguen los resultados en los coeficientes estimados.

Adicionalmente para mejorar el modelo debería incluirse otras variables que determinan el precio en general de una vivienda como si está en unidad residencial, si tiene salón social, zonas húmedas, zonas de juegos, senderos peatonales, estado de la vía, vecinos y comunidad, seguridad y parques y espacios Verdes.

También se podría optimizar el modelo, eliminando las variables no significativas para mantener la eficacia del modelo, pues algunas variables podrían no aportar información relevante, por lo tanto, podrían ser excluidas. La eliminación de estas variables puede mejorar la precisión del modelo al reducir el ruido y la complejidad.

4. (APARTAMENTO) Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas, solo realizar sugerencias de que se podría hacer).

- Validación de supuestos - Normalidad de los errores.

resi=mrlm_base_apt$residuals
shapiro.test(resi)
## 
##  Shapiro-Wilk normality test
## 
## data:  resi
## W = 0.83758, p-value < 2.2e-16

- Validación de supuestos - Homocedasticidad de los errores.

#install.packages("lmtest")
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.2.3
bptest(mrlm_base_apt)
## 
##  studentized Breusch-Pagan test
## 
## data:  mrlm_base_apt
## BP = 1244.4, df = 5, p-value < 2.2e-16

Como p-value = 2.2e-16 menor al valor de referencia α(0.05), por lo tanto, se rechaza la hipótesis nula de homocedasticidad (los residuos se distribuyen con la misma varianza), presentando heterocedasticidad (los residuos no se distribuyen con la misma varianza) en el modelo.

- Validación de supuestos - Independencia de los errores:

dwtest(mrlm_base_apt)
## 
##  Durbin-Watson test
## 
## data:  mrlm_base_apt
## DW = 1.6551, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0

En general, si d es menor que 1,5 o mayor que 2,5, existe un problema de autocorrelación potencialmente grave. De lo contrario, si d está entre 1,5 y 2,5, es probable que la autocorrelación no sea motivo de preocupación.

5. (APARTAMENTOS) Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.

solicitud_2= data.frame(areaconst = 300, parqueaderos = 3, estrato = c(5, 6), banios = 3,
  habitaciones = 5, Zona = "Sur")
solicitud_2
##   areaconst parqueaderos estrato banios habitaciones Zona
## 1       300            3       5      3            5  Sur
## 2       300            3       6      3            5  Sur
predict(mrlm_base_apt, solicitud_2)
##        1        2 
## 826.6149 882.8570

6. Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de la vivienda 1. Tenga encuentra que la empresa tiene crédito pre-aprobado de máximo 350 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.

library(dplyr)
## 
## ######################### Warning from 'xts' package ##########################
## #                                                                             #
## # The dplyr lag() function breaks how base R's lag() function is supposed to  #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or       #
## # source() into this session won't work correctly.                            #
## #                                                                             #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop           #
## # dplyr from breaking base R's lag() function.                                #
## #                                                                             #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning.  #
## #                                                                             #
## ###############################################################################
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:xts':
## 
##     first, last
## The following object is masked from 'package:gridExtra':
## 
##     combine
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
oferta_aptos = filter(base_apt, areaconst <= 300, parqueaderos <= 3, banios <= 3, habitaciones <= 5, zona == "Zona Sur", estrato %in% c(5, 6), preciom <= 850)
oferta_aptos
## # A tibble: 1,099 × 13
##       id zona  piso  estrato preciom areac…¹ parqu…² banios habit…³ tipo  barrio
##    <dbl> <chr> <chr>   <dbl>   <dbl>   <dbl>   <dbl>  <dbl>   <dbl> <chr> <chr> 
##  1  8102 Zona… 05          5     344     107       2      2       3 Apar… altos…
##  2  8294 Zona… 01          5     175      64       1      2       2 Apar… bella…
##  3  8299 Zona… 02          6     305     125       2      3       3 Apar… bella…
##  4  8293 Zona… 03          5     185      78       1      2       3 Apar… bella…
##  5   904 Zona… 08          5     280      94       1      2       3 Apar… bocha…
##  6   741 Zona… <NA>        5     164      54       1      2       3 Apar… bocha…
##  7  1133 Zona… <NA>        5     250      90       1      2       3 Apar… bocha…
##  8  3408 Zona… <NA>        5     280      90       1      2       3 Apar… bocha…
##  9  5473 Zona… 06          5     295     107       2      3       4 Apar… bosqu…
## 10  5410 Zona… 07          5     335     108       1      3       4 Apar… bosqu…
## # … with 1,089 more rows, 2 more variables: longitud <dbl>, latitud <dbl>, and
## #   abbreviated variable names ¹​areaconst, ²​parqueaderos, ³​habitaciones

Con las especificaciones solicitadas se encontraron cerca de 10 opciones de vivienda “APARTAMENTOS”, con la siguiente ubicación geografica.Sin embargo se aclara que no cumplen estrictamente las condiciones solicitadas, al correr con las opciones especificas solicitadas el sistema no arroja ninguna opción.

library(leaflet)
colores <- colorFactor(palette = c("blue"), domain = oferta_aptos$zona)
mapa <- leaflet(oferta_aptos) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~longitud, lat = ~latitud, color = ~colores(zona), radius = 10)
mapa

7. Realice los pasos del 1 al 6. Para la segunda solicitud se tiene un crédito pre-aprobado por valor de $850 millones.


PUNTO 1 A Y B REALIZADOS INICIALMENTE

PUNTO C

library(leaflet)
colores <- colorFactor(palette = c( "red"), domain = base2$zona)
mapa <- leaflet(base1) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~longitud, lat = ~latitud, color = ~colores(zona), radius = 4)
## Warning in colores(zona): Some values were outside the color scale and will be
## treated as NA

## Warning in colores(zona): Some values were outside the color scale and will be
## treated as NA
mapa

La salida del mapa se encontró diferencias de zona, se supone que le hicimos un filtrado a la base para los apartamentos únicamente ubicados en una zona de la ciudad, pero, hay apartamentos ubicado s en algunos extremos contrarios de la ciudad, deberían estar acumulados los puntos hacia una zona, al parecer la data contine erorres en la variable longitud-latitud

PUNTO 2 CASAS

base_casas = subset(vivienda, tipo == "Casa" )
summarytools::descr(base_casas[,4:9])
## Descriptive Statistics  
## base_casas  
## N: 3219  
## 
##                     areaconst    banios   estrato   habitaciones   parqueaderos   preciom
## ----------------- ----------- --------- --------- -------------- -------------- ---------
##              Mean      273.41      3.89      4.49           4.61           2.29    539.99
##           Std.Dev      171.42      1.57      1.09           1.77           1.47    358.20
##               Min       30.00      0.00      3.00           0.00           1.00     77.00
##                Q1      154.00      3.00      3.00           3.00           1.00    300.00
##            Median      240.00      4.00      5.00           4.00           2.00    430.00
##                Q3      350.00      5.00      5.00           5.00           3.00    670.00
##               Max     1745.00     10.00      6.00          10.00          10.00   1999.00
##               MAD      134.92      1.48      1.48           1.48           1.48    237.22
##               IQR      196.00      2.00      2.00           2.00           2.00    370.00
##                CV        0.63      0.40      0.24           0.38           0.64      0.66
##          Skewness        2.21      0.47     -0.05           0.80           1.69      1.57
##       SE.Skewness        0.04      0.04      0.04           0.04           0.05      0.04
##          Kurtosis        9.29      0.67     -1.30           1.06           3.66      2.28
##           N.Valid     3219.00   3219.00   3219.00        3219.00        2486.00   3219.00
##         Pct.Valid      100.00    100.00    100.00         100.00          77.23    100.00
library(PerformanceAnalytics)
chart.Correlation(base_casas[,4:9], histogram = TRUE, method = "pearson")
## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

## Warning in par(usr): argument 1 does not name a graphical parameter

correlation_testA2 <- cor.test(base_casas$preciom, base_casas$areaconst, method = "pearson")
correlation_testA2
## 
##  Pearson's product-moment correlation
## 
## data:  base_casas$preciom and base_casas$areaconst
## t = 48.897, df = 3217, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.6326740 0.6723311
## sample estimates:
##       cor 
## 0.6529498
correlation_testB2 <- cor.test(base_casas$preciom, base_casas$estrato, method = "pearson")
correlation_testB2
## 
##  Pearson's product-moment correlation
## 
## data:  base_casas$preciom and base_casas$estrato
## t = 50.612, df = 3217, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.6461164 0.6846025
## sample estimates:
##       cor 
## 0.6658021
correlation_testC2 <- cor.test(base_casas$preciom, base_casas$banios, method = "pearson")
correlation_testC2
## 
##  Pearson's product-moment correlation
## 
## data:  base_casas$preciom and base_casas$banios
## t = 38.149, df = 3217, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.5338457 0.5814371
## sample estimates:
##       cor 
## 0.5581002
correlation_testD2 <- cor.test(base_casas$preciom, base_casas$habitaciones, method = "pearson")
correlation_testD2
## 
##  Pearson's product-moment correlation
## 
## data:  base_casas$preciom and base_casas$habitaciones
## t = 5.5183, df = 3217, p-value = 3.694e-08
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.06249727 0.13094521
## sample estimates:
##        cor 
## 0.09683573

COEFICIENTE DE CORRELACIÓN

Preciom
Area construida Coeficiente de correlación = 0.65,
Intervalo de confianza (0.63, 0.67),
p-valor 2.2e−16
Estrato Coeficiente de correlación = 0.66,
Intervalo de confianza (0.64, 0.68),
p-valor 2.2e−16
Número de Baños Coeficiente de correlación = 0.55,
Intervalo de confianza (0.53, 0.58),
p-valor 2.2e−16
Número de Habitaciones Coeficiente de correlación = 0.096,
Intervalo de confianza (0.062, 0.13),
p-valor 3.694e−08

La relacion de correlación entre las variables y el precio de la vivienda solicitada (apartamentos), para todos los casos esta es positiva pero se destaca su mayor fortaleza en area construida 0,65 y el estrato 0,66, número de baños 0,55 y número de habitaciones 0.096.

3. (CASAS) Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, numero de cuartos, numero de parqueaderos, numero de baños) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).

MRLM

mrlm_base_casas =  lm(preciom ~ areaconst + estrato + parqueaderos + banios + habitaciones, data = base_casas)
int_conf <- confint(mrlm_base_casas)
int_conf
##                     2.5 %       97.5 %
## (Intercept)  -464.0524219 -363.6982938
## areaconst       0.6845882    0.7999441
## estrato       105.7445183  126.3976586
## parqueaderos   57.4809299   71.1179266
## banios         31.0916179   46.9783471
## habitaciones  -20.9883560   -8.5115423
summary(mrlm_base_casas)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + parqueaderos + banios + 
##     habitaciones, data = base_casas)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1190.80  -114.52   -25.94    74.59   986.16 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -413.87536   25.58852 -16.174  < 2e-16 ***
## areaconst       0.74227    0.02941  25.235  < 2e-16 ***
## estrato       116.07109    5.26618  22.041  < 2e-16 ***
## parqueaderos   64.29943    3.47719  18.492  < 2e-16 ***
## banios         39.03498    4.05083   9.636  < 2e-16 ***
## habitaciones  -14.74995    3.18137  -4.636 3.73e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 205.2 on 2480 degrees of freedom
##   (733 observations deleted due to missingness)
## Multiple R-squared:  0.6834, Adjusted R-squared:  0.6828 
## F-statistic:  1071 on 5 and 2480 DF,  p-value: < 2.2e-16

Para el modelo de RLM cuya variable dependiente/respuesta/explicada es preciom y las variables predictoras/independientes/explicativas son: área construida, estrato, número de parqueaderos, número de baños, número de habitaciones. Estos fueron los resultados:

Preciom = −413.8 + 0.74(áreaconst) + 116.0(estrato) + 64.2.4(parqueaderos) + 39.0(baños) - 14,7(habitaciones) + ϵ

La estimacion de los parametros fue la siguiente:

Primero para ver el modelo con las variables que contiene la base de datos, se resalta que son variables que en general aportan a predecir el comportamiento del precio de las viviendas en general, sin embargo se debe revisar a profundidad la data y los errores contenidos en ella, de extraccion o de otros factores que mitiguen los resultados en los coeficientes estimados.

Adidiconalmente para mejorar el modelo deberia incluirse otras variables que determinana el precio en general de una vivienda como si esta en unidad residencial, si tiene salón social, zonas húmedas, zonas de juegos, senderos peatonales, estado de la vía, vecinos y comunidad, seguridad y parques y espacios Verdes.

También se podría optimizar el modelo, eliminando las variables no significativas para mantener la eficacia del modelo, pues algunas variables podrían no aportar información relevante, por lo tanto, podrían ser excluidas. La eliminación de estas variables puede mejorar la precisión del modelo al reducir el ruido y la complejidad.

4. Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas, solo realizar sugerencias de que se podría hacer).

- Validación de supuestos - Normalidad de los errores.

resi=mrlm_base_casas$residuals
shapiro.test(resi)
## 
##  Shapiro-Wilk normality test
## 
## data:  resi
## W = 0.89699, p-value < 2.2e-16

- Validación de supuestos - Homocedasticidad de los errores.

#install.packages("lmtest")
library(lmtest)
bptest(mrlm_base_casas)
## 
##  studentized Breusch-Pagan test
## 
## data:  mrlm_base_casas
## BP = 321.2, df = 5, p-value < 2.2e-16

Como p-value = 2.2e-16 menor al valor de referencia α(0.05), por lo tanto, se rechaza la hipótesis nula de homocedasticidad (los residuos se distribuyen con la misma varianza), presentando heterocedasticidad (los residuos no se distribuyen con la misma varianza) en el modelo.

- Validación de supuestos - Independencia de los errores:

dwtest(mrlm_base_casas)
## 
##  Durbin-Watson test
## 
## data:  mrlm_base_casas
## DW = 1.5759, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0

En general, si d es menor que 1,5 o mayor que 2,5, existe un problema de autocorrelación potencialmente grave. De lo contrario, si d está entre 1,5 y 2,5, es probable que la autocorrelación no sea motivo de preocupación.

5. Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.

solicitud_1= data.frame(areaconst = 200, parqueaderos = 1, estrato = c(4, 5), banios = 2,
  habitaciones = 4)
solicitud_1
##   areaconst parqueaderos estrato banios habitaciones
## 1       200            1       4      2            4
## 2       200            1       5      2            4
predict(mrlm_base_casas, solicitud_1)
##        1        2 
## 282.2318 398.3029

6. Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de la vivienda 1. Tenga encuentra que la empresa tiene crédito pre-aprobado de máximo 350 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.

library(dplyr)
oferta_casas = filter(base_casas, areaconst <= 200, parqueaderos <= 1, banios <= 2, habitaciones <= 4, zona == "Zona Norte", estrato %in% c(4, 5), preciom <= 350)
oferta_casas
## # A tibble: 3 × 13
##      id zona   piso  estrato preciom areac…¹ parqu…² banios habit…³ tipo  barrio
##   <dbl> <chr>  <chr>   <dbl>   <dbl>   <dbl>   <dbl>  <dbl>   <dbl> <chr> <chr> 
## 1  1666 Zona … 02          4     275    120        1      2       4 Casa  alamos
## 2  1073 Zona … <NA>        4     280    104.       1      2       3 Casa  ciuda…
## 3  4779 Zona … <NA>        5     280    140        1      2       3 Casa  prado…
## # … with 2 more variables: longitud <dbl>, latitud <dbl>, and abbreviated
## #   variable names ¹​areaconst, ²​parqueaderos, ³​habitaciones

Con las especificaciones solicitadas se encontraron 3 opciones de vivienda “casas”, con la siguiente ubicación geografica.

library(leaflet)
colores <- colorFactor(palette = c("blue"), domain = oferta_casas$zona)
mapa <- leaflet(oferta_casas) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~longitud, lat = ~latitud, color = ~colores(zona), radius = 10)
mapa

#*FIN**