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")
| 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:
Para la prueba estadística con un p-valor de 2.2e-16 por lo que se considera viable el modelo.
Mediante el planteamiento teórico y=β0+β1x1+β2x2+β3x3+β4x4+β5x5+ϵ donde con las salidas el modelo se estimará así:
Preciom = −278.4 + 2.004(áreaconst) + 56.2(estrato) + 90.4(parqueaderos) + 54.8(baños) - 42,6(habitaciones) + ϵ
El coeficiente para la variable área construida es 2.004, lo que demuestra es que ante la variación positiva en una unidad de la variable, el precio del apartamento se incrementará en 2.004 millones de pesos. Manteniendo constante o ceteris paribus las demás variables.
El coeficiente para la variable estrato es 56.2, lo que demuestra es que ante la variación positiva en una unidad de la variable, el precio del apartamento se incrementará en 56,2 millones de pesos. Manteniendo constante o ceteris paribus las demás variables.
El coeficiente para la variable parqueaderos es 90.4, lo que demuestra es que ante la variación positiva en una unidad de la variable, el precio del apartamento se incrementará en 90.4 millones de pesos. Manteniendo constante o ceteris paribus las demás variables.
El coeficiente para la variable baños que es 54,8, lo que demuestra es quen ante la variación positiva en una unidad de la variable, el precio del apartamento se incrementará en 54,8 millones de pesos. Manteniendo constante o ceteris paribus las demás variables.
El coeficiente para la variable habitaciones es -42,6, lo que no es logico en el modelo ya que debería ser un valor positivo que a medida que la variable aumente, la variable preciom también aumente y no disminuya como lo explica el modelo.
En cuanto al R2 su coeficiente es de 78,4% por lo que indica que el modelo explica el 78.4% los cambios en la variable respuesta preciom.
La estimación de los parámetros fue la siguiente:
β1: Intervalo de confianza ( 1.90, 2.09) estadísticamente significativo (p-valor= 2.2e-16)
β2: Intervalo de confianza (50.2, 62.2) estadísticamente significativo (p-valor= 2.2e-16)
β3: Intervalo de confianza (82.3 , 98.5) estadísticamente significativo (p-valor= 2.2e-16)
β4: Intevalo de confianza (48.1 , 61.5) estadísticamente significativo (p-valor= 2.2e-16)
β5: Intervalo de confianza fue (-50.11, -35.2) Estadísticamente NO significativo (p-valor= 2.2e-16)
Recomendaciones sugeridas para la mejora del modelo:
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
Se utiliza la prueba de Breusch-Pagan para determinar si se presenta problemas de homocedasticidad o heterocedasticidad en el modelo, con las siguientes hipótesis.
Hipótesis nula (H0): Existe homocedasticidad (los residuos se distribuyen con la misma varianza) Hipótesis alternativa (Ha): Existe Heteroscedasticidad (los residuos no se distribuyen con la misma varianza)
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
El Test de Durbin-Watson evalúa si existe autocorrelación en un modelo de Regresión Simple o múltiple, la estadística de prueba siempre varía de 0 a 4 donde:
d = 2 indica que no hay autocorrelación
d < 2 indica correlación serial positiva
d > 2 indica correlación serial negativa
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:
Para la prueba estadistica con un p-valor de 2.2e-16 por lo que se considera viable el modelo.
Mediante el planteamiento teorico y=β0+β1x1+β2x2+β3x3+β4x4+β5x5+ϵ donde con las salidas el modelo se estimará así:
Preciom = −413.8 + 0.74(áreaconst) + 116.0(estrato) + 64.2.4(parqueaderos) + 39.0(baños) - 14,7(habitaciones) + ϵ
El coeficiente para la variable área construida es 0,74, lo que demuestra es que ante la variación positiva en una unidad de la variable, el precio del apartamento se incrementará en 0,74 millones de pesos.Manteniendo constante o ceteris paribus las demas variables.
El coeficiente para la variable estrato es 116,0, lo que demuestra es que ante la variación positiva en una unidad de la variable, el precio del apartamento se incrementará en 116,0 millones de pesos.Manteniendo constante o ceteris paribus las demas variables.
El coeficiente para la variable parqueaderos es 64.2, lo que demuestra es que ante la variación positiva en una unidad de la variable, el precio del apartamento se incrementará en 64.2 millones de pesos.Manteniendo constante o ceteris paribus las demas variables.
El coeficiente para la variable baños que es 39,0, lo que demuestra es quen ante la variación positiva en una unidad de la variable, el precio del apartamento se incrementará en 34 millones de pesos.Manteniendo constante o ceteris paribus las demas variables.
El coeficiente para la variable habitaciones es -14,7, lo que no es logico en el modelo ya que deberia ser un valor positivo que a medida que la variable aumente, la variable preciom tambien aumente y no disminuya como lo explica el modelo.
En cuanto al R2 su coeficiente es de 68,3% por lo que indica que el modelo explica el 68,3% los cambios en la variable respuesta preciom.
La estimacion de los parametros fue la siguiente:
β1: Intervalo de confianza ( 0,68, 0,79) estadísiticamente signicativo (p-valor= 2.2e-16)
β2: Intervalo de confianza (105,7, 126,3) estadísiticamente signicativo (p-valor= 2.2e-16)
β3: Intervalo de confianza (57,4 , 71,1) estadísiticamente signicativo (p-valor= 2.2e-16)
β4: Intevalo de confianza (31.09 , 46.9) estadísiticamente signicativo (p-valor= 2.2e-16)
β5: Intervalo de confianza fue (-20.98, -8.51) Estadísiticamente NO signicativo (p-valor= 2.2e-16)
Recomendaciones sugeridas para la mejora del modelo:
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
Se utiliza la prueba de Breusch-Pagan para determinar si se presenta problemas de homocedasticidad o heterocedasticidad en el modelo, con las siguientes hipotesis.
Hipótesis nula (H0): Existe homocedasticidad (los residuos se distribuyen con la misma varianza) Hipótesis alternativa (Ha): Existe Heteroscedasticidad (los residuos no se distribuyen con la misma varianza)
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
El Test de Durbin-Watson evalua si existe autocorrelación en un modelo de Regresión Simple o múltiple, la estadística de prueba siempre varía de 0 a 4 donde:
d = 2 indica que no hay autocorrelación
d < 2 indica correlación serial positiva
d > 2 indica correlación serial negativa
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**