Taller Caso C&A de Regresión Lineal Múltiple

Primer solicitud - vivienda de 350 millones

Planteamiento

Hace dos días, Maria 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. Ayude a Maria a responder la solicitud, mediante técnicas moderación que usted conoce. Ella requiere le envíe un informe ejecutivo donde analice los dos casos y sus recomendaciones.

Cargue de los datos:

En principio se inicia cargado los datos y librerías necesarias para el desarrollo del proyecto:

devtools::install_github("dgonxalex80/paqueteMOD", force =TRUE)
library(paqueteMOD)
library(tidyverse)
library(patchwork)
library(ggplot2)
library(ggpubr)
library(Hmisc)
library(GGally)
library(plotly)
library(car)
library(lmtest)
library(leaflet)
library(raster)
library(sf)
library(tmap)
data("vivienda")
names(vivienda)
##  [1] "id"           "zona"         "piso"         "estrato"      "preciom"     
##  [6] "areaconst"    "parqueaderos" "banios"       "habitaciones" "tipo"        
## [11] "barrio"       "longitud"     "latitud"

Primer requerimiento:

Realice un filtro a la base de datos e incluya solo las ofertas de : base1: casas, de la zona norte de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta. (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 que?).

En inicio se hace una breve exploración para revisar la frecuencia de los datos categóricos contenidos en cada columna de este tipo.

table(vivienda$tipo)
## 
## Apartamento        Casa 
##        5100        3219
table(vivienda$estrato)
## 
##    3    4    5    6 
## 1453 2129 2750 1987
table(vivienda$zona)
## 
##  Zona Centro   Zona Norte   Zona Oeste Zona Oriente     Zona Sur 
##          124         1920         1198          351         4726

Una ves revisados los datos que se consideran necesarios para resolver la primera petición, se procede a crear el filtro solicitado

base1=subset(vivienda, tipo=="Casa" & zona=="Zona Norte")
base1[1:3,]
## # A tibble: 3 × 13
##      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
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>

Para verificar los filtros realizados se puede ver la frecuencia de los valores solicitados en la columna tipo y en la columna zona.

ttipo=data.frame(table(base1$tipo))
colnames(ttipo) <- c("Tipo","Cantidad")
ttipo
##   Tipo Cantidad
## 1 Casa      722
tzona=data.frame(table(base1$zona))
colnames(tzona) <- c("Zona","Cantidad")
tzona
##         Zona Cantidad
## 1 Zona Norte      722
g1=ggplot(ttipo,aes(x=Tipo,y = Cantidad, fill = Tipo))+geom_col(fill = "lightblue",col = 1)+xlab("Tipo de construccion")+theme_bw()
g2=ggplot(tzona,aes(x=Zona,y = Cantidad, fill = Tipo))+geom_col(fill = "ivory",col = 1)+xlab("Zona donde se ubica")+theme_bw()

(g1+g2)

Ahora se procede a realizar el mapa solicitado, con dos procedimientos para validar la ubicación de cada una de las ofertas:

leaflet() %>% addTiles() %>% 
  addCircleMarkers(lng = base1$longitud,
                   lat = base1$latitud)
cali=shapefile("C:/Users/yeffe/OneDrive/Documentos/Maestria Ciencia de Datos/Intento/mc_barrios.shp")
cali.tmap=tm_shape(cali)+tm_polygons()
oferta_sf=st_as_sf(base1,coords=c("longitud","latitud"))
cali2 = tm_shape(cali) +  tm_polygons() + tm_shape(oferta_sf) + tm_dots(size=0.3, col="red")
cali2 
## Warning: Currect projection of shape oferta_sf unknown. Long-lat (WGS84) is
## assumed.

Análisis. Aunque se verifica que el filtro únicamente haya quedado con las ofertas que se ubican en la zona norte y con el tipo de vivienda como Casa, se puede observar en el mapa que la ubicación de muchas de las edificaciones se encuentran fuera de lo que se consideraría “Zona Norte” este caso puede deberse a un fallo de la aplicación de georeferenciacion integrada a la pagina web de donde se extrajo la base datos, o también puede deberse a problemas al momento de ingresar los datos por los vendedores en el proceso de de crear el anuncio.

Segundo requerimiento:

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, numero de habitaciones y zona donde se ubica la vivienda. Use gráficos interactivos con el paquete plotly e interprete los resultados

En principio se revisa la cantidad de valores N/A presentes en la tabla filtrada

apply(X = is.na(base1), MARGIN = 2, FUN = sum)
##           id         zona         piso      estrato      preciom    areaconst 
##            0            0          372            0            0            0 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##          287            0            0            0            0            0 
##      latitud 
##            0
dim(base1)
## [1] 722  13
baseSNA=base1

Análisis. En la variable piso se registra un total de 372 datos de tipo N/A, sin embargo teniendo en cuenta el contexto con el cual se esta trabajando con edificaciones tipo “Casa” se supone que estas normalmente se ubican directamente terreno ya que no se trata de construcciones de tipo horizontal como si lo son los apartamentos; por esta razón esta variable se desprecia para la creación del modelo para el caso en que se busca casas.

Sin embargo, para la variable parqueaderos si se requiere hacer un ajuste, cambiando los valores que se tienen como N/A por un valor 0, que permita hacer el análisis con los 722 datos filtrados. Para esto se crea una segunda tabla “baseSNA” dejando la primera como respaldo.

Por otro lado, revisando las variables se detecta que se encuentra una de tipo categórico que representa el estrado de la vivienda, por tal razón en la base de datos “baseSNA” también se hace el ajuste para el trabajo con esta variable.

baseSNA$piso <- as.numeric(baseSNA$piso)
baseSNA$estrato <- as.factor(baseSNA$estrato)
baseSNA[is.na(baseSNA)] <- 0

Una vez realizada la limpieza de los datos, se procede a realizar el análisis exploratorio de datos enfocado en la correlación entre la variable respuesta y las demás variables.

