library(paqueteMODELOS)
data(vivienda)
vivienda$barrio <- gsub("á", "a", vivienda$barrio)
vivienda$barrio <- gsub("é", "e", vivienda$barrio)
vivienda$barrio <- gsub("í", "i", vivienda$barrio)
vivienda$barrio <- gsub("ó", "o", vivienda$barrio)
vivienda$barrio <- gsub("ú", "u", vivienda$barrio)
vivienda$barrio <- gsub("é", "e", vivienda$barrio)
vivienda$barrio <- gsub("√∫", "u", vivienda$barrio)
vivienda$barrio <- gsub("\\^\\[", "", vivienda$barrio)
vivienda$barrio <- gsub("ñ", "gn", vivienda$barrio)
Se realiza la limpieza de la data para eliminar los caracteres con tildes y otras acentuaciones que pueden generar errores en el procesamiento de los datos
## spc_tbl_ [8,322 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ id : num [1:8322] 1147 1169 1350 5992 1212 ...
## $ zona : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
## $ piso : chr [1:8322] NA NA NA "02" ...
## $ estrato : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
## $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
## $ banios : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
## $ tipo : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
## $ barrio : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
## $ longitud : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...
## - attr(*, "spec")=List of 3
## ..$ cols :List of 13
## .. ..$ id : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ zona : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ piso : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ estrato : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ preciom : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ areaconst : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ parqueaderos: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ banios : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ habitaciones: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ tipo : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ barrio : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ longitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ latitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
## ..$ delim : chr ";"
## ..- attr(*, "class")= chr "col_spec"
## - attr(*, "problems")=<externalptr>
Se realiza una exploracion de los datos para conocer su estructura y visualizar posible falta de informacion dentro de la base
Se realiza la verificacion de faltantes en la base evidenciando 1605 datos faltantes en la columna parqueaderos y 2638 en la columna pisos
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 1.000 2.000 1.835 2.000 10.000 1605
## spc_tbl_ [8,319 × 12] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ id : num [1:8319] 1147 1169 1350 5992 1212 ...
## $ zona : chr [1:8319] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
## $ estrato : num [1:8319] 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num [1:8319] 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num [1:8319] 70 120 220 280 90 87 52 137 150 380 ...
## $ parqueaderos: num [1:8319] 1 1 2 3 1 1 2 2 2 2 ...
## $ banios : num [1:8319] 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num [1:8319] 6 3 4 3 3 3 3 4 6 3 ...
## $ tipo : chr [1:8319] "Casa" "Casa" "Casa" "Casa" ...
## $ barrio : chr [1:8319] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
## $ longitud : num [1:8319] -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num [1:8319] 3.43 3.43 3.44 3.44 3.46 ...
## - attr(*, "spec")=List of 3
## ..$ cols :List of 13
## .. ..$ id : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ zona : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ piso : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ estrato : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ preciom : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ areaconst : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ parqueaderos: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ banios : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ habitaciones: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ tipo : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ barrio : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ longitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ latitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
## ..$ delim : chr ";"
## ..- attr(*, "class")= chr "col_spec"
## - attr(*, "problems")=<externalptr>
## - attr(*, "na.action")= 'omit' Named int [1:3] 8320 8321 8322
## ..- attr(*, "names")= chr [1:3] "8320" "8321" "8322"
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
Se realiza la imputacion de datos en la columna parqueaderos utilizando la mediana y se elimina la columna pisos, la cual no es relevante para el analisis en general.
## id zona estrato preciom
## Min. : 1 Length:8319 Min. :3.000 Min. : 58.0
## 1st Qu.:2080 Class :character 1st Qu.:4.000 1st Qu.: 220.0
## Median :4160 Mode :character Median :5.000 Median : 330.0
## Mean :4160 Mean :4.634 Mean : 433.9
## 3rd Qu.:6240 3rd Qu.:5.000 3rd Qu.: 540.0
## Max. :8319 Max. :6.000 Max. :1999.0
## areaconst parqueaderos banios habitaciones
## Min. : 30.0 Min. : 1.000 Min. : 0.000 Min. : 0.000
## 1st Qu.: 80.0 1st Qu.: 1.000 1st Qu.: 2.000 1st Qu.: 3.000
## Median : 123.0 Median : 2.000 Median : 3.000 Median : 3.000
## Mean : 174.9 Mean : 1.867 Mean : 3.111 Mean : 3.605
## 3rd Qu.: 229.0 3rd Qu.: 2.000 3rd Qu.: 4.000 3rd Qu.: 4.000
## Max. :1745.0 Max. :10.000 Max. :10.000 Max. :10.000
## tipo barrio longitud latitud
## Length:8319 Length:8319 Min. :-76.59 Min. :3.333
## Class :character Class :character 1st Qu.:-76.54 1st Qu.:3.381
## Mode :character Mode :character Median :-76.53 Median :3.416
## Mean :-76.53 Mean :3.418
## 3rd Qu.:-76.52 3rd Qu.:3.452
## Max. :-76.46 Max. :3.498
## Z1 Z2 Z3 Z4 E0
## Min. :0.0000 Min. :0.0000 Min. :0.00000 Min. :0 Min. :0
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.00000 1st Qu.:0 1st Qu.:0
## Median :0.0000 Median :1.0000 Median :0.00000 Median :0 Median :0
## Mean :0.2308 Mean :0.5681 Mean :0.04219 Mean :0 Mean :0
## 3rd Qu.:0.0000 3rd Qu.:1.0000 3rd Qu.:0.00000 3rd Qu.:0 3rd Qu.:0
## Max. :1.0000 Max. :1.0000 Max. :1.00000 Max. :0 Max. :0
## E1 E2 E3 E4
## Min. :0 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :0 Median :0.0000 Median :0.0000 Median :0.0000
## Mean :0 Mean :0.1747 Mean :0.2559 Mean :0.3306
## 3rd Qu.:0 3rd Qu.:0.0000 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :0 Max. :1.0000 Max. :1.0000 Max. :1.0000
## E5
## Min. :0.0000
## 1st Qu.:0.0000
## Median :0.0000
## Mean :0.2389
## 3rd Qu.:0.0000
## Max. :1.0000
Se raliza la creacion de las variable binarias para poder realizar los procedimientos siguientes que requieren el uso de variables categoricas no numericas creando las variables z1, Z2, Z3 y Z4 para las Zonas y las variables E1, E2, E3, E4 y E5 para los estratos.
Se realiza el filtro para el caso vivienda 1 y se ordena por precio en orden ascendente y se extraen los primeros 3 resultados segun lo solicitado en el caso de estudio.
Se crea mapa interactivo con las opciones del caso vivienda1 y la demarcacion de la Zona norte de la ciudad de cali.
| Unique (#) | Missing (%) | Mean | SD | Min | Median | Max | ||
|---|---|---|---|---|---|---|---|---|
| id | 39 | 0 | 2913.9 | 1927.5 | 766.0 | 2544.0 | 7471.0 | |
| estrato | 2 | 0 | 4.6 | 0.5 | 4.0 | 5.0 | 5.0 | |
| preciom | 13 | 0 | 328.8 | 27.9 | 230.0 | 340.0 | 350.0 | |
| areaconst | 27 | 0 | 251.5 | 41.5 | 200.0 | 249.0 | 355.0 | |
| parqueaderos | 3 | 0 | 1.9 | 0.5 | 1.0 | 2.0 | 3.0 | |
| banios | 5 | 0 | 3.8 | 1.0 | 2.0 | 4.0 | 6.0 | |
| habitaciones | 5 | 0 | 4.7 | 1.0 | 4.0 | 4.0 | 8.0 | |
| longitud | 36 | 0 | -76.5 | 0.0 | -76.5 | -76.5 | -76.5 | |
| latitud | 39 | 0 | 3.5 | 0.0 | 3.4 | 3.5 | 3.5 | |
| Z1 | 1 | 0 | 1.0 | 0.0 | 1.0 | 1.0 | 1.0 | |
| Z2 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| Z3 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| Z4 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| E0 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| E1 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| E2 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| E3 | 2 | 0 | 0.4 | 0.5 | 0.0 | 0.0 | 1.0 | |
| E4 | 2 | 0 | 0.6 | 0.5 | 0.0 | 1.0 | 1.0 | |
| E5 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
## Rows: 39
## Columns: 22
## $ id <dbl> 7471, 4210, 4267, 4800, 4209, 4422, 4458, 4483, 852, 1009…
## $ zona <chr> "Zona Norte", "Zona Norte", "Zona Norte", "Zona Norte", "…
## $ estrato <dbl> 4, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 4, 4, 4, 5, 5, 5, 5, 4, …
## $ preciom <dbl> 330, 350, 335, 340, 350, 350, 315, 342, 340, 250, 350, 34…
## $ areaconst <dbl> 240, 200, 202, 250, 300, 240, 270, 250, 208, 243, 203, 20…
## $ parqueaderos <dbl> 2, 3, 1, 2, 3, 2, 2, 1, 2, 1, 2, 2, 3, 2, 2, 2, 2, 2, 2, …
## $ banios <dbl> 4, 3, 4, 4, 5, 3, 4, 4, 6, 4, 2, 4, 4, 6, 5, 3, 4, 4, 3, …
## $ habitaciones <dbl> 4, 4, 5, 4, 6, 6, 4, 6, 4, 5, 5, 4, 4, 4, 6, 4, 4, 4, 4, …
## $ tipo <chr> "Casa", "Casa", "Casa", "Casa", "Casa", "Casa", "Casa", "…
## $ barrio <chr> "acopi", "el bosque", "el bosque", "el bosque", "el bosqu…
## $ longitud <dbl> -76.54980, -76.53010, -76.53044, -76.53300, -76.53010, -7…
## $ latitud <dbl> 3.39758, 3.48503, 3.48399, 3.46500, 3.48577, 3.48635, 3.4…
## $ Z1 <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ Z2 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ Z3 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ Z4 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ E0 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ E1 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ E2 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ E3 <dbl> 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, …
## $ E4 <dbl> 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, …
## $ E5 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
Se realiza un analisis exploratorio para visualizar la distribucion y el comportamiento de las variables numericas del caso vivienda 1
Se realiza un analisis de correlaciones de las variables predictorias y la variable de interes evidenciando que existe una correlacion muy baja debido a la poca cantidad de datos luego de aplicado el filtro, este analisis debe ser complementado ya que no es concluyente para el ejercicio planteado, por lo cual se realizan algunos analisis de correlacion de tipo individual entre la variable de interes y cada variable predictorias para tener mayor informacion del comportamiento de cada una de ellas.
En la grafica se puede observar que existe correlacion entre las variables preciom y areaconst adicionalmente es relacion es positiva, por otro lado se observa que algunos de los inmuebles se ubican en un rango de precios igual o inferior a los $300 millones, mientras que la mayor parte de la poblacion se encuentra en un rango de precios entre $320 y $350 millones.
La variable zona tiene un patron de distribucion lo que podria indicar que no es un predictor adecuado para el modelo.
Se evidencia que se cuenta con opciones de inmuebles en los estratos propuestos y en proporciones similares de precio lo que podria indicar una alta correlacion entre estas dos variables generando un posible problema de multicolinealidad, lo que podria ser un incomveniente al momento de definir el modelo.
La variable habitaciones tiene una distribucion variada no presenta un patron definido lo que podria ser un buen indicio a la hora de tener en cuenta para la construccion del modelo.
La variable banios cuenta tambien con una buena distribucion de los datos sin embargo se observa una leve tendencia negativa.
En esta agrupacion se observa de manera mas detallada el comportamiento de los datos de cada variable.
Se realiza un mapa de calor de correlaciones para obtener informacion mas detallada y visualmente agradable para los usuarios finales.
##
## Call:
## lm(formula = preciom ~ areaconst + banios + habitaciones + E4,
## data = Hc)
##
## Residuals:
## Min 1Q Median 3Q Max
## -89.492 -9.787 6.433 15.661 33.904
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 311.6267 35.7421 8.719 3.45e-10 ***
## areaconst 0.1690 0.1223 1.382 0.176
## banios -2.5165 4.8015 -0.524 0.604
## habitaciones -5.3647 5.2998 -1.012 0.319
## E4 16.3446 9.7493 1.676 0.103
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 27.58 on 34 degrees of freedom
## Multiple R-squared: 0.1236, Adjusted R-squared: 0.02046
## F-statistic: 1.198 on 4 and 34 DF, p-value: 0.3293
El modelo de regresión lineal múltiple estimado no muestra resultados estadísticamente significativos para las variables incluidas. Adicionalmente, el R-cuadrado es bajo (0.123), lo que sugiere que las variables en el modelo tienen una capacidad limitada (12.36%)para explicar la variabilidad en los precios de las viviendas. Se podrían explorar otras variables o enfoques de modelado para mejorar la capacidad del modelo para predecir los precios de las viviendas de manera más precisa.
El método “forward” no encontró ninguna combinación de variables predictoras que mejorara significativamente el modelo en comparación con el modelo constante (intercepto solo). Esto podría ser una indicacion de que las variables predictoras seleccionadas inicialmente no están bien correlacionadas con la variable respuesta (precio) o que el conjunto de datos es demasiado pequeño (38) para realizar una selección efectiva de variables. Se podría considerar explorar otras variables o métodos de selección de características para mejorar el modelo.
##
## Call:
## lm(formula = preciom ~ 1, data = Hc)
##
## Residuals:
## Min 1Q Median 3Q Max
## -98.821 -8.321 11.179 21.179 21.179
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 328.821 4.462 73.7 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 27.86 on 38 degrees of freedom
El resumen realizado con la funcion forward muestra que los valores del intercepto son los valores con mayor significancia en el modelo de regresion.
##
## Call:
## lm(formula = preciom ~ areaconst + banios + habitaciones + E4,
## data = Hc, subset = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -73.873 -11.044 6.609 20.803 34.068
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 223.7211 57.5347 3.888 0.00187 **
## areaconst 0.5998 0.2878 2.084 0.05742 .
## banios 5.1368 8.1098 0.633 0.53746
## habitaciones -21.2785 11.8869 -1.790 0.09675 .
## E4 40.2522 20.0571 2.007 0.06602 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 31.68 on 13 degrees of freedom
## Multiple R-squared: 0.3062, Adjusted R-squared: 0.09266
## F-statistic: 1.434 on 4 and 13 DF, p-value: 0.2779
Se entrena un modelo para que tome muestras y realice el calculo de los coeficientes y los estadisticos de prueba, sin embargo nos sigue mostrando que continua siendo el intercepto el de mayor significancia en el modelo y adicionalmente se evidencia que el modelo solo explica el 30.06% a traves de las variables predictorias la variable de interes preciom, adicionalmente se tiene un estadistico F de 1.434 y un p-value de 0.2779 lo que indica que el modelo no es adecuado para explicar la variable de interes preciom.
## [1] 1480.806
El MSE de 1480.806 sugiere que el modelo podría no estar ajustando muy bien los datos de prueba, ya que el Error Cuadratico Medio es relativamente alto. Esto significa que las predicciones del modelo pueden estar bastante alejadas de los valores reales en el conjunto de prueba.
Es importante considerar este resultado en el contexto de los datos y el problema en cuestión. Si el MSE es demasiado alto y las predicciones del modelo son inexactas, podría ser necesario revisar y mejorar el modelo, considerar diferentes características o técnicas de modelado, o realizar un análisis más detenido para entender mejor las razones detrás de las discrepancias.
Al aumentar la muestra y analizar a traves de los valores de MSE, se observa que están distribuidos alrededor del valor de referencia 1, y no hay un patrón evidente de sesgo o varianza extrema, esto sugiere que el modelo podría estar proporcionando predicciones razonablemente estables en diferentes conjuntos de datos de prueba.
Al aplicar el metodo Bootstrap se obtienen los rangos para los coeficientes de las variables lo que indica que los valores de estos coeficientes podrian estar en dicho rango con una alta probabilidad, lo que permite una mejor toma de desicion al seleccionar el modelo, por otro lado los datos no se muestran en forma de campana y puede deberse al tamaño de la muestra que para el caso de Hc es de aproximadamente 39 observaciones, sesgos en los datos, multicolinealidas en las variables o ruido en los datos.
##
## ORDINARY NONPARAMETRIC BOOTSTRAP
##
##
## Call:
## boot(data = Hc, statistic = fun_coeficientes, R = 2000)
##
##
## Bootstrap Statistics :
## original bias std. error
## t1* 415.81558743 0 0
## t2* 0.01364138 0 0
## t3* -4.59389765 0 0
## t4* -17.95661798 0 0
## t5* 7.17902859 0 0
Al aplicar el estadistico Boots podemos observar que el bias es cero(0) lo que nos indica que no existe sesgo entre las estadisticas originales y las estadisticas bootstrap, sin embargo los errores estandar con valores cero(0) sugieren algun tipo de error ya que es poco probable que no exista variabilidad entre las estadisticas bootstrap en diferentes muestreos.
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 311.6266542 35.7420704 8.7187634 3.454394e-10
## areaconst 0.1689544 0.1222945 1.3815376 1.761256e-01
## banios -2.5164806 4.8014556 -0.5241079 6.036037e-01
## habitaciones -5.3646655 5.2998426 -1.0122311 3.185772e-01
## E4 16.3446143 9.7493386 1.6764844 1.028162e-01
Despues de realizar el resumen del modelo ajustado de los coeficientes se evidencia que el intercepto es significativo para explicar el precio de los inmuebles.
| r.squared | adj.r.squared | sigma | statistic | p.value | df | logLik | AIC | BIC | deviance | df.residual | nobs |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.12 | 0.02 | 27.58 | 1.20 | 0.33 | 4 | -182.03 | 376.05 | 386.03 | 25856.12 | 34 | 39 |
| 0.05 | -0.03 | 28.28 | 0.63 | 0.60 | 3 | -183.57 | 377.15 | 385.47 | 27993.51 | 35 | 39 |
| 0.10 | 0.02 | 27.59 | 1.26 | 0.30 | 3 | -182.60 | 375.21 | 383.53 | 26635.31 | 35 | 39 |
| 0.07 | 0.02 | 27.58 | 1.39 | 0.26 | 2 | -183.14 | 374.29 | 380.94 | 27384.19 | 36 | 39 |
| 0.01 | -0.01 | 28.03 | 0.54 | 0.47 | 1 | -184.32 | 374.63 | 379.62 | 29079.46 | 37 | 39 |
La validacion realizada con la tabla comparativa de los diferentes modelos de regresion muestra que los modelos no son lo suficientemente significativos para explicar la variable de interes.
##
## ===================================================================
## Dependent variable:
## ------------------------------------------------------
## preciom
## modelo0 modelo1 modelo2 modelo3 modelo4
## -------------------------------------------------------------------
## areaconst 0.169 0.097 0.119 0.125 0.080
## (0.122) (0.117) (0.112) (0.112) (0.110)
##
## banios -2.516 -3.766 -4.395
## (4.801) (4.864) (4.430)
##
## habitaciones -5.365 -2.768
## (5.300) (5.198)
##
## E4 16.345 13.461 13.905
## (9.749) (9.327) (9.314)
##
## Constant 311.627*** 331.796*** 307.442*** 289.232*** 308.608***
## (35.742) (34.516) (35.515) (30.396) (27.938)
##
## -------------------------------------------------------------------
## Observations 39 39 39 39 39
## R2 0.124 0.051 0.097 0.072 0.014
## Adjusted R2 0.020 -0.030 0.020 0.020 -0.012
## ===================================================================
## Note: *p<0.05; **p<0.01; ***p<0.001
##Sugerencias Para Cliente
Basado en los resultados del analisis se tuvo en cuenta los valores de referencia entregados por el intercepto como valor de mayor significancia para realizar una sugerencia al cliente que cumpliera con los requerimientos planteados, de los cuales se extraen las 5 mejores ofertas de la tabla,cabe resaltar que para efectos practicos debe complementarse la recomendacion con una visita a los inmuebles para validar aspectos de confort que pueden ser relevantes en la toma de decicion final.
en el mapa se puede observar que solo 4 de las sugerencias se encuentran en el area correspondiente a la Zona Norte
Se realiza la consulta para el caso de vivienda 2 aplicando el filtro sugerido segun lo solicitado en el caso de estudio.
Se genera mapa interactivo para ilustrar de manera clara la ubicacion de los inmuebles de la base de datos Base2, el mapa cuenta con identificacion de la zona sur de la ciudad de cali.
| Unique (#) | Missing (%) | Mean | SD | Min | Median | Max | ||
|---|---|---|---|---|---|---|---|---|
| id | 61 | 0 | 5531.8 | 1442.8 | 54.0 | 5658.0 | 7997.0 | |
| estrato | 2 | 0 | 5.2 | 0.4 | 5.0 | 5.0 | 6.0 | |
| preciom | 25 | 0 | 669.9 | 118.6 | 430.0 | 655.0 | 850.0 | |
| areaconst | 32 | 0 | 406.9 | 112.0 | 300.0 | 400.0 | 960.0 | |
| parqueaderos | 6 | 0 | 3.9 | 1.2 | 3.0 | 4.0 | 8.0 | |
| banios | 7 | 0 | 5.3 | 1.3 | 3.0 | 5.0 | 9.0 | |
| habitaciones | 6 | 0 | 6.1 | 1.4 | 5.0 | 6.0 | 10.0 | |
| longitud | 54 | 0 | -76.5 | 0.0 | -76.6 | -76.5 | -76.5 | |
| latitud | 59 | 0 | 3.4 | 0.0 | 3.3 | 3.4 | 3.4 | |
| Z1 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| Z2 | 1 | 0 | 1.0 | 0.0 | 1.0 | 1.0 | 1.0 | |
| Z3 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| Z4 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| E0 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| E1 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| E2 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| E3 | 1 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | |
| E4 | 2 | 0 | 0.8 | 0.4 | 0.0 | 1.0 | 1.0 | |
| E5 | 2 | 0 | 0.2 | 0.4 | 0.0 | 0.0 | 1.0 |
## Rows: 61
## Columns: 22
## $ id <dbl> 3777, 4874, 7435, 7506, 6667, 3699, 5956, 6911, 7720, 799…
## $ zona <chr> "Zona Sur", "Zona Sur", "Zona Sur", "Zona Sur", "Zona Sur…
## $ estrato <dbl> 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, …
## $ preciom <dbl> 430, 450, 450, 450, 460, 500, 500, 520, 550, 550, 560, 56…
## $ areaconst <dbl> 350, 300, 420, 450, 340, 330, 340, 450, 470, 400, 300, 30…
## $ parqueaderos <dbl> 4, 3, 8, 6, 3, 3, 4, 4, 3, 3, 3, 4, 3, 3, 6, 4, 4, 3, 3, …
## $ banios <dbl> 4, 5, 3, 4, 5, 6, 5, 5, 7, 6, 5, 4, 3, 5, 6, 5, 6, 5, 6, …
## $ habitaciones <dbl> 5, 5, 5, 5, 5, 6, 6, 5, 6, 6, 5, 5, 5, 8, 7, 7, 7, 6, 8, …
## $ tipo <chr> "Casa", "Casa", "Casa", "Casa", "Casa", "Casa", "Casa", "…
## $ barrio <chr> "el ingenio", "cuarto de legua", "el lido", "el lido", "n…
## $ longitud <dbl> -76.52836, -76.53353, -76.54973, -76.55000, -76.54400, -7…
## $ latitud <dbl> 3.38187, 3.40459, 3.42484, 3.42100, 3.41000, 3.38500, 3.4…
## $ Z1 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ Z2 <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ Z3 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ Z4 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ E0 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ E1 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ E2 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ E3 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ E4 <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ E5 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
Se realiza un analisis exploratorio para visualizar la distribucion y el comportamiento de las variables numericas del caso vivienda 1
Se realiza un analisis de correlaciones de las variables predictorias y la variable de interes evidenciando que existe una correlacion buena de la variable E5 (estrato 6) 0.473, lo que indica que esta puede ser un predictor adecuado para tener en cuenta en el modelo, adicionalmente se evidencia una correlacion alta entre los predictores banios y habitaciones 0.479 E4 y E5 con valor -1.
El predictor areaconst se distribuye sin un patron definido lo que podria ser un buen indicio para tener en cuenta en el modelo ya que puede haber correlacion con la variable de interes aunque no tan fuerte.
La variable zona tiene un patron de distribucion lo que podria indicar que no es un predictor adecuado para el modelo.
Se evidencia que se cuenta con opciones de inmuebles en los estratos sin embargo la proporcion es mayor en el estrato 5.
La variable habitaciones tiene una distribucion variada no presenta un patron definido aunque se puede ver que es del tipo ascendente, lo que podria ser un buen indicio a la hora de tener en cuenta para la construccion del modelo.
La variable banios tiene una distribucion variada no presenta un patron definido aunque se puede ver que es del tipo ascendente, lo que podria ser un buen indicio a la hora de tener en cuenta para la construccion del modelo.
En esta agrupacion se observa de manera mas detallada el comportamiento de los datos de cada variable.
Se realiza un mapa de calor de correlaciones para obtener informacion mas detallada y visualmente agradable al usuario final.
##
## Call:
## lm(formula = preciom ~ areaconst + banios + parqueaderos + habitaciones +
## E5, data = Base2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -165.909 -79.714 0.716 53.362 228.252
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 425.51269 93.95630 4.529 3.23e-05 ***
## areaconst -0.02839 0.13529 -0.210 0.8346
## banios 9.73874 13.34456 0.730 0.4686
## parqueaderos 5.31932 13.42033 0.396 0.6934
## habitaciones 24.01991 11.45569 2.097 0.0406 *
## E5 147.53647 31.90701 4.624 2.32e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 101.4 on 55 degrees of freedom
## Multiple R-squared: 0.3292, Adjusted R-squared: 0.2682
## F-statistic: 5.399 on 5 and 55 DF, p-value: 0.0004141
El modelo de regresión lineal múltiple estimado muestra resultados estadísticamente significativos para las variables E5 y habitaciones. Adicionalmente el R-cuadrado es (0.3292) la que sugiere una explicacion de la variable de respuesta del 32.92% los valores del estadistico F de 5.399 y p-value de 0.0004141 confirman que el modelo es adecuado para la explicacion de la variable de interes preciom.
El método “forward” muestra que la combinacion de variables predictoras que mejorara significativamente el modelo en comparación con el modelo constante (intercepto solo) son E5 y habitaciones.
##
## Call:
## lm(formula = preciom ~ E5 + habitaciones, data = Base2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -172.674 -77.996 -0.737 52.326 227.326
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 464.368 61.505 7.550 3.49e-10 ***
## E5 148.063 30.213 4.901 8.04e-06 ***
## habitaciones 27.661 9.509 2.909 0.00513 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 99.24 on 58 degrees of freedom
## Multiple R-squared: 0.3227, Adjusted R-squared: 0.2993
## F-statistic: 13.81 on 2 and 58 DF, p-value: 1.24e-05
El resumen realizado con la funcion forward muestra que los valores del intercepto, E5 y habitaciones son los valores con mayor significancia en el modelo de regresion, los valores Multiple R-squared: 0.3227, F-statistic: 13.81 y p-value: 1.24e-05 confirman la pertinencia del modelo con un nivel de explicacion del 32.27%.
##
## Call:
## lm(formula = preciom ~ areaconst + banios + habitaciones + parqueaderos +
## E5, data = Base2, subset = train_2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -178.488 -58.116 7.753 63.982 238.329
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 568.90797 151.14530 3.764 0.000727 ***
## areaconst -0.08606 0.25287 -0.340 0.735969
## banios -6.06003 18.67743 -0.324 0.747843
## habitaciones 27.21564 16.31096 1.669 0.105612
## parqueaderos -10.53405 16.95827 -0.621 0.539176
## E5 144.17604 38.94313 3.702 0.000859 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 98.79 on 30 degrees of freedom
## Multiple R-squared: 0.3565, Adjusted R-squared: 0.2493
## F-statistic: 3.325 on 5 and 30 DF, p-value: 0.01658
Se entrena un modelo para que tome muestras y realice el calculo de los coeficientes y los estadisticos de prueba, sin embargo el ajuste muestra que se pierde significancia en la variable habitaciones, por otro lado se observa una mejora en la explicacion del modelo alcanzando un 35.65%.
## [1] 12424.75
El análisis de validación cruzada dado que los valores de MSE están distribuidos alrededor del valor de referencia 1, y no hay un patrón evidente de sesgo o varianza extrema, esto sugiere que el modelo podría estar proporcionando predicciones razonablemente estables en diferentes conjuntos de datos de prueba.
Al aplicar el metodo Bootstrap se obtienen los rangos para los coeficientes de las variables lo que indica que los valores de estos coeficientes podrian estar en dicho rango con una alta probabilidad, lo que permite una mejor toma de desicion al seleccionar el modelo, por otro lado los datos no se muestran en forma de campana y puede deberse al tamaño de la muestra que para el caso de Hc es de aproximadamente 60 observaciones, sesgos en los datos, multicolinealidas en las variables o ruido en los datos.
##
## ORDINARY NONPARAMETRIC BOOTSTRAP
##
##
## Call:
## boot(data = Base2, statistic = fun_coeficientes_2, R = 2000)
##
##
## Bootstrap Statistics :
## original bias std. error
## t1* 379.79386899 0 0
## t2* -0.07357684 0 0
## t3* 15.55211583 0 0
## t4* 15.44373859 0 0
## t5* 21.82313368 0 0
## t6* 174.53811634 0 0
Al aplicar el estadistico Boots podemos observar que el bias es cero(0) lo que nos indica que no existe sesgo entre las estadisticas originales y las estadisticas bootstrap, sin embargo los errores estandar con valores cero(0) sugieren algun tipo de error ya que es poco probable que no exista variabilidad entre las estadisticas bootstrap en diferentes muestreos.
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 425.51269111 93.9562999 4.5288362 3.229117e-05
## areaconst -0.02838728 0.1352851 -0.2098330 8.345734e-01
## banios 9.73873640 13.3445621 0.7297906 4.686151e-01
## habitaciones 24.01990883 11.4556903 2.0967666 4.062656e-02
## parqueaderos 5.31931569 13.4203338 0.3963624 6.933713e-01
## E5 147.53646553 31.9070082 4.6239517 2.324504e-05
Despues de realizar el resumen del modelo ajustado de los coeficientes se evidencia que el intercepto y E5 son significativos.
| r.squared | adj.r.squared | sigma | statistic | p.value | df | logLik | AIC | BIC | deviance | df.residual | nobs |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.03 | 0.01 | 117.87 | 1.70 | 0.2 | 1 | -376.48 | 758.97 | 765.30 | 819756.6 | 59 | 61 |
| 0.23 | 0.21 | 105.59 | 8.82 | 0.0 | 2 | -369.25 | 746.50 | 754.94 | 646607.1 | 58 | 61 |
| 0.27 | 0.23 | 103.85 | 7.07 | 0.0 | 3 | -367.71 | 745.41 | 755.97 | 614715.9 | 57 | 61 |
| 0.28 | 0.22 | 104.45 | 5.33 | 0.0 | 4 | -367.52 | 747.03 | 759.70 | 610905.7 | 56 | 61 |
| 0.33 | 0.27 | 101.42 | 5.40 | 0.0 | 5 | -365.17 | 744.34 | 759.12 | 565687.4 | 55 | 61 |
La validacion realizada con la tabla comparativa de los diferentes modelos de regresion muestra que el modelo0_2 es el mas significativo para explicar la variable de interes, sin embargo no se descartan modelo1_2, modelo2_2 y modelo3_2.
##
## ==========================================
## Dependent variable:
## -----------------------------
## preciom
## modelo0
## ------------------------------------------
## areaconst -0.028
## (0.135)
##
## E5 147.536***
## (31.907)
##
## banios 9.739
## (13.345)
##
## parqueaderos 5.319
## (13.420)
##
## habitaciones 24.020*
## (11.456)
##
## Constant 425.513***
## (93.956)
##
## ------------------------------------------
## Observations 61
## R2 0.329
## Adjusted R2 0.268
## ==========================================
## Note: *p<0.05; **p<0.01; ***p<0.001
##
## ==========================================
## Dependent variable:
## -----------------------------
## preciom
## modelo1
## ------------------------------------------
## areaconst 0.016
## (0.138)
##
## E5 129.972***
## (31.708)
##
## banios 22.069
## (12.337)
##
## parqueaderos 8.128
## (13.752)
##
## Constant 481.756***
## (92.736)
##
## ------------------------------------------
## Observations 61
## R2 0.276
## Adjusted R2 0.224
## ==========================================
## Note: *p<0.05; **p<0.01; ***p<0.001
##
## ==========================================
## Dependent variable:
## -----------------------------
## preciom
## modelo2
## ------------------------------------------
## areaconst 0.049
## (0.125)
##
## E5 127.562***
## (31.264)
##
## banios 18.686
## (10.866)
##
## Constant 518.856***
## (67.868)
##
## ------------------------------------------
## Observations 61
## R2 0.271
## Adjusted R2 0.233
## ==========================================
## Note: *p<0.05; **p<0.01; ***p<0.001
##
## ==========================================
## Dependent variable:
## -----------------------------
## preciom
## modelo3
## ------------------------------------------
## areaconst 0.104
## (0.123)
##
## E5 125.147***
## (31.755)
##
## Constant 596.821***
## (51.348)
##
## ------------------------------------------
## Observations 61
## R2 0.233
## Adjusted R2 0.207
## ==========================================
## Note: *p<0.05; **p<0.01; ***p<0.001
##
## ==========================================
## Dependent variable:
## -----------------------------
## preciom
## modelo4
## ------------------------------------------
## areaconst 0.177
## (0.136)
##
## Constant 597.895***
## (57.323)
##
## ------------------------------------------
## Observations 61
## R2 0.028
## Adjusted R2 0.011
## ==========================================
## Note: *p<0.05; **p<0.01; ***p<0.001
Basado en los resultados del analisis se tuvo en cuenta los valores de referencia entregados por el modelo0 ($425 Millones) como valor minimo de referencia y el modelo3 ($596 Millones) como valor maximo con una variacion de +$50 Millones para realizar una sugerencia al cliente que cumpliera con los requerimientos planteados, de los cuales se extraen las 5 mejores ofertas de la tabla,cabe resaltar que para efectos practicos debe complementarse la recomendacion con una visita a los inmuebles para validar aspectos de confort que pueden ser relevantes en la toma de decicion final.
En el mapa se puede observar que solo 2 de las sugerencias se encuentran en el area correspondiente a la Zona Sur
# **Limpieza de Datos**
library(paqueteMODELOS)
data(vivienda)
vivienda$barrio <- gsub("á", "a", vivienda$barrio)
vivienda$barrio <- gsub("é", "e", vivienda$barrio)
vivienda$barrio <- gsub("í", "i", vivienda$barrio)
vivienda$barrio <- gsub("ó", "o", vivienda$barrio)
vivienda$barrio <- gsub("ú", "u", vivienda$barrio)
vivienda$barrio <- gsub("é", "e", vivienda$barrio)
vivienda$barrio <- gsub("√∫", "u", vivienda$barrio)
vivienda$barrio <- gsub("\\^\\[", "", vivienda$barrio)
vivienda$barrio <- gsub("ñ", "gn", vivienda$barrio)
library(dplyr)
library(stats4) # para la función mle
library(bbmle) # para la función mle2
# **Exploracion de Datos**
str(vivienda)
# **Verificacion de Faltantes**
library(mice)
library(mda)
result_faltantes=md.pattern(vivienda, rotate.names = TRUE )
# **Imputacion de Faltantes**
parqueaderos=data.frame(vivienda$parqueaderos)
mediana_Parqueaderos=median(vivienda$parqueaderos, na.rm = TRUE)
summary(vivienda$parqueaderos)
barplot(table(vivienda$parqueaderos),
main = "Seleccion de Imputacion Parqueaderos",
xlab = "Cantidad de Parqueaderos", ylab = "Frecuencia",
col = "lightblue",cex.axis = 0.6,cex.main = 0.8, cex.names = 0.6 )
abline(v = mediana_Parqueaderos, col = "red", lty = 2 )
legend("topright", legend = c("Mediana Parqueaderos"),
col = c("red"), lty = 2, bty = "n", cex = 0.8)
vivienda$parqueaderos[is.na(vivienda$parqueaderos)] <- mediana_Parqueaderos
vivienda$parqueaderos <- as.numeric(vivienda$parqueaderos)
vivienda= select(vivienda, -piso )
vivienda <- na.omit(vivienda)
str(vivienda)
result_faltantes=md.pattern(vivienda, rotate.names = TRUE )
# **Creacion de Variables Binarias**
vivienda$Z1 <- as.numeric(vivienda$zona== "Zona Norte")
vivienda$Z2 <- as.numeric(vivienda$zona== "Zona Sur")
vivienda$Z3 <- as.numeric(vivienda$zona == "Zona Oriente")
vivienda$Z4 <- as.numeric(vivienda$zona == "Zona Occidente")
vivienda$E0 <- as.numeric(vivienda$estrato== "1" )
vivienda$E1 <- as.numeric(vivienda$estrato== "2" )
vivienda$E2 <- as.numeric(vivienda$estrato== "3" )
vivienda$E3 <- as.numeric(vivienda$estrato== "4" )
vivienda$E4 <- as.numeric(vivienda$estrato== "5" )
vivienda$E5 <- as.numeric(vivienda$estrato== "6" )
summary(vivienda)
# **Filtro Vivienda 1**
library(dplyr)
Hc=subset(vivienda,
(vivienda$tipo=="Casa" &
vivienda$Z1== 1 & vivienda$preciom<= 350 &
vivienda$habitaciones>= 4 & vivienda$banios>= 2 &
vivienda$areaconst>=200 & vivienda$estrato!= "3"))
Base1 <- arrange(Hc, preciom)
Base1
Base11=head(Base1, 3)
Base11
library(sf)
# Carga el archivo Shapefile de la zona Norte
limites_zona_norte <- st_read("C:/Users/W10/Desktop/Maestria/Modelos
Est Toma Decisiones/ZONA_NORTE/
ZONA_NORTE_POLIGONO_wgs.shx")
limites_zona_SUR <- st_read("C:/Users/W10/Desktop/Maestria/Modelos
Est Toma Decisiones/ZONA_SUR_POLIGONO_wgs_f.shx")
library(leaflet)
library(sp)
marcadores= Base1
mapa <- leaflet(data = marcadores) %>%
addTiles() # Agregar un fondo de mapa (puedes elegir otro estilo)
# Convertir los límites de la zona Norte a un objeto SpatialPolygonsDataFrame
limites_zona_norte <- st_as_sf(limites_zona_norte, "SpatialPolygonsDataFrame")
limites_zona_SUR <- st_as_sf(limites_zona_SUR, "SpatialPolygonsDataFrame")
# Agregar los polígonos de la zona Norte al mapa
mapa <- mapa %>%
addPolygons(
data = limites_zona_norte, # Objeto SpatialPolygonsDataFrame con los polígonos
fillColor = "green", # Color de relleno
fillOpacity = 0.2, # Opacidad del relleno
color = "red", # Color del borde
weight = 2, # Grosor del borde
popup = "Zona Norte" # Información emergente para la zona Norte
)
mapa <- mapa %>%
addPolygons(
data = limites_zona_SUR, # Objeto SpatialPolygonsDataFrame con los polígonos
fillColor = "purple", # Color de relleno
fillOpacity = 0.2, # Opacidad del relleno
color = "green", # Color del borde
weight = 2, # Grosor del borde
popup = "Zona Norte" # Información emergente para la zona Norte
)
# Agregar capa de control de capas para alternar entre marcadores y zonas
mapa <- mapa %>%
addLayersControl(
baseGroups = c("Marcadores"), # Nombre de la capa de marcadores
overlayGroups = c("Zona Norte", "Zona Sur"),# Nombre de la capa de zona
options = layersControlOptions(collapsed = FALSE) # Control expandido por defecto
)
# Mostrar el mapa
mapa
# **Georeferenciacion**
mapa <- mapa %>%
addMarkers(
lat = ~latitud, # Nombre de la columna de latitud en tu conjunto de datos
lng = ~longitud, # Nombre de la columna de longitud en tu conjunto de datos
popup = ~paste("Código:", as.character(id), "<br>Tipo:", tipo,
"<br>Precio:", preciom) # Nombre de la columna con el nombre del inmueble
)
mapa
library(htmlwidgets)
saveWidget(mapa, file = "mapa_inmuebles.html")
# **Analisis Exploratorio vivienda 1**
modelsummary::datasummary_skim(Hc)
glimpse(Hc)
library(GGally)
columnas_analisis = Hc[,c(4,5,7,8,13,20:22)]
ggpairs(columnas_analisis, title = " ") +
theme(text = element_text(size = 8)) # Ajusta el tamaño de la fuente
ggsave("tabla_correlaciones.png",
width = 10, height = 10) # Guarda la gráfica como una imagen
# **Analisis de Correlaciones Individual**
library(plotly)
# Crear gráfico de dispersión interactivo para Área Construida vs. Precio
scatter_area_precio <- plot_ly(data = Hc, x = ~areaconst,
y = ~preciom, mode = "markers") %>%
add_markers(text = ~paste("Zona: ", zona)) %>%
layout(title = "Relación entre Área Construida y Precio",
xaxis = list(title = "Área Construida"),
yaxis = list(title = "Precio"))
scatter_area_precio
library(plotly)
# Crear gráfico de dispersión interactivo para Zona vs. Precio
scatter_Zona_precio <- plot_ly(data = Hc, x = ~zona,
y = ~preciom, mode = "markers") %>%
add_markers(text = ~paste("Zona: ", zona)) %>%
layout(title = "Relación entre Zona y Precio",
xaxis = list(title = "Zona"),
yaxis = list(title = "Precio"))
scatter_Zona_precio
library(plotly)
# Crear gráfico de dispersión interactivo para Estrato vs. Precio
scatter_estrato_precio <- plot_ly(data = Hc, x = ~estrato,
y = ~preciom, mode = "markers") %>%
add_markers(text = ~paste("Estrato: ", estrato)) %>%
layout(title = "Relación entre Estrato y Precio",
xaxis = list(title = "Estrato 5"),
yaxis = list(title = "Precio"))
scatter_estrato_precio
library(plotly)
# Crear gráfico de dispersión interactivo para Habitaciones vs. Precio
scatter_habitaciones_precio <- plot_ly(data = Hc,
x = ~habitaciones,
y = ~preciom, mode = "markers") %>%
add_markers(text = ~paste("Habitaciones: ", habitaciones)) %>%
layout(title = "Relación entre Habitaciones y Precio",
xaxis = list(title = "Habitaciones"),
yaxis = list(title = "Precio"))
scatter_habitaciones_precio
library(plotly)
# Crear gráfico de dispersión interactivo para Banios vs. Precio
scatter_banios_precio <- plot_ly(data = Hc,
x = ~banios, y = ~preciom,
mode = "markers") %>%
add_markers(text = ~paste("Banios: ", banios)) %>%
layout(title = "Relación entre Banios y Precio",
xaxis = list(title = "Banios"),
yaxis = list(title = "Precio"))
scatter_banios_precio
subplot <- subplot(scatter_area_precio,
scatter_Zona_precio,scatter_estrato_precio,
scatter_habitaciones_precio,
scatter_banios_precio, nrows = 3) # Agregar otros gráficos según sea necesario
# Mostrar el gráfico interactivo
subplot
library(ggplot2)
library(plotly)
# Seleccionar las variables de interés (incluyendo la variable objetivo, preciom)
columnas_analisis <- Hc[, c("preciom",
"areaconst", "E3","E4", "banios",
"habitaciones", "Z1")]
# Calcular la matriz de correlación
correlation_matrix <- cor(columnas_analisis, use = "complete.obs")
# Crear un gráfico de mapa de calor interactivo
plot <- plot_ly(
z = correlation_matrix,
x = colnames(correlation_matrix),
y = colnames(correlation_matrix),
type = "heatmap",
colorscale = "Viridis"
)
# Personalizar el diseño del mapa de calor
plot <- plot %>% layout(
title = "Mapa de Calor de Correlación",
xaxis = list(title = ""),
yaxis = list(title = ""),
margin = list(l = 100, r = 100, t = 100, b = 100)
)
plot
vivienda_lm <- lm(preciom ~ areaconst + banios + habitaciones + E4, data = Hc)
summary(vivienda_lm)
modelo_b0<- lm(preciom ~ 1, data=Hc)
modelo_all<- lm(preciom ~ areaconst + banios + habitaciones + E4, data = Hc)
forward <- step(modelo_b0, direction='forward',
scope=formula(modelo_all), trace=0)
forward$anova
summary(forward)
set.seed(1)
train <- sample(x = 1:39, 30*0.6)
modelo_train <- lm(preciom ~ areaconst + banios +
habitaciones + E4, data = Hc, subset = train)
summary(modelo_train)
predicciones <- predict(object = modelo_train, newdata = Hc[-train, ])
error <- mean((Hc$preciom[-train] - predicciones)^2)
error
library(ggplot2)
library(gridExtra)
library(dplyr)
cv_MSE <- rep(NA,2000)
for (i in 1:500) {
train <- sample(x = 1:39, 30*0.6)
modelo_train <- lm(preciom ~ areaconst + banios + habitaciones +
E4, data = Hc, subset = train)
predicciones <- predict(object = modelo_train, newdata = Hc[-train, ])
cv_MSE[i] <- mean((Hc$preciom[-train] - predicciones)^2)
}
p1 <- ggplot(data = data.frame(cv_MSE = cv_MSE), aes(x = 1, y = cv_MSE)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter(colour = c("#034A94"), width = 0.1) +
coord_flip() +
labs(title = "Distribución del error de validación simple") +
theme_bw() +
theme(axis.title.x = element_blank())
p1
library(boot)
fun_coeficientes <- function(data, index){
return(coef(lm(preciom ~ areaconst + banios + habitaciones +
E4, data = Hc, subset = train)))
}
beta_0 <- rep(NA,500)
beta_1 <- rep(NA,500)
beta_2 <- rep(NA,500)
beta_3 <- rep(NA,500)
beta_4 <- rep(NA,500)
for(i in 1:500) {
coeficientes <- fun_coeficientes(data = Hc,
index = sample(1:20, 20, replace = TRUE))
beta_0[i] <- coeficientes[1]
beta_1[i] <- coeficientes[2]
beta_2[i] <- coeficientes[3]
beta_3[i] <- coeficientes[4]
beta_4[i] <- coeficientes[5]
}
p0 <- ggplot(data = data.frame(beta_0 = beta_0), aes(beta_0)) +
geom_histogram(colour = "firebrick3") +
theme_bw()
p1 <- ggplot(data = data.frame(beta_1 = beta_1), aes(beta_1)) +
geom_histogram(colour = "firebrick3") +
theme_bw()
p2 <- ggplot(data = data.frame(beta_2 = beta_2), aes(beta_2)) +
geom_histogram(colour = "firebrick3") +
theme_bw()
p3 <- ggplot(data = data.frame(beta_3 = beta_3), aes(beta_3)) +
geom_histogram(colour = "firebrick3") +
theme_bw()
p4 <- ggplot(data = data.frame(beta_4 = beta_4), aes(beta_4)) +
geom_histogram(colour = "firebrick3") +
theme_bw()
grid.arrange(p0,p1,p2,p3,p4, ncol = 2, nrow=4,
top = "Bootstrap distribution de los coeficientes")
library(boot)
boot(data = Hc, statistic = fun_coeficientes, R = 2000)
summary(lm(preciom ~ areaconst + banios + habitaciones +
E4, data = Hc))$coef
library(knitr)
modelo4 <- lm(preciom ~ areaconst , data = Hc)
modelo3 <- lm(preciom ~ areaconst + E4 , data = Hc)
modelo2 <- lm(preciom ~ areaconst + banios + E4, data = Hc)
modelo1 <- lm(preciom ~ areaconst + banios + habitaciones, data = Hc)
modelo0 <- lm(preciom ~ areaconst + banios + habitaciones + E4, data = Hc)
g0 <- glance(modelo0)
g1 <- glance(modelo1)
g2 <- glance(modelo2)
g3 <- glance(modelo3)
g4 <- glance(modelo4)
kable(rbind(g0, g1, g2, g3, g4), digits = 2)
library(stargazer)
stargazer(modelo0,modelo1, modelo2, modelo3, modelo4, type = "text",
omit.stat=c("ser","f"),
model.numbers = FALSE, object.names = TRUE,
star.cutoffs = c(0.05, 0.01, 0.001))
#Sugerencias Para Cliente
library(dplyr)
Base3=subset(vivienda,(vivienda$tipo=="Casa" & vivienda$Z1== 1 &
vivienda$preciom<= 350 & vivienda$habitaciones>= 4 &
vivienda$banios>= 2 & vivienda$areaconst>=200 &
vivienda$estrato!= "3"))
Base3 <- arrange(Base3, preciom)
Base3
Base31=head(Base3, 5)
Base31
library(sf)
# Carga el archivo Shapefile de la zona Norte
limites_zona_norte <- st_read("C:/Users/W10/Desktop/
Maestria/Modelos Est Toma Decisiones/
ZONA_NORTE/ZONA_NORTE_POLIGONO_wgs.shx")
limites_zona_SUR <- st_read("C:/Users/W10/Desktop/
Maestria/Modelos Est Toma Decisiones/
ZONA_SUR_POLIGONO_wgs_f.shx")
library(leaflet)
library(sp)
marcadores3= Base31
mapa3 <- leaflet(data = marcadores3) %>%
addTiles() # Agregar un fondo de mapa (puedes elegir otro estilo)
# Convertir los límites de la zona Norte a un objeto SpatialPolygonsDataFrame
limites_zona_norte <- st_as_sf(limites_zona_norte, "SpatialPolygonsDataFrame")
limites_zona_SUR <- st_as_sf(limites_zona_SUR, "SpatialPolygonsDataFrame")
# Agregar los polígonos de la zona Norte al mapa
mapa3 <- mapa3 %>%
addPolygons(
data = limites_zona_norte, # Objeto SpatialPolygonsDataFrame con los polígonos
fillColor = "green", # Color de relleno
fillOpacity = 0.2, # Opacidad del relleno
color = "red", # Color del borde
weight = 2, # Grosor del borde
popup = "Zona Norte" # Información emergente para la zona Norte
)
mapa3 <- mapa3 %>%
addPolygons(
data = limites_zona_SUR, # Objeto SpatialPolygonsDataFrame con los polígonos
fillColor = "purple", # Color de relleno
fillOpacity = 0.2, # Opacidad del relleno
color = "green", # Color del borde
weight = 2, # Grosor del borde
popup = "Zona Norte" # Información emergente para la zona Norte
)
# Agregar capa de control de capas para alternar entre marcadores y zonas
mapa3 <- mapa3 %>%
addLayersControl(
baseGroups = c("Marcadores"), # Nombre de la capa de marcadores
overlayGroups = c("Zona Norte", "Zona Sur"),# Nombre de la capa de zona
options = layersControlOptions(collapsed = FALSE) # Control expandido por defecto
)
# Mostrar el mapa
mapa3
# **Georeferenciacion de Sugerencia al Cliente**
mapa3 <- mapa3 %>%
addMarkers(
lat = ~latitud, # Nombre de la columna de latitud en tu conjunto de datos
lng = ~longitud, # Nombre de la columna de longitud en tu conjunto de datos
popup = ~paste("Código:", as.character(id), "<br>Tipo:", tipo,
"<br>Precio:", preciom) # Nombre de la columna con el nombre del inmueble
)
mapa3
library(htmlwidgets)
saveWidget(mapa3, file = "mapa_inmuebles_2.html")
# **Filtro vivienda 2**
Base2=subset(vivienda,(vivienda$tipo=="Casa" & vivienda$Z2== 1 &
vivienda$preciom<= 850 & vivienda$habitaciones>= 5 &
vivienda$banios>= 3 & vivienda$areaconst>=300 &
vivienda$estrato!= "3" & vivienda$estrato!= "4" &
vivienda$parqueaderos>= 3))
Base2 <- arrange(Base2, preciom)
Base2
Base21=head(Base2, 3)
Base21
library(sf)
# Carga el archivo Shapefile de la zona Norte
limites_zona_norte <- st_read("C:/Users/W10/Desktop/Maestria/
Modelos Est Toma Decisiones/ZONA_NORTE/
ZONA_NORTE_POLIGONO_wgs.shx")
limites_zona_SUR <- st_read("C:/Users/W10/Desktop/Maestria/
Modelos Est Toma Decisiones/
ZONA_SUR_POLIGONO_wgs_f.shx")
library(leaflet)
library(sp)
marcadores2= Base2
mapa2 <- leaflet(data = marcadores2) %>%
addTiles() # Agregar un fondo de mapa (puedes elegir otro estilo)
# Convertir los límites de la zona Norte a un objeto SpatialPolygonsDataFrame
limites_zona_norte <- st_as_sf(limites_zona_norte, "SpatialPolygonsDataFrame")
limites_zona_SUR <- st_as_sf(limites_zona_SUR, "SpatialPolygonsDataFrame")
# Agregar los polígonos de la zona Norte al mapa
mapa2 <- mapa2 %>%
addPolygons(
data = limites_zona_norte, # Objeto SpatialPolygonsDataFrame con los polígonos
fillColor = "green", # Color de relleno
fillOpacity = 0.2, # Opacidad del relleno
color = "red", # Color del borde
weight = 2, # Grosor del borde
popup = "Zona Norte" # Información emergente para la zona Norte
)
mapa2 <- mapa2 %>%
addPolygons(
data = limites_zona_SUR, # Objeto SpatialPolygonsDataFrame con los polígonos
fillColor = "purple", # Color de relleno
fillOpacity = 0.2, # Opacidad del relleno
color = "green", # Color del borde
weight = 2, # Grosor del borde
popup = "Zona Norte" # Información emergente para la zona Norte
)
# Agregar capa de control de capas para alternar entre marcadores y zonas
mapa2 <- mapa2 %>%
addLayersControl(
baseGroups = c("Marcadores"), # Nombre de la capa de marcadores
overlayGroups = c("Zona Norte", "Zona Sur"),# Nombre de la capa de zona
options = layersControlOptions(collapsed = FALSE) # Control expandido por defecto
)
# Mostrar el mapa
mapa2
# **Georeferenciacion**
fig.height= 10, fig.width= 12}
mapa2 <- mapa2 %>%
addMarkers(
lat = ~latitud, # Nombre de la columna de latitud en tu conjunto de datos
lng = ~longitud, # Nombre de la columna de longitud en tu conjunto de datos
popup = ~paste("Código:", as.character(id), "<br>Tipo:", tipo,
"<br>Precio:", preciom) # Nombre de la columna con el nombre del inmueble
)
mapa2
library(htmlwidgets)
saveWidget(mapa2, file = "mapa_inmuebles_2.html")
# **Analisis Exploratorio vivienda 2**
modelsummary::datasummary_skim(Base2)
glimpse(Base2)
library(GGally)
columnas_analisis2 = Base2[,c(4,5,6,7,8,14,21:22)]
ggpairs(columnas_analisis2, title = " ") +
theme(text = element_text(size = 8)) # Ajusta el tamaño de la fuente
ggsave("tabla_correlaciones_2.png",
width = 10, height = 10) # Guarda la gráfica como una imagen
# **Analisis de Correlaciones Individual Vivienda 2**
library(plotly)
# Crear gráfico de dispersión interactivo para Área Construida vs. Precio
scatter_area_precio_2 <- plot_ly(data = Base2, x = ~areaconst,
y = ~preciom, mode = "markers") %>%
add_markers(text = ~paste("Zona: ", zona)) %>%
layout(title = "Relación entre Área Construida y Precio",
xaxis = list(title = "Área Construida"),
yaxis = list(title = "Precio"))
scatter_area_precio_2
library(plotly)
# Crear gráfico de dispersión interactivo para Zona vs. Precio
scatter_Zona_precio_2 <- plot_ly(data = Base2, x = ~zona,
y = ~preciom, mode = "markers") %>%
add_markers(text = ~paste("Zona: ", zona)) %>%
layout(title = "Relación entre Zona y Precio",
xaxis = list(title = "Zona"),
yaxis = list(title = "Precio"))
scatter_Zona_precio_2
library(plotly)
# Crear gráfico de dispersión interactivo para Estrato vs. Precio
scatter_estrato_precio_2 <- plot_ly(data = Base2, x = ~estrato,
y = ~preciom, mode = "markers") %>%
add_markers(text = ~paste("Estrato: ", estrato)) %>%
layout(title = "Relación entre Estrato y Precio",
xaxis = list(title = "Estrato"),
yaxis = list(title = "Precio"))
scatter_estrato_precio_2
library(plotly)
# Crear gráfico de dispersión interactivo para Habitaciones vs. Precio
scatter_habitaciones_precio_2 <- plot_ly(data = Base2, x = ~habitaciones,
y = ~preciom, mode = "markers") %>%
add_markers(text = ~paste("Habitaciones: ", habitaciones)) %>%
layout(title = "Relación entre Habitaciones y Precio",
xaxis = list(title = "Habitaciones"),
yaxis = list(title = "Precio"))
scatter_habitaciones_precio_2
library(plotly)
# Crear gráfico de dispersión interactivo para Banios vs. Precio
scatter_banios_precio_2 <- plot_ly(data = Base2, x = ~banios, y = ~preciom,
mode = "markers") %>%
add_markers(text = ~paste("Banios: ", banios)) %>%
layout(title = "Relación entre Banios y Precio",
xaxis = list(title = "Banios"),
yaxis = list(title = "Precio"))
scatter_banios_precio_2
subplot_2 <- subplot(scatter_area_precio_2, scatter_Zona_precio_2,
scatter_estrato_precio_2,scatter_habitaciones_precio_2,
scatter_banios_precio_2, nrows = 3) # Agregar otros gráficos según sea necesario
# Mostrar el gráfico interactivo
subplot_2
library(ggplot2)
library(plotly)
# Seleccionar las variables de interés (incluyendo la variable objetivo, preciom)
columnas_analisis_2 <- Base2[, c("preciom", "areaconst","parqueaderos",
"E4", "E5", "banios", "habitaciones", "Z2")]
# Calcular la matriz de correlación
correlation_matrix_2 <- cor(columnas_analisis_2, use = "complete.obs")
# Crear un gráfico de mapa de calor interactivo
plot_2 <- plot_ly(
z = correlation_matrix_2,
x = colnames(correlation_matrix_2),
y = colnames(correlation_matrix_2),
type = "heatmap",
colorscale = "Viridis"
)
# Personalizar el diseño del mapa de calor
plot <- plot %>% layout(
title = "Mapa de Calor de Correlación",
xaxis = list(title = ""),
yaxis = list(title = ""),
margin = list(l = 100, r = 100, t = 100, b = 100)
)
plot_2
vivienda_lm_2 <- lm(preciom ~ areaconst + banios + parqueaderos +
habitaciones + E5, data = Base2)
summary(vivienda_lm_2)
modelo_b0_2<- lm(preciom ~ 1, data=Base2)
modelo_all_2<- lm(preciom ~ areaconst + banios + parqueaderos +
habitaciones + E5, data = Base2)
forward_2 <- step(modelo_b0_2, direction='forward',
scope=formula(modelo_all_2), trace=0)
forward_2$anova
summary(forward_2)
set.seed(1)
train_2 <- sample(x = 1:60, 60*0.6)
modelo_train_2 <- lm(preciom ~ areaconst + banios + habitaciones +
parqueaderos + E5, data = Base2, subset = train_2)
summary(modelo_train_2)
predicciones_2 <- predict(object = modelo_train_2, newdata = Base2[-train_2, ])
error_2 <- mean((Base2$preciom[-train_2] - predicciones_2)^2)
error_2
library(ggplot2)
library(gridExtra)
library(dplyr)
cv_MSE_2 <- rep(NA,4000)
for (i in 1:1000) {
train_2 <- sample(x = 1:60, 60*0.6)
modelo_train_2 <- lm(preciom ~ areaconst + banios + habitaciones +
parqueaderos + E5, data = Base2, subset = train_2)
predicciones_2 <- predict(object = modelo_train_2,
newdata = Base2[-train_2, ])
cv_MSE_2[i] <- mean((Base2$preciom[-train_2] - predicciones_2)^2)
}
j1 <- ggplot(data = data.frame(cv_MSE_2 = cv_MSE_2), aes(x = 1, y = cv_MSE_2)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter(colour = c("#034A94"), width = 0.1) +
coord_flip() +
labs(title = "Distribución del error de validación simple") +
theme_bw() +
theme(axis.title.x = element_blank())
j1
library(boot)
fun_coeficientes_2 <- function(data, index){
return(coef(lm(preciom ~ areaconst + banios + habitaciones +
parqueaderos + E5, data = Base2, subset = train_2)))
}
beta_0_2 <- rep(NA,1000)
beta_1_2 <- rep(NA,1000)
beta_2_2 <- rep(NA,1000)
beta_3_2 <- rep(NA,1000)
beta_4_2 <- rep(NA,1000)
beta_5_2 <- rep(NA,1000)
for(i in 1:1000) {
coeficientes_2 <- fun_coeficientes_2(data = Base2,
index = sample(1:50, 50, replace = TRUE))
beta_0_2[i] <- coeficientes_2[1]
beta_1_2[i] <- coeficientes_2[2]
beta_2_2[i] <- coeficientes_2[3]
beta_3_2[i] <- coeficientes_2[4]
beta_4_2[i] <- coeficientes_2[5]
beta_5_2[i] <- coeficientes_2[6]
}
i0 <- ggplot(data = data.frame(beta_0_2 = beta_0_2), aes(beta_0_2)) +
geom_histogram(colour = "firebrick3") +
theme_bw()
i1 <- ggplot(data = data.frame(beta_1_2 = beta_1_2), aes(beta_1_2)) +
geom_histogram(colour = "firebrick3") +
theme_bw()
i2 <- ggplot(data = data.frame(beta_2_2 = beta_2_2), aes(beta_2_2)) +
geom_histogram(colour = "firebrick3") +
theme_bw()
i3 <- ggplot(data = data.frame(beta_3_2 = beta_3_2), aes(beta_3_2)) +
geom_histogram(colour = "firebrick3") +
theme_bw()
i4 <- ggplot(data = data.frame(beta_4_2 = beta_4_2), aes(beta_4_2)) +
geom_histogram(colour = "firebrick3") +
theme_bw()
i5 <- ggplot(data = data.frame(beta_5_2 = beta_5_2), aes(beta_5_2)) +
geom_histogram(colour = "firebrick3") +
theme_bw()
grid.arrange(i0,i1,i2,i3,i4,i5, ncol = 2, nrow=4,
top = "Bootstrap distribution de los coeficientes")
library(boot)
boot(data = Base2, statistic = fun_coeficientes_2, R = 2000)
summary(lm(preciom ~ areaconst + banios + habitaciones + parqueaderos +
E5, data = Base2))$coef
library(knitr)
modelo4_2 <- lm(preciom ~ areaconst , data = Base2)
modelo3_2 <- lm(preciom ~ areaconst + E5 , data = Base2)
modelo2_2 <- lm(preciom ~ areaconst + E5 + banios, data = Base2)
modelo1_2 <- lm(preciom ~ areaconst+ E5 + banios + parqueaderos, data = Base2)
modelo0_2 <- lm(preciom ~ areaconst + E5 + banios + parqueaderos+
habitaciones , data = Base2)
k0 <- glance(modelo4_2)
k1 <- glance(modelo3_2)
k2 <- glance(modelo2_2)
k3 <- glance(modelo1_2)
k4 <- glance(modelo0_2)
kable(rbind(k0, k1, k2, k3, k4), digits = 2)
library(stargazer)
stargazer(modelo0_2, type = "text",
omit.stat=c("ser","f"),
model.numbers = FALSE, object.names = TRUE,
star.cutoffs = c(0.05, 0.01, 0.001))
stargazer(modelo1_2, type = "text",
omit.stat=c("ser","f"),
model.numbers = FALSE, object.names = TRUE,
star.cutoffs = c(0.05, 0.01, 0.001))
stargazer(modelo2_2, type = "text",
omit.stat=c("ser","f"),
model.numbers = FALSE, object.names = TRUE,
star.cutoffs = c(0.05, 0.01, 0.001))
stargazer(modelo3_2, type = "text",
omit.stat=c("ser","f"),
model.numbers = FALSE, object.names = TRUE,
star.cutoffs = c(0.05, 0.01, 0.001))
stargazer(modelo4_2, type = "text",
omit.stat=c("ser","f"),
model.numbers = FALSE, object.names = TRUE,
star.cutoffs = c(0.05, 0.01, 0.001))
## Sugerencias Para Cliente
Base4=subset(vivienda,(vivienda$tipo=="Casa" & vivienda$Z2== 1 &
vivienda$preciom<= 650 & vivienda$habitaciones>= 5 &
vivienda$banios>= 3 & vivienda$areaconst>=300 &
vivienda$estrato!= "3" & vivienda$estrato!= "4" &
vivienda$parqueaderos>= 3))
Base4 <- arrange(Base4, preciom)
Base4
Base41=head(Base4, 5)
Base41
library(sf)
# Carga el archivo Shapefile de la zona Norte
limites_zona_norte <- st_read("C:/Users/W10/Desktop/Maestria/
Modelos Est Toma Decisiones/ZONA_NORTE/
ZONA_NORTE_POLIGONO_wgs.shx")
limites_zona_SUR <- st_read("C:/Users/W10/Desktop/Maestria/
Modelos Est Toma Decisiones/
ZONA_SUR_POLIGONO_wgs_f.shx")
library(leaflet)
library(sp)
marcadores4= Base41
mapa4 <- leaflet(data = marcadores4) %>%
addTiles() # Agregar un fondo de mapa (puedes elegir otro estilo)
# Convertir los límites de la zona Norte a un objeto SpatialPolygonsDataFrame
limites_zona_norte <- st_as_sf(limites_zona_norte, "SpatialPolygonsDataFrame")
limites_zona_SUR <- st_as_sf(limites_zona_SUR, "SpatialPolygonsDataFrame")
# Agregar los polígonos de la zona Norte al mapa
mapa4 <- mapa4 %>%
addPolygons(
data = limites_zona_norte, # Objeto SpatialPolygonsDataFrame con los polígonos
fillColor = "green", # Color de relleno
fillOpacity = 0.2, # Opacidad del relleno
color = "red", # Color del borde
weight = 2, # Grosor del borde
popup = "Zona Norte" # Información emergente para la zona Norte
)
mapa4 <- mapa4 %>%
addPolygons(
data = limites_zona_SUR, # Objeto SpatialPolygonsDataFrame con los polígonos
fillColor = "purple", # Color de relleno
fillOpacity = 0.2, # Opacidad del relleno
color = "green", # Color del borde
weight = 2, # Grosor del borde
popup = "Zona Norte" # Información emergente para la zona Norte
)
# Agregar capa de control de capas para alternar entre marcadores y zonas
mapa4 <- mapa4 %>%
addLayersControl(
baseGroups = c("Marcadores"), # Nombre de la capa de marcadores
overlayGroups = c("Zona Norte", "Zona Sur"),# Nombre de la capa de zona
options = layersControlOptions(collapsed = FALSE) # Control expandido por defecto
)
# Mostrar el mapa
mapa4
# Georeferenciacion de Sugerencia al Cliente
fig.height= 10, fig.width= 12}
mapa4 <- mapa4 %>%
addMarkers(
lat = ~latitud, # Nombre de la columna de latitud en tu conjunto de datos
lng = ~longitud, # Nombre de la columna de longitud en tu conjunto de datos
popup = ~paste("Código:", as.character(id), "<br>Tipo:", tipo,
"<br>Precio:", preciom) # Nombre de la columna con el nombre del inmueble
)
mapa4
library(htmlwidgets)
saveWidget(mapa4, file = "mapa_inmuebles_2.html")