describe(baseSNA)
## baseSNA 
## 
##  13  Variables      722  Observations
## --------------------------------------------------------------------------------
## id 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      722        0      722        1     2575     2232    206.2    343.3 
##      .25      .50      .75      .90      .95 
##    766.2   2257.0   4225.0   5242.3   6135.1 
## 
## lowest :   58   88   94   98  103, highest: 7885 7987 8088 8318 8319
## --------------------------------------------------------------------------------
## zona 
##          n    missing   distinct      value 
##        722          0          1 Zona Norte 
##                      
## Value      Zona Norte
## Frequency         722
## Proportion          1
## --------------------------------------------------------------------------------
## piso 
##        n  missing distinct     Info     Mean      Gmd 
##      722        0        6    0.842   0.9668    1.174 
## 
## lowest : 0 1 2 3 4, highest: 1 2 3 4 7
##                                               
## Value          0     1     2     3     4     7
## Frequency    372    84   194    65     6     1
## Proportion 0.515 0.116 0.269 0.090 0.008 0.001
## --------------------------------------------------------------------------------
## estrato 
##        n  missing distinct 
##      722        0        4 
##                                   
## Value          3     4     5     6
## Frequency    235   161   271    55
## Proportion 0.325 0.223 0.375 0.076
## --------------------------------------------------------------------------------
## preciom 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      722        0      167        1    445.9    275.4    145.0    167.1 
##      .25      .50      .75      .90      .95 
##    261.2    390.0    550.0    780.0    928.5 
## 
## lowest :   89  110  115  117  118, highest: 1530 1600 1650 1800 1940
## --------------------------------------------------------------------------------
## areaconst 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      722        0      251        1    264.9    172.1     75.0     93.1 
##      .25      .50      .75      .90      .95 
##    140.0    240.0    336.8    454.9    535.4 
## 
## lowest :   30   45   55   60   61, highest:  942  950  960 1188 1440
## --------------------------------------------------------------------------------
## parqueaderos 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      722        0       11    0.915    1.314    1.544        0        0 
##      .25      .50      .75      .90      .95 
##        0        1        2        3        4 
## 
## lowest :  0  1  2  3  4, highest:  6  7  8  9 10
##                                                                             
## Value          0     1     2     3     4     5     6     7     8     9    10
## Frequency    287   161   158    49    40    11     8     5     1     1     1
## Proportion 0.398 0.223 0.219 0.068 0.055 0.015 0.011 0.007 0.001 0.001 0.001
## --------------------------------------------------------------------------------
## banios 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      722        0       11    0.954    3.555     1.65        2        2 
##      .25      .50      .75      .90      .95 
##        2        3        4        5        6 
## 
## lowest :  0  1  2  3  4, highest:  6  7  8  9 10
##                                                                             
## Value          0     1     2     3     4     5     6     7     8     9    10
## Frequency     10    17   165   187   171   101    46    11    11     1     2
## Proportion 0.014 0.024 0.229 0.259 0.237 0.140 0.064 0.015 0.015 0.001 0.003
## --------------------------------------------------------------------------------
## habitaciones 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      722        0       11     0.95    4.507    1.922        3        3 
##      .25      .50      .75      .90      .95 
##        3        4        5        7        8 
## 
## lowest :  0  1  2  3  4, highest:  6  7  8  9 10
##                                                                             
## Value          0     1     2     3     4     5     6     7     8     9    10
## Frequency     20     2    12   171   222   137    60    42    29    14    13
## Proportion 0.028 0.003 0.017 0.237 0.307 0.190 0.083 0.058 0.040 0.019 0.018
## --------------------------------------------------------------------------------
## tipo 
##        n  missing distinct    value 
##      722        0        1     Casa 
##                
## Value      Casa
## Frequency   722
## Proportion    1
## --------------------------------------------------------------------------------
## barrio 
##        n  missing distinct 
##      722        0      103 
## 
## lowest : acopi              alameda del río    alamos             atanasio girardot  barranquilla      
## highest: villas de veracruz Villas De Veracruz vipasa             zona norte         zona oriente      
## --------------------------------------------------------------------------------
## longitud 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      722        0      464        1   -76.52  0.01892   -76.54   -76.54 
##      .25      .50      .75      .90      .95 
##   -76.53   -76.52   -76.50   -76.49   -76.49 
## 
## lowest : -76.58915 -76.58876 -76.55500 -76.55363 -76.55290
## highest: -76.48302 -76.48271 -76.48238 -76.48200 -76.47300
## --------------------------------------------------------------------------------
## latitud 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      722        0      462        1     3.46  0.03112    3.386    3.413 
##      .25      .50      .75      .90      .95 
##    3.452    3.468    3.482    3.487    3.489 
## 
## lowest : 3.33308 3.33656 3.34102 3.34994 3.35133
## highest: 3.49341 3.49374 3.49453 3.49461 3.49584
## --------------------------------------------------------------------------------
ggpairs(baseSNA[,4:9], title=" ")
## `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`.

fig <- plot_ly(alpha = 0.6)
fig <- fig %>% add_histogram(x = baseSNA$banios, name = "Baños")
fig <- fig %>% add_histogram(x = baseSNA$estrato, name = "Estrato")
fig <- fig %>% layout(barmode = "overlay", title = "Histograma de Baños y Estrato")
fig
## Warning: Can't display both discrete & non-discrete data on same axis
fig2 <- plot_ly(baseSNA,x=baseSNA$areaconst,y=baseSNA$preciom,type="scatter",mode = "markers+text")
fig2 <- fig2 %>% layout(title = "Relación entre área construida y precio", xaxis = list(title.text="Área construida (m2)"), yaxis=list(title.text="Precio (millones de pesos)"))
fig2

Análisis. A partir del gráfico de asociación entre las variables cuantitativas con la matriz de dispersión y correlación se puede observar que las variables que mas tiene correlación con el precio de la casa son:

Esto también se refleja en los diagramas de histograma y distribución de las variables.

Tercer requerimiento:

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)

En inicio se hace la estimación del modelo mediante el método MCO como se muestra a continuación:

modelo1=lm(preciom ~ areaconst + parqueaderos + banios + habitaciones + estrato, data=baseSNA)
summary(modelo1)
## 
## Call:
## lm(formula = preciom ~ areaconst + parqueaderos + banios + habitaciones + 
##     estrato, data = baseSNA)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -968.46  -73.69  -16.08   45.60 1069.39 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   31.2881    17.7126   1.766   0.0777 .  
## areaconst      0.8244     0.0431  19.129  < 2e-16 ***
## parqueaderos   2.3523     4.3557   0.540   0.5893    
## banios        25.6403     5.3555   4.788 2.05e-06 ***
## habitaciones   1.5129     4.1422   0.365   0.7150    
## estrato4      84.2528    17.5448   4.802 1.91e-06 ***
## estrato5     136.7761    16.9079   8.089 2.57e-15 ***
## estrato6     329.2170    26.5567  12.397  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 157 on 714 degrees of freedom
## Multiple R-squared:  0.6613, Adjusted R-squared:  0.6579 
## F-statistic: 199.1 on 7 and 714 DF,  p-value: < 2.2e-16

Una vez realizado el modelo de linealidad múltiple mediante el método MCO, se procede a evaluar problemas de multicolinealidad.

vif(modelo1)
##                  GVIF Df GVIF^(1/(2*Df))
## areaconst    1.518998  1        1.232476
## parqueaderos 1.293590  1        1.137361
## banios       1.949365  1        1.396196
## habitaciones 1.677473  1        1.295173
## estrato      1.634724  3        1.085361

Análisis. Los coeficientes de cada variable se presentan a continuación:

areaconst: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, por otro lado, el modelo arroja un coeficiente β1 de aproximadamente 0.83, lo que se traduce que por cada metro cuadrado en que aumenta la construcción, el valor de la misma también incrementa en 0.83 millones aproximadamente.

parqueaderos: Esta variable presenta el nivel de significancia mas bajo según los resultados del modelo ““, también arroja un coeficiente β2 de aproximadamente 2.35, lo cual es un valor atípico teniendo en cuenta que no se ajusta a la realidad, el valor de una propiedad aumenta por el incremento en el numero de parqueaderos que esta tenga; lo que quiere decir que entre mas parqueaderos tiene una construcción mas valor tiene.

banios: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, ademad este arroja un coeficiente β3 de aproximadamente 26, lo que se traduce que por cada baño que tenga la propiedad, esta aumenta el valor de la misma en 26 millones aproximadamente.

habitaciones: Esta variable presenta el nivel de significancia mas bajo según los resultados del modelo ““, sin embargo, arroja un coeficiente β4 positivo de aproximadamente 1.51, lo que se traduce que por cada habitación que hay de mas en la construcción, el valor de la misma también incrementa en 1.51 millones aproximadamente.

estrato: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, por otro lado, el modelo arroja un coeficiente β5 variado para cada estrato de aproximadamente: Estrato 4: con un un coeficiente β5 de 84 Estrato 5: con un un coeficiente β5 de 137 Estrato 6: con un un coeficiente β5 de 329 Lo que se traduce que por el aumento de cada estrato en donde se encuentre la construcción, el valor de la misma también incrementa en 84, 137 y 329 millones respectivamente para los estratos 4, 5 y 6.

En general gracias al valor de R2 se sabe que el modelo permite explicar en un 66% la relación de las variables y a su vez rechaza con contundencia que los valores de β1, β3 y β5 sean iguales a 0.

Recomendaciones para la mejora del modelo: En principio se podría cambiar la escala de las variables numéricas, por ejemplo aplicando un logaritmo a alguna de las columnas en las que se presente poca correlación con la variable precio. Por otro lado, se puede mejorar la estimación del modelo mediante el uso de metodológica de estimación de manera gradual, con procesos de paso a paso o Steppwise.

Ejemplo de ajuste Un posible ajuste como se comentaba, se trata de ajustar el modelo con metodología de estimación de manera gradual con procesos de paso a paso como el que se realiza a continuación:

mod_final1=step(modelo1,direction = "backward")
## Start:  AIC=7308.74
## preciom ~ areaconst + parqueaderos + banios + habitaciones + 
##     estrato
## 
##                Df Sum of Sq      RSS    AIC
## - habitaciones  1      3286 17592193 7306.9
## - parqueaderos  1      7184 17596091 7307.0
## <none>                      17588907 7308.7
## - banios        1    564653 18153559 7329.6
## - estrato       3   4000691 21589597 7450.7
## - areaconst     1   9014613 26603519 7605.5
## 
## Step:  AIC=7306.88
## preciom ~ areaconst + parqueaderos + banios + estrato
## 
##                Df Sum of Sq      RSS    AIC
## - parqueaderos  1      8738 17600931 7305.2
## <none>                      17592193 7306.9
## - banios        1    838093 18430286 7338.5
## - estrato       3   4190913 21783106 7455.2
## - areaconst     1   9497716 27089909 7616.6
## 
## Step:  AIC=7305.24
## preciom ~ areaconst + banios + estrato
## 
##             Df Sum of Sq      RSS    AIC
## <none>                   17600931 7305.2
## - banios     1    889690 18490620 7338.8
## - estrato    3   4293364 21894295 7456.8
## - areaconst  1   9724346 27325277 7620.8
mod_final1
## 
## Call:
## lm(formula = preciom ~ areaconst + banios + estrato, data = baseSNA)
## 
## Coefficients:
## (Intercept)    areaconst       banios     estrato4     estrato5     estrato6  
##     33.9656       0.8308      27.1024      84.2893     137.9211     327.8007

Análisis. A partir del anterior ajuste se toman las variables finales para generar un segundo modelo que permita mejorar la medida de predicción, este proceso se presenta a continuación:

modelo2=lm(preciom ~ areaconst + banios + estrato, data=baseSNA)
summary(modelo2)
## 
## Call:
## lm(formula = preciom ~ areaconst + banios + estrato, data = baseSNA)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -968.77  -73.13  -16.35   45.27 1069.02 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  33.96564   15.51078   2.190   0.0289 *  
## areaconst     0.83083    0.04177  19.889  < 2e-16 ***
## banios       27.10245    4.50506   6.016 2.85e-09 ***
## estrato4     84.28927   16.89775   4.988 7.66e-07 ***
## estrato5    137.92112   15.73297   8.766  < 2e-16 ***
## estrato6    327.80065   25.82630  12.693  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 156.8 on 716 degrees of freedom
## Multiple R-squared:  0.661,  Adjusted R-squared:  0.6587 
## F-statistic: 279.3 on 5 and 716 DF,  p-value: < 2.2e-16

Análisis. Aunque este ajuste no modifica los valores de los coeficientes β ni del coeficiente R2, si mejora los valores obtenidos en la validación de supuestos del modelo, como por ejemplo el supuesto de independencia de los errores y supuesto de varianza de los errores.

Cuarto requerimiento:

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 los supuestos sobre los errores

Inicialmente se realiza la validación de manera gráfica, como se muestra a continuación:

par(mfrow=c(2,2))
plot(modelo2)

Luego se valida mediante el manejo de las diferentes pruebas de hipótesis.

Supuesto de normalidad de los errores

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

Supuesto de independencia de los errores

dwtest(modelo2)
## 
##  Durbin-Watson test
## 
## data:  modelo2
## DW = 1.69, p-value = 1.163e-05
## alternative hypothesis: true autocorrelation is greater than 0

Supuesto de varianza de los errores

gqtest(modelo2)
## 
##  Goldfeld-Quandt test
## 
## data:  modelo2
## GQ = 1.1989, df1 = 355, df2 = 355, p-value = 0.04392
## alternative hypothesis: variance increases from segment 1 to 2

Supuesto de linealidad del modelo

g3=ggplot(baseSNA, aes(preciom, areaconst)) + geom_point() + geom_smooth(method = "lm",  level = 0.95, formula = y ~ x)
g4=ggplot(baseSNA, aes(preciom, banios)) + geom_point() + geom_smooth(method = "lm",  level = 0.95, formula = y ~ x)

(g3+g4)

Supuesto de multicolinealidad

vif(modelo2)
##               GVIF Df GVIF^(1/(2*Df))
## areaconst 1.430202  1        1.195910
## banios    1.382317  1        1.175720
## estrato   1.376739  3        1.054732

Análisis final cuarto punto: Como se puede evidenciar por los resultados obtenidos, el supuesto de varianza de los errores y el supuesto de linealidad del modelo cumplen tanto en la gráfica inicial, como en los test de prueba realizados, en donde el valor supera es igual al 5% aceptando la hipótesis de varianza. El supuesto de multicolinealidad nos indica que no hay problemas en el modelo ya que con la medida de de factores de inflación de varianza se obtiene un valor por debajo de 5.

Aunque varios de los supuestos no se cumplen, se recomienda hacer procesos de ajuste con validación cruzada revisando con las métricas de validación para variables numéricas de MAE y MAPE o transformaciones en las variables numéricas (por ejemplo de tipo log) con el fin de mejorar los indicadores y cumplimiento de los supuestos. Es necesario revisar los criterios de AIC, BIC, estadístico F del ANOVA y el valor RMSE.

Quinto requerimiento:

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

predict(modelo2,list(areaconst=200,banios=2,estrato="4"))
##        1 
## 338.6254

Análisis. El precio final según las características indicadas por el cliente usando el modelo 2, seria el siguiente:

Características caso 1: Tipo ~ Casa Área construida ~ 200 Parqueaderos ~ 1 Baños ~ 2 Habitaciones ~ 4 Estrato ~ 4 Zona ~ Norte La primera configuración cambia con respecto a la segunda únicamente por el valor del estrato de la edificación, el costo que el modelo arroja es de 339 millones de pesos.

Características caso 2: Tipo ~ Casa Área construida ~ 200 Parqueaderos ~ 1 Baños ~ 2 Habitaciones ~ 4 Estrato ~ 5 Zona ~ Norte La segunda configuración cambia con respecto a la primera únicamente por el valor del estrato de la edificación, el costo que el modelo arroja es de 392 millones de pesos.

Conclusión. A partir de los dos casos en que se predice el precio de la vivienda, se concluye que el que mejor se ajusta al crédito aprobado de 350 millones para la vivienda 1 es el caso con la características 1 que difiere únicamente en que su estrato es 4 con una predicción de precio de precio de 339 millones.

Sexto requerimiento:

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.

Inicialmente se hace el filtro para conocer , como se muestra a continuación:

baseVivienda1=subset(baseSNA, areaconst>200 & preciom<339 & habitaciones>=4 & estrato==4 & parqueaderos>=1)
baseVivienda1[is.na(baseVivienda1)] <- 0
baseVivienda1[]
## # A tibble: 6 × 13
##      id zona     piso estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <dbl> <fct>     <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  4458 Zona N…     2 4           315       270            2      4            4
## 2  3352 Zona N…     0 4           335       300            3      4            4
## 3   952 Zona N…     2 4           330       275            2      3            5
## 4  1020 Zona N…     2 4           230       250            2      3            5
## 5  1108 Zona N…     2 4           330       260            1      3            4
## 6  7432 Zona N…     1 4           260       280            2      4            6
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>

Ahora se procede a realizar el mapa solicitado con las 5 ofertas potenciales, con dos procedimientos para validar la ubicación de cada una de las ofertas:

leaflet() %>% addTiles() %>% 
  addCircleMarkers(lng = baseVivienda1$longitud,
                   lat = baseVivienda1$latitud)
baseVivienda1$id = as.character(baseVivienda1$id)
oferta5Casas=st_as_sf(baseVivienda1,coords=c("longitud","latitud"))
cali3= tm_shape(cali) +  tm_polygons() + tm_shape(oferta5Casas) + tm_dots(size=0.3, col="blue")
cali3
## Warning: Currect projection of shape oferta5Casas unknown. Long-lat (WGS84) is
## assumed.

Análisis: Se presentan varias ofertas potenciales (6) para la solicitud de la vivienda 1, de las cuales 4 edificaciones se ubican en el mapa en la zona norte, por otro lado, todas son tipo “Casa” estrato 4 y tienen la siguientes características:

ID 4458: Precio = 315 millones, Área construida = 270m2 Parqueaderos = 2, Baños = 4 y Habitaciones = 4 ID 952: Precio = 330 millones, Área construida = 275m2 Parqueaderos = 2, Baños = 3 y Habitaciones = 5 ID 1020: Precio = 230 millones, Área construida = 250m2 Parqueaderos = 2, Baños = 3 y Habitaciones = 5 ID 1108: Precio = 330 millones, Área construida = 260m2 Parqueaderos = 2, Baños = 4 y Habitaciones = 6

A partir de lo anterior, se recomendaría a Maria que si lo que busca es ahorrar dinero del crédito adquiera la casa ID 1020 la cual supera todas las especificaciones solicitas con 50 metros cuadrados sobre lo solicitado, 1 parqueadero adicional, 1 baño y 1 habitación de mas, por otro lado, con esta adquisición lograría ahorrar un total de 120 millones del crédito aprobado.

Séptimo requerimiento:

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

Segunda solicitud - vivienda de 850 millones

Primer requerimiento caso 2:

Realice un filtro a la base de datos e incluya solo las ofertas de : base1: apartamento, de la zona sur de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta. (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 que?).

Se trabajan con los datos ya revisados de la primera fase y se consideran los necesarios para resolver la segunda petición creando el filtro solicitado:

base2=subset(vivienda, tipo=="Apartamento" & zona=="Zona Sur")
base2[1:3,]
## # A tibble: 3 × 13
##      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
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>

Para verificar los filtros realizados se puede ver la frecuencia de los valores solicitados en la columna tipo y en la columna zona.

ttipo2=data.frame(table(base2$tipo))
colnames(ttipo2) <- c("Tipo","Cantidad")
ttipo2
##          Tipo Cantidad
## 1 Apartamento     2787
tzona2=data.frame(table(base2$zona))
colnames(tzona2) <- c("Zona","Cantidad")
tzona2
##       Zona Cantidad
## 1 Zona Sur     2787
g5=ggplot(ttipo2,aes(x=Tipo,y = Cantidad, fill = Tipo))+geom_col(fill = "olivedrab1",col = 1)+xlab("Tipo de construccion")+theme_bw()
g6=ggplot(tzona2,aes(x=Zona,y = Cantidad, fill = Tipo))+geom_col(fill = "lightgoldenrod",col = 1)+xlab("Zona donde se ubica")+theme_bw()

(g5+g6)

Ahora se procede a realizar el mapa solicitado, con dos procedimientos para validar la ubicación de cada una de las ofertas:

leaflet() %>% addTiles() %>% 
  addCircleMarkers(lng = base2$longitud,
                   lat = base2$latitud)
oferta_sf=st_as_sf(base2,coords=c("longitud","latitud"))
cali4 = tm_shape(cali) +  tm_polygons() + tm_shape(oferta_sf) + tm_dots(size=0.3, col="olivedrab1")
cali4
## Warning: Currect projection of shape oferta_sf unknown. Long-lat (WGS84) is
## assumed.

Análisis. Aunque se verifica que el filtro únicamente haya quedado con las ofertas que se ubican en la Zona Sur y con el tipo de vivienda como Apartamento, se puede observar en el mapa que la ubicación de muchas de las edificaciones se encuentran fuera de lo que se consideraría “Zona Sur” este caso puede deberse a un fallo de la aplicación de georeferenciacion integrada a la pagina web de donde se extrajo la base datos, o también puede deberse a problemas al momento de ingresar los datos por los vendedores en el proceso de crear el anuncio.

Segundo requerimiento caso 2:

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, numero de habitaciones y zona donde se ubica la vivienda. Use gráficos interactivos con el paquete plotly e interprete los resultados

En principio se revisa la cantidad de valores N/A presentes en la tabla filtrada

apply(X = is.na(base2), MARGIN = 2, FUN = sum)
##           id         zona         piso      estrato      preciom    areaconst 
##            0            0          622            0            0            0 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##          406            0            0            0            0            0 
##      latitud 
##            0
dim(base2)
## [1] 2787   13
baseSNA2=base2

Análisis. En la variable piso se registra un total de 622 datos de tipo N/A, esta variable es influyente al momento de evaluar este tipo de edificaciones, por tal razón, se procede a eliminar las filas que contienen datos N/A en esa variable.

Sin embargo, para la variable parqueaderos si se requiere hacer un ajuste, asumiendo que los valores que se tienen como N/A son un dato de “No Aplica” por tal razón un valor de 0, que permita hacer el análisis con los 406 datos filtrados para esta variable. De esta manera se crea una segunda tabla “baseSNA2” dejando la primera “base2” como respaldo.

Por otro lado, revisando las variables se detecta que se encuentra una de tipo categórico que representa el estrado de la vivienda, por tal razón en la base de datos “baseSNA2” también se hace el ajuste para el trabajo con esta variable.

baseSNA2$piso <- as.numeric(baseSNA2$piso)
baseSNA2$estrato <- as.factor(baseSNA2$estrato)
baseSNA2$parqueaderos[is.na(baseSNA2$parqueaderos)] <- 0
baseSNA2 <- na.omit(baseSNA2)

Una vez realizada la limpieza de los datos, se procede a realizar el análisis exploratorio de datos enfocado en la correlación entre la variable respuesta y las demás variables.

describe(baseSNA2)
## baseSNA2 
## 
##  13  Variables      2165  Observations
## --------------------------------------------------------------------------------
## id 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     2165        0     2165        1     4124     2435    935.6   1517.6 
##      .25      .50      .75      .90      .95 
##   2229.0   4062.0   5865.0   7052.6   7668.0 
## 
## lowest :    3    8    9   10   14, highest: 8288 8293 8294 8299 8302
## --------------------------------------------------------------------------------
## zona 
##        n  missing distinct    value 
##     2165        0        1 Zona Sur 
##                    
## Value      Zona Sur
## Frequency      2165
## Proportion        1
## --------------------------------------------------------------------------------
## piso 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     2165        0       12    0.983    4.469    2.942        1        1 
##      .25      .50      .75      .90      .95 
##        2        4        6        8       10 
## 
## lowest :  1  2  3  4  5, highest:  8  9 10 11 12
##                                                                             
## Value          1     2     3     4     5     6     7     8     9    10    11
## Frequency    255   319   329   327   353   131   113   129    73    73    29
## Proportion 0.118 0.147 0.152 0.151 0.163 0.061 0.052 0.060 0.034 0.034 0.013
##                 
## Value         12
## Frequency     34
## Proportion 0.016
## --------------------------------------------------------------------------------
## estrato 
##        n  missing distinct 
##     2165        0        4 
##                                   
## Value          3     4     5     6
## Frequency    149   859   809   348
## Proportion 0.069 0.397 0.374 0.161
## --------------------------------------------------------------------------------
## preciom 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     2165        0      310        1    292.3    171.1    125.2    140.0 
##      .25      .50      .75      .90      .95 
##    175.0    245.0    330.0    520.0    650.0 
## 
## lowest :   75   78   85   90   93, highest: 1500 1561 1600 1700 1750
## --------------------------------------------------------------------------------
## areaconst 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     2165        0      239    0.999    96.16    43.59       55       59 
##      .25      .50      .75      .90      .95 
##       65       85      109      145      180 
## 
## lowest :  40  43  44  45  47, highest: 464 486 520 605 932
## --------------------------------------------------------------------------------
## parqueaderos 
##        n  missing distinct     Info     Mean      Gmd 
##     2165        0        5    0.804    1.201   0.7443 
## 
## lowest : 0 1 2 3 4, highest: 0 1 2 3 4
##                                         
## Value          0     1     2     3     4
## Frequency    305  1210   578    53    19
## Proportion 0.141 0.559 0.267 0.024 0.009
## --------------------------------------------------------------------------------
## banios 
##        n  missing distinct     Info     Mean      Gmd 
##     2165        0        8    0.801    2.485   0.8975 
## 
## lowest : 0 1 2 3 4, highest: 3 4 5 6 7
##                                                           
## Value          0     1     2     3     4     5     6     7
## Frequency      2   129  1231   529   176    91     6     1
## Proportion 0.001 0.060 0.569 0.244 0.081 0.042 0.003 0.000
## --------------------------------------------------------------------------------
## habitaciones 
##        n  missing distinct     Info     Mean      Gmd 
##     2165        0        7     0.68    2.969   0.5775 
## 
## lowest : 0 1 2 3 4, highest: 2 3 4 5 6
##                                                     
## Value          0     1     2     3     4     5     6
## Frequency      4    15   361  1469   300    13     3
## Proportion 0.002 0.007 0.167 0.679 0.139 0.006 0.001
## --------------------------------------------------------------------------------
## tipo 
##           n     missing    distinct       value 
##        2165           0           1 Apartamento 
##                       
## Value      Apartamento
## Frequency         2165
## Proportion           1
## --------------------------------------------------------------------------------
## barrio 
##        n  missing distinct 
##     2165        0      117 
## 
## lowest : acopi              aguablanca         alf√©rez real      alto jordán        altos de guadalupe
## highest: Valle Del Lili     versalles          villa del sur      vipasa             zona sur          
## --------------------------------------------------------------------------------
## longitud 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     2165        0     1042        1   -76.53  0.01571   -76.55   -76.55 
##      .25      .50      .75      .90      .95 
##   -76.54   -76.53   -76.52   -76.52   -76.51 
## 
## lowest : -76.56525 -76.56500 -76.56493 -76.56475 -76.56400
## highest: -76.46516 -76.46500 -76.46478 -76.46438 -76.46400
## --------------------------------------------------------------------------------
## latitud 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     2165        0     1193        1     3.39  0.03143    3.348    3.361 
##      .25      .50      .75      .90      .95 
##    3.371    3.383    3.406    3.429    3.449 
## 
## lowest : 3.33367 3.33418 3.33448 3.33500 3.33600
## highest: 3.48346 3.48383 3.48540 3.48941 3.49684
## --------------------------------------------------------------------------------
ggpairs(baseSNA2[,3:9], title=" ")

fig3 <- plot_ly(alpha = 0.6)
fig3 <- fig3 %>% add_histogram(x = baseSNA2$banios, name = "Baños")
fig3 <- fig3 %>% add_histogram(x = baseSNA2$estrato, name = "Estrato")
fig3 <- fig3 %>% add_histogram(x = baseSNA2$piso, name = "Piso")
fig3 <- fig3 %>% layout(barmode = "overlay", title = "Histograma de Baños, Pisos y Estrato")
fig3
## Warning: Can't display both discrete & non-discrete data on same axis
fig4 <- plot_ly(baseSNA2,x=baseSNA2$areaconst,y=baseSNA2$preciom,type="scatter",mode = "markers+text")
fig4 <- fig4 %>% layout(title = "Relación entre área construida y precio", xaxis = list(title.text="Área construida (m2)"), yaxis=list(title.text="Precio (millones de pesos)"))
fig4

Análisis. A partir del gráfico de asociación entre las variables cuantitativas con la matriz de dispersión y correlación se puede observar que las variables que mas tiene correlación con el precio de la casa son:

Esto también se refleja en los diagramas de histograma y distribución de las variables.

Tercer requerimiento caso 2:

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, piso) ) 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)

En inicio se hace la estimación del modelo mediante el método MCO como se muestra a continuación:

modelo3=lm(preciom ~ areaconst + piso + parqueaderos + banios + habitaciones + estrato, data=baseSNA2)
summary(modelo3)
## 
## Call:
## lm(formula = preciom ~ areaconst + piso + parqueaderos + banios + 
##     habitaciones + estrato, data = baseSNA2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1089.61   -35.04     0.50    32.07   919.89 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -22.33549   11.43584  -1.953  0.05094 .  
## areaconst      1.31091    0.05145  25.478  < 2e-16 ***
## piso           2.56681    0.69962   3.669  0.00025 ***
## parqueaderos  48.22452    3.46008  13.937  < 2e-16 ***
## banios        38.74944    3.23097  11.993  < 2e-16 ***
## habitaciones  -8.94912    3.55208  -2.519  0.01183 *  
## estrato4      15.25683    7.85531   1.942  0.05224 .  
## estrato5      33.58321    8.26588   4.063 5.02e-05 ***
## estrato6     191.75821   10.35340  18.521  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 86.23 on 2156 degrees of freedom
## Multiple R-squared:  0.7788, Adjusted R-squared:  0.778 
## F-statistic:   949 on 8 and 2156 DF,  p-value: < 2.2e-16

Una vez realizado el modelo de linealidad múltiple mediante el método MCO, se procede a evaluar problemas de multicolinealidad.

vif(modelo3)
##                  GVIF Df GVIF^(1/(2*Df))
## areaconst    1.920548  1        1.385838
## piso         1.015860  1        1.007899
## parqueaderos 1.897119  1        1.377360
## banios       2.528282  1        1.590057
## habitaciones 1.415024  1        1.189548
## estrato      1.894041  3        1.112325

Análisis. Los coeficientes de cada variable se presentan a continuación:

areaconst: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, por otro lado, el modelo arroja un coeficiente β1 de aproximadamente 1.31, lo que se traduce que por cada metro cuadrado en que aumenta la construcción, el valor de la misma también incrementa en 1.31 millones aproximadamente.

piso: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, ademas este arroja un coeficiente β2 de aproximadamente 2.56, lo que se traduce que por cada nivel en que se encuentra el apartamento, esta aumenta el valor del mismo en 2.56 millones aproximadamente.

parqueaderos: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, por otro lado, tiene un coeficiente β3 de aproximadamente 48.22, lo que se traduce que por cada parqueadero que tenga el apartamento, esta aumenta el valor del mismo en 48.22 millones aproximadamente..

banios: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, ademas este arroja un coeficiente β4 de aproximadamente 38.75, lo que se traduce que por cada baño que tenga la propiedad, esta aumenta el valor de la misma en 38.75 millones aproximadamente.

habitaciones: Esta variable presenta el nivel de significancia medio según los resultados del modelo “*“, sin embargo, arroja un coeficiente β5 negativo de aproximadamente -8.94, lo que no es coherente ya que normalmente en las propiedades por el aumento en las habitaciones, el precio tiende a crecer.

estrato: Esta variable presenta un nivel medio (4) y alto (5, 6) de significancia según los resultados del modelo “***“, por otro lado, el modelo arroja un coeficiente β6 variado para cada estrato: Estrato 4: con un un coeficiente β6 de 15 Estrato 5: con un un coeficiente β6 de 33 Estrato 6: con un un coeficiente β6 de 192 Lo que se traduce que por el aumento de cada estrato en donde se encuentre la construcción, el valor de la misma también incrementa en 15, 33 y 192 millones respectivamente para los estratos 4, 5 y 6.

En general gracias al valor de R2 se sabe que el modelo permite explicar en un 78% la relación de las variables con la respuesta y a su vez rechaza con contundencia que los valores de β1, β2, β3, β4 y β6 sean iguales a 0.

Recomendaciones para la mejora del modelo: En principio se podría cambiar la escala de las variables numéricas, por ejemplo aplicando un logaritmo a alguna de las columnas en las que se presente poca correlación con la variable precio. Por otro lado, se puede mejorar la estimación del modelo mediante el uso de metodológica de estimación de manera gradual, con procesos de paso a paso o Steppwise.

Ejemplo de ajuste Un posible ajuste como se comentaba, se trata de ajustar el modelo con metodología de estimación de manera gradual con procesos de paso a paso como el que se realiza a continuación:

mod_final2=step(modelo3,direction = "backward")
## Start:  AIC=19307.77
## preciom ~ areaconst + piso + parqueaderos + banios + habitaciones + 
##     estrato
## 
##                Df Sum of Sq      RSS   AIC
## <none>                      16030420 19308
## - habitaciones  1     47195 16077615 19312
## - piso          1    100082 16130502 19319
## - banios        1   1069453 17099873 19446
## - parqueaderos  1   1444304 17474724 19493
## - areaconst     1   4826442 20856862 19876
## - estrato       3   5210751 21241171 19911
mod_final2
## 
## Call:
## lm(formula = preciom ~ areaconst + piso + parqueaderos + banios + 
##     habitaciones + estrato, data = baseSNA2)
## 
## Coefficients:
##  (Intercept)     areaconst          piso  parqueaderos        banios  
##      -22.335         1.311         2.567        48.225        38.749  
## habitaciones      estrato4      estrato5      estrato6  
##       -8.949        15.257        33.583       191.758

Análisis. Aunque el ajuste no elimino ninguna de las variables, se opta por quitar la variable de habitaciones teniendo en cuenta que su significancia no afecta en valores como el coeficiente de determinación, por lo cual se crea un segundo modelo que sera el utilizado para los demás pasos, este proceso se presenta a continuación:

modelo4=lm(preciom ~ areaconst + piso + parqueaderos + banios + estrato, data=baseSNA2)
summary(modelo4)
## 
## Call:
## lm(formula = preciom ~ areaconst + piso + parqueaderos + banios + 
##     estrato, data = baseSNA2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1070.15   -35.45     0.47    31.59   926.36 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -41.6585     8.4931  -4.905 1.00e-06 ***
## areaconst      1.2894     0.0508  25.381  < 2e-16 ***
## piso           2.6256     0.7001   3.750 0.000181 ***
## parqueaderos  48.1758     3.4643  13.906  < 2e-16 ***
## banios        35.9444     3.0368  11.836  < 2e-16 ***
## estrato4      16.8235     7.8404   2.146 0.032004 *  
## estrato5      34.7039     8.2641   4.199 2.79e-05 ***
## estrato6     195.1910    10.2761  18.995  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 86.33 on 2157 degrees of freedom
## Multiple R-squared:  0.7782, Adjusted R-squared:  0.7775 
## F-statistic:  1081 on 7 and 2157 DF,  p-value: < 2.2e-16

Análisis. Aunque este ajuste no modifica los valores de los coeficientes β ni del coeficiente R2, si mejora los valores obtenidos en la validación de supuestos del modelo, como por ejemplo el supuesto de independencia de los errores y supuesto de varianza de los errores.

Cuarto requerimiento caso 2:

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 los supuestos sobre los errores

Inicialmente se realiza la validación de manera gráfica, como se muestra a continuación:

par(mfrow=c(2,2))
plot(modelo4)

Luego se valida mediante el manejo de las diferentes pruebas de hipótesis.

Supuesto de normalidad de los errores

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

Supuesto de independencia de los errores

dwtest(modelo4)
## 
##  Durbin-Watson test
## 
## data:  modelo4
## DW = 1.7039, p-value = 1.783e-12
## alternative hypothesis: true autocorrelation is greater than 0

Supuesto de varianza de los errores

gqtest(modelo4)
## 
##  Goldfeld-Quandt test
## 
## data:  modelo4
## GQ = 0.76192, df1 = 1075, df2 = 1074, p-value = 1
## alternative hypothesis: variance increases from segment 1 to 2

Supuesto de linealidad del modelo

g7=ggplot(baseSNA2, aes(preciom, areaconst)) + geom_point() + geom_smooth(method = "lm",  level = 0.95, formula = y ~ x)
g8=ggplot(baseSNA2, aes(preciom, banios)) + geom_point() + geom_smooth(method = "lm",  level = 0.95, formula = y ~ x)
g9=ggplot(baseSNA2, aes(preciom, piso)) + geom_point() + geom_smooth(method = "lm",  level = 0.95, formula = y ~ x)
g10=ggplot(baseSNA2, aes(preciom, parqueaderos)) + geom_point() + geom_smooth(method = "lm",  level = 0.95, formula = y ~ x)

(g7+g8)/(g9+g10)

Supuesto de multicolinealidad

vif(modelo4)
##                  GVIF Df GVIF^(1/(2*Df))
## areaconst    1.867636  1        1.366615
## piso         1.014730  1        1.007338
## parqueaderos 1.897060  1        1.377338
## banios       2.228057  1        1.492668
## estrato      1.845687  3        1.107541

Análisis final cuarto punto: Como se puede evidenciar por los resultados obtenidos, unicamente se cumple el supuesto de no multicolinealidad el cual indica que no hay problemas en el modelo ya que con la medida de de factores de inflación de varianza se obtiene un valor por debajo de 5. Sin embargo los demás supuestos no se ajustan.

Ya que la gran mayoría de supuestos no se cumplen, se recomienda hacer procesos de ajuste con validación cruzada revisando con las métricas de validación para variables numéricas de MAE y MAPE o transformaciones en las variables numéricas (por ejemplo de tipo log) con el fin de mejorar los indicadores y cumplimiento de los supuestos. Es necesario revisar los criterios de AIC, BIC, estadístico F del ANOVA y el valor RMSE.

Quinto requerimiento caso 2:

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

predict(modelo4,list(areaconst=300,piso=12,parqueaderos=3,banios=3,estrato="6"))
##        1 
## 824.2187

Análisis. El precio final según las características indicadas por el cliente usando el modelo 4, seria el siguiente:

Características caso 1: Tipo ~ Apartamento Área construida ~ 300 Parqueaderos ~ 3 Baños ~ 3 Habitaciones ~ 5 Estrato ~ 5 Zona ~ Sur La primera configuración cambia con respecto a la segunda únicamente por el valor del estrato de la edificación, el costo que el modelo arroja con las características del caso 1 para un apartamento en el primer piso (1) es de 634.85 millones de pesos y en el ultimo piso (12) es de 663.73 millones de pesos.

Características caso 2: Tipo ~ Apartamento Área construida ~ 300 Parqueaderos ~ 3 Baños ~ 3 Habitaciones ~ 5 Estrato ~ 6 Zona ~ Sur La segunda configuración cambia con respecto a la primera únicamente por el valor del estrato de la edificación, el costo que el modelo arroja con las características del caso 2 para un apartamento en el primer piso (1) es de 795.33 millones de pesos y en el ultimo piso (12) es de 824.21 millones de pesos.

Conclusión. A partir de los dos casos en que se predice el precio de la vivienda, se concluye que ambos estarían dentro del rango de precio que se aprobó para el crédito de 850 millones para la vivienda 2 por tal razón en el siguiente punto se evaluan los dos casos.

Sexto requerimiento caso 2:

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

Inicialmente se hace el filtro para el caso donde la vivienda se ubica en una zona estrato 5, como se muestra a continuación:

baseVivienda2=subset(baseSNA2, areaconst>300 & preciom<664 & estrato==5)
baseVivienda2[is.na(baseVivienda2)] <- 0
baseVivienda2[]
## # A tibble: 3 × 13
##      id zona     piso estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <dbl> <fct>     <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  7658 Zona S…     6 5           520       320            2      4            4
## 2  6472 Zona S…     3 5           170       605            1      2            2
## 3  6121 Zona S…     7 5           299       932            1      3            3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>

Dentro de las propiedades filtradas para las características 1 de la Vivienda 2, no hay ningún apartamento que se ajuste en la totalidad de requerimientos solicitados. Se realiza el segundo filtro con el estrato 6:

baseVivienda2E6=subset(baseSNA2, areaconst>300 & preciom<824 & estrato==6)
baseVivienda2E6[is.na(baseVivienda2E6)] <- 0
baseVivienda2E6[]
## # A tibble: 0 × 13
## # ℹ 13 variables: id <dbl>, zona <chr>, piso <dbl>, estrato <fct>,
## #   preciom <dbl>, areaconst <dbl>, parqueaderos <dbl>, banios <dbl>,
## #   habitaciones <dbl>, tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>

Para el caso de estrato 6 no hay viviendas en esta zona que cumplan con las características que el cliente esta solicitando, los apartamentos que se encuentran sobre los 300 metros cuadrados con estrato 6 se encuentran sobre los 950 millones de peso (valor por encima de los 850 millones pre aprobados del crédito para la Vivienda 2)

X=subset(baseSNA2, areaconst>300 & estrato==6)
X
## # A tibble: 10 × 13
##       id zona    piso estrato preciom areaconst parqueaderos banios habitaciones
##    <dbl> <chr>  <dbl> <fct>     <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
##  1  4958 Zona …     2 6           950       329            4      3            3
##  2  5952 Zona …     2 6          1750       342            3      5            4
##  3  6475 Zona …     2 6          1561       399            3      4            3
##  4  5211 Zona …     8 6          1350       439            4      6            4
##  5  5248 Zona …     8 6          1150       344            4      5            5
##  6  5460 Zona …     8 6          1150       346            2      6            5
##  7  6023 Zona …     8 6          1150       464            4      6            5
##  8  5190 Zona …    10 6          1600       345            3      6            3
##  9  4526 Zona …     2 6          1000       520            0      0            5
## 10  5596 Zona …     3 6           980       348            4      5            3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>

De igual manera se realiza el mapa solicitado con las ofertas filtradas para el caso del estrato 5, con dos procedimientos para validar la ubicación de cada una de las ofertas:

leaflet() %>% addTiles() %>% 
  addCircleMarkers(lng = baseVivienda2$longitud,
                   lat = baseVivienda2$latitud)
baseVivienda2$id = as.character(baseVivienda2$id)
oferta3Casas=st_as_sf(baseVivienda2,coords=c("longitud","latitud"))
cali5= tm_shape(cali) +  tm_polygons() + tm_shape(oferta3Casas) + tm_dots(size=0.3, col="forestgreen")
cali5
## Warning: Currect projection of shape oferta3Casas unknown. Long-lat (WGS84) is
## assumed.

Análisis: Para este caso únicamente se presentaría 1 oferta potencial para la solicitud de la vivienda 2, sin embargo, cabe aclarar que que esta oferta no cumple con todos los requerimientos solicitados por el cliente, por lo cual se presenta algunas recomendaciones al final:

ID 4458: Precio = 520 millones, Área construida = 320 m2 Parqueaderos = 2, Baños = 4 y Habitaciones = 4

A partir de lo anterior, se recomendaría a Maria la posibilidad de hablar con el cliente para ver la flexibilidad en los requerimientos para la Vivienda 2 ya que en la zona sur solo esa propiedad se asemejaría a las características solicitadas, sin embargo, tiene una habitación y un parqueadero de menos. Por otro lado, una solución mas viable si se quiere se quiere conservar las características solicitadas de la propiedad seria poder cambiar de zona, por ejemplo en la “Zona Norte” se realizo un breve exploración y se encontró que algunas propiedades de esa zona si cumplen con todo lo solicitado por el cliente y ademas los precios se encuentran por debajo del rango máximo del crédito aprobado y de las proyecciones realizadas por el modelo 4.