Este análisis tiene como objetivo evaluar la viabilidad de dos solicitudes de compra de vivienda en la ciudad de Cali, considerando criterios específicos de tipo de propiedad, ubicación, características y presupuesto. Se aplicarán técnicas de modelado estadístico para estimar precios, identificar ofertas viables y proporcionar recomendaciones basadas en datos. Para ello, se utilizarán herramientas de análisis exploratorio, regresión lineal múltiple y visualización geoespacial.
Maria comenzó como agente de bienes raíces en Cali hace 10 años. Después de laborar dos años para una empresa nacional, se traslado a Bogotá y trabajó para otra agencia de bienes raíces. Sus amigos y familiares la convencieron de que con su experiencia y conocimientos del negocio debía abrir su propia agencia. Terminó por adquirir la licencia de intermediario y al poco tiempo fundó su propia compañía, C&A (Casas y Apartamentos) en Cali. Santiago y Lina, dos vendedores de la empresa anterior aceptaron trabajar en la nueva compaña. En la actualidad ocho agentes de bienes raíces colaboran con ella en C&A.
Actualmente las ventas de bienes raíces en Cali se han visto disminuidas de manera significativa en lo corrido del año. Durante este periodo muchas instituciones bancarias de ahorro y vivienda están prestando grandes sumas de dinero para la industria y la construcción comercial y residencial. Cuando el efecto producto de las tensiones políticas y sociales disminuya, se espera que la actividad económica de este sector se reactive.
Hace dos días, María recibió una carta solicitando asesoría para la compra de dos viviendas por parte de una compañía internacional que desea ubicar a dos de sus empleados con sus familias en la ciudad. Las solicitudes incluyen las siguientes condiciones:
| Características | Vivienda.1 | Vivienda.2 |
|---|---|---|
| Tipo | Casa | Apartamento |
| Área construida | 200 m² | 300 m² |
| Parqueaderos | 1 | 3 |
| Baños | 2 | 3 |
| Habitaciones | 4 | 5 |
| Estrato | 4 o 5 | 5 o 6 |
| Zona | Norte | Sur |
| Crédito preaprobado | 350 millones | 850 millones |
Ayude a María a responder la solicitud, mediante técnicas modelación que usted conoce. Ella requiere le envíe un informe ejecutivo donde analice los dos casos y sus recomendaciones (Informe). Como soporte del informe debe anexar las estimaciones, validaciones y comparación de modelos requeridos (Anexos) .
La base de datos proporcionada contiene en total 8322 registros y 13 variables descritas a continuación:
El dataset contiene información sobre viviendas con las siguientes variables:
Las variables de la base de datos se clasifican según su naturaleza:
Variables Categóricas
Variables Numéricas Continuas
Variables Numéricas Discretas
El siguiente resumen estadístico describe las características principales del conjunto de datos. Aquí algunos puntos clave:
preciom (en millones de COP): Mínimo: 58M COP Media: 433.9M COP Mediana: 330M COP Máximo: 1999M COP Distribución asimétrica, con precios más altos en algunos casos. 3 valores faltantes. areaconst (área construida en m²):
Mínimo: 30 m² Media: 174.9 m² Mediana: 123 m² Máximo: 1745 m² Distribución amplia, con algunas propiedades significativamente grandes. 2 valores faltantes.
banios (cantidad de baños):
habitaciones:
## id zona piso estrato
## Min. : 1 Length:8322 Length:8322 Min. :3.000
## 1st Qu.:2080 Class :character Class :character 1st Qu.:4.000
## Median :4160 Mode :character Mode :character Median :5.000
## Mean :4160 Mean :4.634
## 3rd Qu.:6240 3rd Qu.:5.000
## Max. :8319 Max. :6.000
## NA's :3 NA's :3
## preciom areaconst parqueaderos banios
## Min. : 58.0 Min. : 30.0 Min. : 1.000 Min. : 0.000
## 1st Qu.: 220.0 1st Qu.: 80.0 1st Qu.: 1.000 1st Qu.: 2.000
## Median : 330.0 Median : 123.0 Median : 2.000 Median : 3.000
## Mean : 433.9 Mean : 174.9 Mean : 1.835 Mean : 3.111
## 3rd Qu.: 540.0 3rd Qu.: 229.0 3rd Qu.: 2.000 3rd Qu.: 4.000
## Max. :1999.0 Max. :1745.0 Max. :10.000 Max. :10.000
## NA's :2 NA's :3 NA's :1605 NA's :3
## habitaciones tipo barrio longitud
## Min. : 0.000 Length:8322 Length:8322 Min. :-76.59
## 1st Qu.: 3.000 Class :character Class :character 1st Qu.:-76.54
## Median : 3.000 Mode :character Mode :character Median :-76.53
## Mean : 3.605 Mean :-76.53
## 3rd Qu.: 4.000 3rd Qu.:-76.52
## Max. :10.000 Max. :-76.46
## NA's :3 NA's :3
## latitud
## Min. :3.333
## 1st Qu.:3.381
## Median :3.416
## Mean :3.418
## 3rd Qu.:3.452
## Max. :3.498
## NA's :3
Analizando con más detalle los datos, la figura 1 revela que el 60% de las propiedades disponibles son apartamentos, mientras que solo el 40% son casas.
# Asegúrate de que 'tipo' sea un factor
vivienda$tipo <- as.factor(vivienda$tipo)
# Calcular el porcentaje de cada tipo de propiedad
datos_resumen <- vivienda %>%
group_by(tipo) %>%
summarise(cantidad = dplyr::n(), .groups = 'drop') %>% # Usar dplyr::n() para evitar conflictos
mutate(porcentaje = (cantidad / sum(cantidad)) * 100)
ggplot(datos_resumen, aes(x = tipo, y = porcentaje, fill = tipo)) +
geom_bar(stat = "identity") + # Usar stat = "identity" para graficar los porcentajes
labs(title = "Figura 1. Distribución de Casas y Apartamentos", # Agregar título
x = "Tipo de Propiedad",
y = "Porcentaje (%)") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5), # Centrar el título
legend.position = "none") # Eliminar leyenda si no es necesariaLa Figura 2 muestra una distribución desigual de propiedades, con una clara predominancia de apartamentos en la Zona Sur, donde se registran más de 2,500 unidades, mientras que las casas en esta zona también tienen una presencia significativa, pero en menor cantidad.
La Zona Norte presenta una cantidad considerable de apartamentos (alrededor de 1,200), mientras que las casas son menos comunes, con aproximadamente 800 unidades.
En la Zona Oeste y Zona Oriente, la cantidad de propiedades es mucho menor en comparación con el resto de la ciudad, con un número reducido tanto de apartamentos como de casas. La Zona Centro muestra la menor cantidad de propiedades en general.
Este patrón sugiere que la construcción de apartamentos es más frecuente en las zonas urbanizadas y de alta demanda, como la Zona Sur y la Zona Norte, posiblemente debido a la preferencia por viviendas multifamiliares en estas áreas. En cambio, en las zonas con menor densidad de propiedades, el desarrollo inmobiliario podría estar más limitado o enfocado en otros tipos de usos del suelo.
Comparación de la Cantidad de Propiedades por Zona
Las funciones imputar_parqueadero_zona() e imputar_piso_zona() rellenan los valores faltantes de parqueaderos y pisos en el dataset infoVivienda_faltantes.
Se filtran las observaciones de la misma zona y tipo de vivienda donde parqueaderos o piso no sean NA. Se calcula la moda (mlv(…, method = “mfv”) de la librería modeest). Se asigna la moda a los valores faltantes en esas categorías.
# Funciones
imputar_parqueadero_zona <- function(infoVivienda_faltantes, zonaFiltro, tipoFiltro){
parqueaZonaTipo <- infoVivienda_faltantes %>%
filter(zona == zonaFiltro & tipo == tipoFiltro & !is.na(parqueaderos))
moda_parquea <- mlv(parqueaZonaTipo$parqueaderos, method = "mfv") # "mfv" significa "most frequent value"
infoVivienda_faltantes$parqueaderos[infoVivienda_faltantes$zona == zonaFiltro & infoVivienda_faltantes$tipo == tipoFiltro & is.na(infoVivienda_faltantes$parqueaderos)]=moda_parquea
return(infoVivienda_faltantes)
}
imputar_piso_zona <- function(infoVivienda_faltantes, zonaFiltro, tipoFiltro){
pisoZonaTipo <- infoVivienda_faltantes %>%
filter(zona == zonaFiltro & tipo == tipoFiltro & !is.na(piso))
moda_piso <- mlv(pisoZonaTipo$piso, method = "mfv") # "mfv" significa "most frequent value"
infoVivienda_faltantes$piso[infoVivienda_faltantes$zona == zonaFiltro & infoVivienda_faltantes$tipo == tipoFiltro & is.na(infoVivienda_faltantes$piso)]=moda_piso
return(infoVivienda_faltantes)
}## # A tibble: 437 × 2
## barrio n
## <chr> <int>
## 1 20 de julio 3
## 2 3 de julio 1
## 3 Belalcazar 1
## 4 Brisas De Los 1
## 5 Bueno Madrid 1
## 6 Cali 37
## 7 Camino Real 1
## 8 Centenario 1
## 9 Chiminangos 1
## 10 Ciudad 2000 1
## 11 Ciudad Jardín 2
## 12 Ciudad Pacifica 1
## 13 Colseguros Andes 1
## 14 El Bosque 1
## 15 El Caney 1
## 16 El Ingenio 1
## 17 La Flora 2
## 18 La Hacienda 2
## 19 Los Guaduales 1
## 20 Miraflores 1
## 21 Pance 3
## 22 Prados Del Limonar 1
## 23 Prados Del Norte 1
## 24 Quintas De Don 1
## 25 San Fernando 1
## 26 Santa Anita 2
## 27 Santa Isabel 1
## 28 Santa Monica 1
## 29 Santa Teresita 1
## 30 Santafe 1
## 31 Santo Domingo 1
## 32 Valle Del Lili 1
## 33 Villa Del Prado 1
## 34 Villas De Veracruz 1
## 35 acopi 158
## 36 agua blanca 1
## 37 aguablanca 2
## 38 aguacatal 109
## 39 alameda 16
## 40 alameda del rio 1
## 41 alameda del río 2
## 42 alamos 14
## 43 alborada 1
## 44 alcazares 2
## 45 alferez real 2
## 46 alfonso lopez 1
## 47 alfonso lópez 21
## 48 alfonso lópez i 1
## 49 alférez real 5
## 50 alto jordán 1
## 51 altos de guadalupe 4
## 52 altos de menga 3
## 53 altos de santa 1
## 54 antonio nariño 2
## 55 aranjuez 15
## 56 arboleda 5
## 57 arboleda campestre candelaria 1
## 58 arboledas 38
## 59 atanasio girardot 9
## 60 autopista sur 1
## 61 bajo aguacatal 1
## 62 barranquilla 6
## 63 barrio 7de agosto 1
## 64 barrio el recuerdo 1
## 65 barrio eucarístico 1
## 66 barrio obrero 1
## 67 barrio tranquilo y 1
## 68 base aérea 2
## 69 belalcazar 3
## 70 belisario caicedo 2
## 71 bella suiza 18
## 72 bella suiza alta 4
## 73 bellavista 43
## 74 benjamín herrera 8
## 75 berlin 1
## 76 bloques del limonar 1
## 77 bochalema 33
## 78 bolivariano 1
## 79 bosques de alboleda 1
## 80 bosques del limonar 21
## 81 boyacá 1
## 82 bretaña 16
## 83 brisas de guadalupe 1
## 84 brisas de los 81
## 85 brisas del guabito 1
## 86 brisas del limonar 1
## 87 buenos aires 7
## 88 caldas 1
## 89 cali bella 1
## 90 cali canto 1
## 91 calibella 1
## 92 calicanto 8
## 93 calicanto viii 1
## 94 calima 6
## 95 calimio norte 5
## 96 calipso 11
## 97 cambulos 3
## 98 camino real 35
## 99 campestre 1
## 100 caney 88
## 101 caney especial 5
## 102 capri 56
## 103 cascajal 1
## 104 cataya real 1
## 105 cañasgordas 7
## 106 cañaveralejo 12
## 107 cañaverales 21
## 108 cañaverales los samanes 1
## 109 ceibas 1
## 110 centelsa 1
## 111 centenario 15
## 112 centro 4
## 113 cerro cristales 22
## 114 cerros de guadalupe 1
## 115 champagnat 14
## 116 chapinero 7
## 117 chiminangos 17
## 118 chiminangos 1 etapa 1
## 119 chiminangos 2 etapa 2
## 120 chipichape 30
## 121 ciudad 2000 95
## 122 ciudad antejardin 1
## 123 ciudad bochalema 48
## 124 ciudad capri 13
## 125 ciudad cordoba 20
## 126 ciudad country 1
## 127 ciudad córdoba 15
## 128 ciudad córdoba reservado 1
## 129 ciudad del campo 1
## 130 ciudad jardin 22
## 131 ciudad jardin pance 1
## 132 ciudad jardín 516
## 133 ciudad los alamos 1
## 134 ciudad los álamos 25
## 135 ciudad melendez 1
## 136 ciudad meléndez 1
## 137 ciudad modelo 7
## 138 ciudad pacifica 2
## 139 ciudad real 3
## 140 ciudad talanga 1
## 141 ciudad universitaria 1
## 142 ciudadela comfandi 17
## 143 ciudadela del río 1
## 144 ciudadela melendez 1
## 145 ciudadela paso ancho 1
## 146 ciudadela pasoancho 21
## 147 colinas de menga 3
## 148 colinas del bosque 1
## 149 colinas del sur 8
## 150 colon 1
## 151 colseguros 44
## 152 colseguros andes 4
## 153 comfenalco 1
## 154 compartir 1
## 155 conjunto gibraltar 1
## 156 cristales 83
## 157 cristobal colón 14
## 158 cristóbal colón 2
## 159 cuarto de legua 44
## 160 departamental 29
## 161 ed benjamin herrera 1
## 162 el bosque 49
## 163 el caney 208
## 164 el castillo 6
## 165 el cedro 8
## 166 el diamante 2
## 167 el dorado 6
## 168 el gran limonar 8
## 169 el guabal 19
## 170 el guabito 1
## 171 el ingenio 202
## 172 el ingenio 3 1
## 173 el ingenio i 19
## 174 el ingenio ii 21
## 175 el ingenio iii 20
## 176 el jardín 15
## 177 el jordán 1
## 178 el lido 59
## 179 el limonar 135
## 180 el nacional 1
## 181 el paraíso 3
## 182 el peñon 60
## 183 el prado 2
## 184 el refugio 120
## 185 el rodeo 1
## 186 el sena 1
## 187 el troncal 19
## 188 el trébol 5
## 189 el vallado 1
## 190 eucarístico 2
## 191 evaristo garcía 2
## 192 farrallones de pance 1
## 193 fenalco kennedy 1
## 194 fepicol 1
## 195 flora 1
## 196 flora industrial 16
## 197 floralia 6
## 198 fonaviemcali 1
## 199 francisco eladio ramirez 1
## 200 fuentes de la 1
## 201 gaitan 1
## 202 gran limonar 24
## 203 granada 15
## 204 guadalupe 21
## 205 guadalupe alto 1
## 206 guaduales 2
## 207 guayaquil 16
## 208 hacienda alferez real 1
## 209 ingenio 1
## 210 ingenio i 1
## 211 ingenio ii 1
## 212 jamundi 4
## 213 jamundi alfaguara 1
## 214 jorge eliecer gaitán 1
## 215 jorge isaacs 1
## 216 jose manuel marroquín 1
## 217 juanambu 2
## 218 juanamb√∫ 53
## 219 junin 18
## 220 junín 6
## 221 la alborada 5
## 222 la alianza 5
## 223 la arboleda 18
## 224 la base 15
## 225 la buitrera 3
## 226 la campiña 13
## 227 la cascada 7
## 228 la ceibas 1
## 229 la esmeralda 1
## 230 la flora 366
## 231 la floresta 18
## 232 la fortaleza 4
## 233 la gran colombia 1
## 234 la hacienda 164
## 235 la independencia 12
## 236 la libertad 2
## 237 la luisa 1
## 238 la merced 26
## 239 la morada 1
## 240 la nueva base 8
## 241 la playa 1
## 242 la portada al 1
## 243 la primavera 1
## 244 la reforma 1
## 245 la rivera 11
## 246 la rivera i 2
## 247 la rivera ii 2
## 248 la riverita 1
## 249 la riviera 1
## 250 la selva 11
## 251 la villa del 1
## 252 laflora 1
## 253 lares de comfenalco 1
## 254 las acacias 12
## 255 las américas 3
## 256 las camelias 1
## 257 las ceibas 23
## 258 las delicias 5
## 259 las granjas 10
## 260 las quintas de 1
## 261 las vegas 1
## 262 las vegas de 1
## 263 libertadores 3
## 264 los alamos 1
## 265 los alcazares 17
## 266 los alcázares 5
## 267 los andes 21
## 268 los cambulos 25
## 269 los cristales 154
## 270 los cristales club 1
## 271 los cámbulos 6
## 272 los farallones 4
## 273 los guaduales 25
## 274 los guayacanes 3
## 275 los jockeys 1
## 276 los libertadores 4
## 277 los parques barranquilla 6
## 278 los robles 1
## 279 lourdes 2
## 280 mamellan 1
## 281 manzanares 5
## 282 mariano ramos 1
## 283 marroquín iii 1
## 284 mayapan las vegas 46
## 285 melendez 52
## 286 meléndez 23
## 287 menga 23
## 288 metropolitano del norte 21
## 289 miradol del aguacatal 1
## 290 miraflores 25
## 291 morichal de comfandi 3
## 292 multicentro 27
## 293 municipal 3
## 294 napoles 2
## 295 normandia 5
## 296 normandía 154
## 297 normandía west point 1
## 298 norte 9
## 299 norte la flora 1
## 300 nueva base 1
## 301 nueva floresta 15
## 302 nueva tequendama 73
## 303 nápoles 29
## 304 oasis de comfandi 6
## 305 oasis de pasoancho 1
## 306 occidente 11
## 307 pacara 19
## 308 pacará 4
## 309 palmas del ingenio 1
## 310 pampa linda 26
## 311 pampalinda 12
## 312 panamericano 9
## 313 pance 409
## 314 parcelaciones pance 61
## 315 parque residencial el 1
## 316 paseo de los 2
## 317 paso del comercio 6
## 318 pasoancho 6
## 319 poblado campestre 2
## 320 ponce 1
## 321 popular 6
## 322 portada de comfandi 2
## 323 portales de comfandi 1
## 324 porvenir 3
## 325 prados de oriente 6
## 326 prados del limonar 20
## 327 prados del norte 126
## 328 prados del sur 2
## 329 primavera 2
## 330 primero de mayo 37
## 331 primitivo crespo 3
## 332 puente del comercio 6
## 333 puente palma 1
## 334 quintas de don 72
## 335 quintas de salomia 4
## 336 rafael uribe uribe 1
## 337 refugio 2
## 338 rep√∫blica de israel 1
## 339 rincon de la 1
## 340 rincón de salomia 1
## 341 riveras del valle 1
## 342 rozo la torre 1
## 343 saavedra galindo 4
## 344 salomia 40
## 345 samanes 1
## 346 samanes de guadalupe 1
## 347 sameco 1
## 348 san antonio 24
## 349 san bosco 8
## 350 san carlos 4
## 351 san cayetano 9
## 352 san fernando 54
## 353 san fernando nuevo 10
## 354 san fernando viejo 18
## 355 san joaquin 4
## 356 san joaquín 16
## 357 san juan bosco 7
## 358 san judas 1
## 359 san judas tadeo 2
## 360 san luis 2
## 361 san luís 1
## 362 san nicolas 1
## 363 san nicolás 1
## 364 san pedro 3
## 365 san vicente 48
## 366 santa 1
## 367 santa anita 48
## 368 santa anita sur 1
## 369 santa bárbara 3
## 370 santa elena 10
## 371 santa fe 8
## 372 santa helena de 1
## 373 santa isabel 63
## 374 santa monica 51
## 375 santa monica norte 2
## 376 santa monica popular 2
## 377 santa monica residencial 5
## 378 santa mónica 3
## 379 santa mónica alta 1
## 380 santa mónica popular 7
## 381 santa mónica residencial 39
## 382 santa rita 45
## 383 santa rosa 1
## 384 santa teresita 262
## 385 santander 1
## 386 santo domingo 5
## 387 sector aguacatal 1
## 388 sector cañaveralejo guadalupe 2
## 389 seminario 32
## 390 sierras de normandía 1
## 391 siete de agosto 8
## 392 simón bolivar 1
## 393 tejares cristales 4
## 394 tejares de san 14
## 395 templete 4
## 396 tequendama 44
## 397 tequendema 1
## 398 terrón colorado 1
## 399 torres de comfandi 57
## 400 unicentro cali 1
## 401 unión de vivienda 3
## 402 urbanizacion el saman 1
## 403 urbanizacion gratamira 1
## 404 urbanizacion lili 2
## 405 urbanización barranquilla 4
## 406 urbanización boyacá 1
## 407 urbanización colseguros 3
## 408 urbanización la flora 83
## 409 urbanización la merced 4
## 410 urbanización la nueva 4
## 411 urbanización las cascadas 1
## 412 urbanización nueva granada 3
## 413 urbanización pacara 1
## 414 urbanización río lili 5
## 415 urbanización san joaquin 4
## 416 urbanización tequendama 7
## 417 valle de lili 1
## 418 valle del lili 1008
## 419 valle grande 1
## 420 versalles 71
## 421 villa colombia 6
## 422 villa de veracruz 6
## 423 villa del lago 10
## 424 villa del parque 1
## 425 villa del prado 51
## 426 villa del sol 25
## 427 villa del sur 5
## 428 villas de veracruz 8
## 429 vipasa 32
## 430 zona centro 1
## 431 zona norte 32
## 432 zona norte los 1
## 433 zona oeste 26
## 434 zona oriente 18
## 435 zona residencial 1
## 436 zona sur 74
## 437 <NA> 3
#vivienda.head
# Homologamos los nombres de los barrios
vivienda <- vivienda %>%
mutate(barrio = tolower(barrio))
vivienda$barrio[vivienda$barrio=="alborada"]="la alborada"
vivienda$barrio[vivienda$barrio=="agua blanca"]="aguablanca"
vivienda$barrio[vivienda$barrio=="alameda del río"]="alameda del rio"
vivienda$barrio[vivienda$barrio=="alfonso lópez" | vivienda$barrio=="alfonso lópez i"]="alfonso lopez"
vivienda$barrio[vivienda$barrio=="alférez real"]="alferez real"
vivienda$barrio[vivienda$barrio=="arboledas" | vivienda$barrio=="la arboleda"]="arboleda"
vivienda$barrio[vivienda$barrio=="barrio 7de agosto"]="siete de agosto"
vivienda$barrio[vivienda$barrio=="barrio eucarístico"]="eucarístico"
vivienda$barrio[vivienda$barrio=="barrio obrero"]="obrero"
vivienda$barrio[vivienda$barrio=="barrio tranquilo y"]="tranquilo"
vivienda$barrio[vivienda$barrio=="barrio el recuerdo"]="recuerdo"
vivienda$barrio[vivienda$barrio=="base aérea"]="base aerea"
vivienda$barrio[vivienda$barrio=="calibella"]="cali bella"
vivienda$barrio[vivienda$barrio=="cali canto" | vivienda$barrio=="calicanto viii"]="calicanto"
vivienda$barrio[vivienda$barrio=="ciudad jardin pance" | vivienda$barrio=="ciudad jardín"]="ciudad jardin"
vivienda$barrio[vivienda$barrio=="ciudad los álamos"]="ciudad los alamos"
vivienda$barrio[vivienda$barrio=="ciudad meléndez"]="ciudad melendez"
vivienda$barrio[vivienda$barrio=="cristóbal colón"]="cristobal colón"
vivienda$barrio[vivienda$barrio=="el ingenio 3"]="el ingenio iii"
vivienda$barrio[vivienda$barrio=="el trébol"]="el trebol"
vivienda$barrio[vivienda$barrio=="ingenio"]="el ingenio"
vivienda$barrio[vivienda$barrio=="ingenio i"]="el ingenio i"
vivienda$barrio[vivienda$barrio=="ingenio ii"]="el ingenio ii"
vivienda$barrio[vivienda$barrio=="juanamb√∫"]="juanambu"
vivienda$barrio[vivienda$barrio=="junín"]="junin"
vivienda$barrio[vivienda$barrio=="laflora"]="la flora"
vivienda$barrio[vivienda$barrio=="las américas"]="las americas"
vivienda$barrio[vivienda$barrio=="los alcázares"]="los alcazares"
vivienda$barrio[vivienda$barrio=="meléndez"]="melendez"
vivienda$barrio[vivienda$barrio=="normandia"]="normandía"
vivienda$barrio[vivienda$barrio=="pacara"]="pacará"
vivienda$barrio[vivienda$barrio=="pampalinda"]="pampa linda"
vivienda$barrio[vivienda$barrio=="rep√∫blica de israel"]="republica de israel"
vivienda$barrio[vivienda$barrio=="refugio"]="el refugio"
vivienda$barrio[vivienda$barrio=="san joaquin"]="san joaquín"
vivienda$barrio[vivienda$barrio=="san luís"]="san luis"
vivienda$barrio[vivienda$barrio=="san nicolás"]="san nicolas"
vivienda$barrio[vivienda$barrio=="santa mónica"]="santa monica"
vivienda$barrio[vivienda$barrio=="santa monica popular"]="santa mónica popular"
vivienda$barrio[vivienda$barrio=="santa monica residencial"]="santa mónica residencial"
vivienda$barrio[vivienda$barrio=="tequendema"]="tequendama"
vivienda$barrio[vivienda$barrio=="valle de lili"]="valle del lili"##Grafica en donde podemos ver los datos faltantes
par(cex.axis = 0.7) # Ajusta el tamaño del texto en los ejes
md.pattern(vivienda, rotate.names = TRUE)## preciom id zona estrato areaconst banios habitaciones tipo barrio longitud
## 4808 1 1 1 1 1 1 1 1 1 1
## 1909 1 1 1 1 1 1 1 1 1 1
## 876 1 1 1 1 1 1 1 1 1 1
## 726 1 1 1 1 1 1 1 1 1 1
## 1 1 0 0 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0 0 0 0
## 2 3 3 3 3 3 3 3 3 3
## latitud parqueaderos piso
## 4808 1 1 1 0
## 1909 1 1 0 1
## 876 1 0 1 1
## 726 1 0 0 2
## 1 0 0 0 12
## 2 0 0 0 13
## 3 1605 2638 4275
par(cex.axis = 1.5) # Restablece el tamaño del texto
#Grafico de valores faltantes presenta una mejor visualización de los datos
faltantes <- gg_miss_var(vivienda)
faltantes <- faltantes + labs(x = "Variables", y = "Cantidad valores nulos")
faltantes## # A tibble: 369 × 2
## barrio n
## <chr> <int>
## 1 20 de julio 3
## 2 3 de julio 1
## 3 acopi 158
## 4 aguablanca 3
## 5 aguacatal 109
## 6 alameda 16
## 7 alameda del rio 3
## 8 alamos 14
## 9 alcazares 2
## 10 alferez real 7
## 11 alfonso lopez 23
## 12 alto jordán 1
## 13 altos de guadalupe 4
## 14 altos de menga 3
## 15 altos de santa 1
## 16 antonio nariño 2
## 17 aranjuez 15
## 18 arboleda 61
## 19 arboleda campestre candelaria 1
## 20 atanasio girardot 9
## 21 autopista sur 1
## 22 bajo aguacatal 1
## 23 barranquilla 6
## 24 base aerea 2
## 25 belalcazar 4
## 26 belisario caicedo 2
## 27 bella suiza 18
## 28 bella suiza alta 4
## 29 bellavista 43
## 30 benjamín herrera 8
## 31 berlin 1
## 32 bloques del limonar 1
## 33 bochalema 33
## 34 bolivariano 1
## 35 bosques de alboleda 1
## 36 bosques del limonar 21
## 37 boyacá 1
## 38 bretaña 16
## 39 brisas de guadalupe 1
## 40 brisas de los 82
## 41 brisas del guabito 1
## 42 brisas del limonar 1
## 43 bueno madrid 1
## 44 buenos aires 7
## 45 caldas 1
## 46 cali 37
## 47 cali bella 2
## 48 calicanto 10
## 49 calima 6
## 50 calimio norte 5
## 51 calipso 11
## 52 cambulos 3
## 53 camino real 36
## 54 campestre 1
## 55 caney 88
## 56 caney especial 5
## 57 capri 56
## 58 cascajal 1
## 59 cataya real 1
## 60 cañasgordas 7
## 61 cañaveralejo 12
## 62 cañaverales 21
## 63 cañaverales los samanes 1
## 64 ceibas 1
## 65 centelsa 1
## 66 centenario 16
## 67 centro 4
## 68 cerro cristales 22
## 69 cerros de guadalupe 1
## 70 champagnat 14
## 71 chapinero 7
## 72 chiminangos 18
## 73 chiminangos 1 etapa 1
## 74 chiminangos 2 etapa 2
## 75 chipichape 30
## 76 ciudad 2000 96
## 77 ciudad antejardin 1
## 78 ciudad bochalema 48
## 79 ciudad capri 13
## 80 ciudad cordoba 20
## 81 ciudad country 1
## 82 ciudad córdoba 15
## 83 ciudad córdoba reservado 1
## 84 ciudad del campo 1
## 85 ciudad jardin 541
## 86 ciudad los alamos 26
## 87 ciudad melendez 2
## 88 ciudad modelo 7
## 89 ciudad pacifica 3
## 90 ciudad real 3
## 91 ciudad talanga 1
## 92 ciudad universitaria 1
## 93 ciudadela comfandi 17
## 94 ciudadela del río 1
## 95 ciudadela melendez 1
## 96 ciudadela paso ancho 1
## 97 ciudadela pasoancho 21
## 98 colinas de menga 3
## 99 colinas del bosque 1
## 100 colinas del sur 8
## 101 colon 1
## 102 colseguros 44
## 103 colseguros andes 5
## 104 comfenalco 1
## 105 compartir 1
## 106 conjunto gibraltar 1
## 107 cristales 83
## 108 cristobal colón 16
## 109 cuarto de legua 44
## 110 departamental 29
## 111 ed benjamin herrera 1
## 112 el bosque 50
## 113 el caney 209
## 114 el castillo 6
## 115 el cedro 8
## 116 el diamante 2
## 117 el dorado 6
## 118 el gran limonar 8
## 119 el guabal 19
## 120 el guabito 1
## 121 el ingenio 204
## 122 el ingenio i 20
## 123 el ingenio ii 22
## 124 el ingenio iii 21
## 125 el jardín 15
## 126 el jordán 1
## 127 el lido 59
## 128 el limonar 135
## 129 el nacional 1
## 130 el paraíso 3
## 131 el peñon 60
## 132 el prado 2
## 133 el refugio 122
## 134 el rodeo 1
## 135 el sena 1
## 136 el trebol 5
## 137 el troncal 19
## 138 el vallado 1
## 139 eucarístico 3
## 140 evaristo garcía 2
## 141 farrallones de pance 1
## 142 fenalco kennedy 1
## 143 fepicol 1
## 144 flora 1
## 145 flora industrial 16
## 146 floralia 6
## 147 fonaviemcali 1
## 148 francisco eladio ramirez 1
## 149 fuentes de la 1
## 150 gaitan 1
## 151 gran limonar 24
## 152 granada 15
## 153 guadalupe 21
## 154 guadalupe alto 1
## 155 guaduales 2
## 156 guayaquil 16
## 157 hacienda alferez real 1
## 158 jamundi 4
## 159 jamundi alfaguara 1
## 160 jorge eliecer gaitán 1
## 161 jorge isaacs 1
## 162 jose manuel marroquín 1
## 163 juanambu 55
## 164 junin 24
## 165 la alborada 6
## 166 la alianza 5
## 167 la base 15
## 168 la buitrera 3
## 169 la campiña 13
## 170 la cascada 7
## 171 la ceibas 1
## 172 la esmeralda 1
## 173 la flora 369
## 174 la floresta 18
## 175 la fortaleza 4
## 176 la gran colombia 1
## 177 la hacienda 166
## 178 la independencia 12
## 179 la libertad 2
## 180 la luisa 1
## 181 la merced 26
## 182 la morada 1
## 183 la nueva base 8
## 184 la playa 1
## 185 la portada al 1
## 186 la primavera 1
## 187 la reforma 1
## 188 la rivera 11
## 189 la rivera i 2
## 190 la rivera ii 2
## 191 la riverita 1
## 192 la riviera 1
## 193 la selva 11
## 194 la villa del 1
## 195 lares de comfenalco 1
## 196 las acacias 12
## 197 las americas 3
## 198 las camelias 1
## 199 las ceibas 23
## 200 las delicias 5
## 201 las granjas 10
## 202 las quintas de 1
## 203 las vegas 1
## 204 las vegas de 1
## 205 libertadores 3
## 206 los alamos 1
## 207 los alcazares 22
## 208 los andes 21
## 209 los cambulos 25
## 210 los cristales 154
## 211 los cristales club 1
## 212 los cámbulos 6
## 213 los farallones 4
## 214 los guaduales 26
## 215 los guayacanes 3
## 216 los jockeys 1
## 217 los libertadores 4
## 218 los parques barranquilla 6
## 219 los robles 1
## 220 lourdes 2
## 221 mamellan 1
## 222 manzanares 5
## 223 mariano ramos 1
## 224 marroquín iii 1
## 225 mayapan las vegas 46
## 226 melendez 75
## 227 menga 23
## 228 metropolitano del norte 21
## 229 miradol del aguacatal 1
## 230 miraflores 26
## 231 morichal de comfandi 3
## 232 multicentro 27
## 233 municipal 3
## 234 napoles 2
## 235 normandía 159
## 236 normandía west point 1
## 237 norte 9
## 238 norte la flora 1
## 239 nueva base 1
## 240 nueva floresta 15
## 241 nueva tequendama 73
## 242 nápoles 29
## 243 oasis de comfandi 6
## 244 oasis de pasoancho 1
## 245 obrero 1
## 246 occidente 11
## 247 pacará 23
## 248 palmas del ingenio 1
## 249 pampa linda 38
## 250 panamericano 9
## 251 pance 412
## 252 parcelaciones pance 61
## 253 parque residencial el 1
## 254 paseo de los 2
## 255 paso del comercio 6
## 256 pasoancho 6
## 257 poblado campestre 2
## 258 ponce 1
## 259 popular 6
## 260 portada de comfandi 2
## 261 portales de comfandi 1
## 262 porvenir 3
## 263 prados de oriente 6
## 264 prados del limonar 21
## 265 prados del norte 127
## 266 prados del sur 2
## 267 primavera 2
## 268 primero de mayo 37
## 269 primitivo crespo 3
## 270 puente del comercio 6
## 271 puente palma 1
## 272 quintas de don 73
## 273 quintas de salomia 4
## 274 rafael uribe uribe 1
## 275 recuerdo 1
## 276 republica de israel 1
## 277 rincon de la 1
## 278 rincón de salomia 1
## 279 riveras del valle 1
## 280 rozo la torre 1
## 281 saavedra galindo 4
## 282 salomia 40
## 283 samanes 1
## 284 samanes de guadalupe 1
## 285 sameco 1
## 286 san antonio 24
## 287 san bosco 8
## 288 san carlos 4
## 289 san cayetano 9
## 290 san fernando 55
## 291 san fernando nuevo 10
## 292 san fernando viejo 18
## 293 san joaquín 20
## 294 san juan bosco 7
## 295 san judas 1
## 296 san judas tadeo 2
## 297 san luis 3
## 298 san nicolas 2
## 299 san pedro 3
## 300 san vicente 48
## 301 santa 1
## 302 santa anita 50
## 303 santa anita sur 1
## 304 santa bárbara 3
## 305 santa elena 10
## 306 santa fe 8
## 307 santa helena de 1
## 308 santa isabel 64
## 309 santa monica 55
## 310 santa monica norte 2
## 311 santa mónica alta 1
## 312 santa mónica popular 9
## 313 santa mónica residencial 44
## 314 santa rita 45
## 315 santa rosa 1
## 316 santa teresita 263
## 317 santafe 1
## 318 santander 1
## 319 santo domingo 6
## 320 sector aguacatal 1
## 321 sector cañaveralejo guadalupe 2
## 322 seminario 32
## 323 sierras de normandía 1
## 324 siete de agosto 9
## 325 simón bolivar 1
## 326 tejares cristales 4
## 327 tejares de san 14
## 328 templete 4
## 329 tequendama 45
## 330 terrón colorado 1
## 331 torres de comfandi 57
## 332 tranquilo 1
## 333 unicentro cali 1
## 334 unión de vivienda 3
## 335 urbanizacion el saman 1
## 336 urbanizacion gratamira 1
## 337 urbanizacion lili 2
## 338 urbanización barranquilla 4
## 339 urbanización boyacá 1
## 340 urbanización colseguros 3
## 341 urbanización la flora 83
## 342 urbanización la merced 4
## 343 urbanización la nueva 4
## 344 urbanización las cascadas 1
## 345 urbanización nueva granada 3
## 346 urbanización pacara 1
## 347 urbanización río lili 5
## 348 urbanización san joaquin 4
## 349 urbanización tequendama 7
## 350 valle del lili 1010
## 351 valle grande 1
## 352 versalles 71
## 353 villa colombia 6
## 354 villa de veracruz 6
## 355 villa del lago 10
## 356 villa del parque 1
## 357 villa del prado 52
## 358 villa del sol 25
## 359 villa del sur 5
## 360 villas de veracruz 9
## 361 vipasa 32
## 362 zona centro 1
## 363 zona norte 32
## 364 zona norte los 1
## 365 zona oeste 26
## 366 zona oriente 18
## 367 zona residencial 1
## 368 zona sur 74
## 369 <NA> 3
## # A tibble: 6 × 2
## zona n
## <fct> <int>
## 1 Zona Centro 124
## 2 Zona Norte 1920
## 3 Zona Oeste 1198
## 4 Zona Oriente 351
## 5 Zona Sur 4726
## 6 <NA> 3
Se eliminan filas completamente vacías (apply(…, function(x) all(is.na(x)))). Se eliminan filas donde zona, estrato y barrio sean todos NA.
# Ajustes de Zona
vivienda$zona[vivienda$zona=="Zona Centro" & vivienda$barrio=="torres de comfandi"]="Zona Norte"
# Eliminamos los registros que estan completamente vacios o cuentan con un solo dato (Columna)
vivienda <- vivienda[!apply(vivienda, 1, function(x) all(is.na(x))), ]
vivienda <- vivienda[!apply(vivienda[, c("zona", "estrato", "barrio")], 1, function(x) all(is.na(x))), ]
conteo <- vivienda %>%
count(zona)
print(conteo, n= Inf)## # A tibble: 5 × 2
## zona n
## <fct> <int>
## 1 Zona Centro 122
## 2 Zona Norte 1922
## 3 Zona Oeste 1198
## 4 Zona Oriente 351
## 5 Zona Sur 4726
vivienda_faltantes <- vivienda
zonasFaltantes = subset(vivienda_faltantes, is.na(vivienda_faltantes$zona))
vivienda_faltantes <- vivienda_faltantes[!apply(vivienda_faltantes, 1, function(x) all(is.na(x))), ]
vivienda_faltantes <- vivienda_faltantes[!apply(vivienda_faltantes[, c("zona", "estrato", "barrio")], 1, function(x) all(is.na(x))), ]
conteo <- vivienda_faltantes %>%
count(zona)
conteo <- vivienda_faltantes %>%
filter(is.na(parqueaderos)) %>% # Filtrar filas donde parqueadero es NA
count(zona) # Contar las ocurrencias de cada zona
print(conteo)## # A tibble: 5 × 2
## zona n
## <fct> <int>
## 1 Zona Centro 59
## 2 Zona Norte 634
## 3 Zona Oeste 100
## 4 Zona Oriente 188
## 5 Zona Sur 621
Se llama a las funciones de imputación para cada combinación de:
Se presenta de nuevo la matriz que evidencia donde hay datos faltantes y en ahora ya no presenta casos.
conteo <- vivienda_faltantes %>%
filter(is.na(parqueaderos)) %>% # Filtrar filas donde parquea es NA
count(zona) # Contar las ocurrencias de cada zona
#print(conteo)
#md.pattern(vivienda)
# Centro - Apartamento
vivienda <- imputar_parqueadero_zona(vivienda, "Zona Centro", "Apartamento" )
vivienda <- imputar_piso_zona(vivienda, "Zona Centro", "Apartamento" )
# Centro - Casa
vivienda <- imputar_parqueadero_zona(vivienda, "Zona Centro", "Casa" )
vivienda <- imputar_piso_zona(vivienda, "Zona Centro", "Casa" )
# -------------------------------------
# Norte - Apartamento
vivienda <- imputar_parqueadero_zona(vivienda, "Zona Norte", "Apartamento" )
vivienda <- imputar_piso_zona(vivienda, "Zona Norte", "Apartamento" )
# Norte - Casa
vivienda <- imputar_parqueadero_zona(vivienda, "Zona Norte", "Casa" )
vivienda <- imputar_piso_zona(vivienda, "Zona Norte", "Casa" )
# -------------------------------------
# Oeste - Apartamento
vivienda <- imputar_parqueadero_zona(vivienda, "Zona Oeste", "Apartamento" )
vivienda <- imputar_piso_zona(vivienda, "Zona Oeste", "Apartamento" )
# Oeste - Casa
vivienda <- imputar_parqueadero_zona(vivienda, "Zona Oeste", "Casa" )
vivienda <- imputar_piso_zona(vivienda, "Zona Oeste", "Casa" )
# -------------------------------------
# Oriente - Apartamento
vivienda <- imputar_parqueadero_zona(vivienda, "Zona Oriente", "Apartamento" )
vivienda <- imputar_piso_zona(vivienda, "Zona Oriente", "Apartamento" )
# Oriente - Casa
vivienda <- imputar_parqueadero_zona(vivienda, "Zona Oriente", "Casa" )
vivienda <- imputar_piso_zona(vivienda, "Zona Oriente", "Casa" )
# -------------------------------------
# Sur - Apartamento
vivienda <- imputar_parqueadero_zona(vivienda, "Zona Sur", "Apartamento" )
vivienda <- imputar_piso_zona(vivienda, "Zona Sur", "Apartamento" )
# Sur - Casa
vivienda <- imputar_parqueadero_zona(vivienda, "Zona Sur", "Casa" )
vivienda <- imputar_piso_zona(vivienda, "Zona Sur", "Casa" )
par(cex.axis = 0.7) # Ajusta el tamaño del texto en los ejes
md.pattern(vivienda, rotate.names = TRUE)## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## 8319 1 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0 0
## tipo barrio longitud latitud
## 8319 1 1 1 1 0
## 0 0 0 0 0
par(cex.axis = 1.5) # Restablece el tamaño del texto
dataLimpia <- vivienda
conteo <- dataLimpia %>%
count(tipo)
print(conteo, n= Inf)## # A tibble: 2 × 2
## tipo n
## <fct> <int>
## 1 Apartamento 5100
## 2 Casa 3219
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?).
#
# Filtrar viviendas según criterios y mostrar los primeros 3 registros
base1 <- dataLimpia %>% filter(tipo == "Casa", zona == "Zona Norte")
head(base1, 3)# Mapa de ubicación
oferta1 <- select(base1, longitud, latitud)
icono_personalizado <- makeIcon(
iconUrl = "location_icon.png",
iconWidth = 15,
iconHeight = 15,
iconAnchorX = 8,
iconAnchorY = 15
)
# Crea un mapa
map1 <- leaflet(oferta1) %>%
addTiles() %>%
addMarkers(
lng = ~longitud,
lat = ~latitud,
popup = ~as.character(latitud), # Puedes personalizar el contenido del popup aquí
icon = icono_personalizado
)
map1Análisis de resultados base1
Efectivamente evidenciamos que existen varios puntos por fuera de la zona norte de la ciudad, a continuación, mostramos los posible supuestos de esto:
Distribución de las propiedades por zona:
Podemos observar que la mayoría de las viviendas están hubicadas en la Zona Sur.
Rango de coordenadas de la Zona Norte:
Este rango parece alinearse con la parte norte de Cali. Sin embargo, si hay puntos fuera de estas coordenadas en el mapa, podría haber datos mal clasificados.
# Filtrar solo las viviendas de la Zona Norte
zona_norte <- dataLimpia %>% filter(zona == "Zona Norte")
# Definir límites esperados para la Zona Norte en Cali
lat_min_norte <- 3.38
lat_max_norte <- 3.50
lon_min_norte <- -76.55
lon_max_norte <- -76.45
# Identificar viviendas fuera del rango esperado
fuera_rango <- zona_norte %>%
filter(latitud < lat_min_norte | latitud > lat_max_norte |
longitud < lon_min_norte | longitud > lon_max_norte)
# Contar cuántos registros están fuera de los límites
n_fuerarango <- nrow(fuera_rango)
print(paste("Número de viviendas fuera de la zona esperada:", n_fuerarango))## [1] "Número de viviendas fuera de la zona esperada: 110"
Existen errores de clasificación por zona dentro de la data utilizada, se encontraron 110 viviendas etiquetadas como “Zona Norte” cuyas coordenadas no están dentro de los límites geográficos esperados. Esto sugiere que algunos registros pueden estar mal clasificados.
Análisis de Coordenadas Anómalas
El siguiente gráfico muestra que la mayoría de las viviendas en la Zona Norte (puntos azules) están dentro del rango esperado. Sin embargo, los puntos rojos representan viviendas que, a pesar de estar categorizadas como “Zona Norte”, están ubicadas en zonas más al sur o fuera del área.
# Graficar la distribución de viviendas en la Zona Norte
ggplot() +
geom_point(data = zona_norte, aes(x = longitud, y = latitud), color = "blue", alpha = 0.5) +
geom_point(data = fuera_rango, aes(x = longitud, y = latitud), color = "red", size = 2) +
geom_vline(xintercept = c(lon_min_norte, lon_max_norte), linetype = "dashed") +
geom_hline(yintercept = c(lat_min_norte, lat_max_norte), linetype = "dashed") +
labs(title = "Distribución de Viviendas en la Zona Norte de Cali",
subtitle = paste(n_fuerarango, "viviendas fuera de los límites esperados"),
x = "Longitud", y = "Latitud") +
theme_minimal()Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio de la casa) 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.
base1$zona <- as.factor(base1$zona)
base1$habitaciones <- as.numeric(base1$habitaciones)
base1$banios <- as.numeric(base1$banios)a) Área construida vs. Precio:
ggplot(base1, aes(x = areaconst, y = preciom)) +
geom_point(aes(color = factor(estrato))) +
theme_minimal() +
labs(title = "Relación entre área construida y precio (Casas Norte)")Hallazgos Clave
Correlación Positiva entre Área Construida y Precio:
Se observa una tendencia ascendente, lo que indica que, en general, a medida que aumenta el área construida, el precio de las viviendas también incrementa.
Sin embargo, la dispersión de los datos sugiere que otros factores también influyen en el precio.
Se observan algunos valores atípicos que podrían indicar viviendas de lujo o errores en los datos
La agrupación de la mayoría de las viviendas en la parte inferior izquierda del gráfico indica una alta concentración de propiedades con áreas y precios relativamente bajos. Además, sugiere una posible no linealidad en la relación a medida que el área construida aumenta significativamente.
Diferencias por Estrato:
Las casas en estratos más bajos (color salmón, estrato 3) tienden a tener áreas construidas menores y precios más bajos.
Las viviendas en estratos superiores (colores verde, azul y morado) presentan mayores áreas construidas y precios más elevados, lo que sugiere que el estrato es un factor determinante en el costo de la vivienda.
Presencia de Valores Extremos:
Dispersión dentro de cada estrato:
A pesar de la tendencia general, en cada estrato hay una considerable variabilidad en los precios para un mismo rango de área construida. Esto indica que otras variables, como el número de baños, habitaciones o la ubicación exacta dentro de la Zona Norte, pueden estar influyendo en el precio.
b) Estrato vs. Precio:
plot_ly(base1, x = ~estrato, y = ~preciom, type = "box", color = ~factor(estrato)) %>%
layout(title = "Estrato vs. Precio",
xaxis = list(title = "Estrato"),
yaxis = list(title = "Precio"))Hallazgos Clave
Este gráfico de cajas muestra la relación entre el estrato y el precio de las viviendas, evidenciando una tendencia clara:
Los estratos más altos (5 y 6) presentan precios promedio significativamente mayores en comparación con los estratos más bajos (3 y 4). Además, se observa una mayor dispersión en los precios de los estratos 5 y 6, lo que indica una mayor variabilidad en los valores de las viviendas. En contraste, los estratos 3 y 4 exhiben una distribución más compacta, con menor variabilidad y precios promedio más bajos. Estos patrones sugieren una relación directa entre el estrato y el precio, donde a mayor estrato, mayor es el precio promedio de las viviendas.
Existen outliers (valores atípicos) en todos los estratos, especialmente en los más altos, indicando la existencia de algunas viviendas con precios mucho mayores al promedio.
En el estrato 6, los outliers superan los 1500 millones, lo que puede corresponder a casas de lujo o con características especiales.
c) Número de baños vs. Precio:
p2 <- ggplot(base1, aes(x = banios, y = preciom, color = factor(estrato))) +
geom_jitter(width = 0.2) +
theme_minimal() +
labs(title = "Relación entre Número de Baños y Precio (Casas Norte)",
x = "Número de Baños",
y = "Precio (millones)",
color = "Estrato")
ggplotly(p2)Observaciones clave:
Tendencia general: Se observa una relación positiva entre el número de baños y el precio de la vivienda, aunque con una alta dispersión. A medida que aumenta el número de baños, tienden a aparecer propiedades de mayor precio.
Variabilidad de precios: Para cada cantidad de baños, hay una amplia dispersión en los precios, lo que sugiere que otras variables (como el tamaño del inmueble, la ubicación específica o las características adicionales) también juegan un papel importante en la determinación del precio.
Estratos y precios: Los estratos más bajos (3 y 4) tienen viviendas mayormente concentradas en los rangos de precios más bajos (menores a 500 millones). Los estratos 5 y 6 muestran una mayor variabilidad de precios y, en general, incluyen las viviendas más costosas.
Casas con muchos baños: Hay algunas viviendas con más de 6 baños y precios considerablemente altos, lo que podría indicar propiedades de lujo o con características adicionales exclusivas.
d) Número de habitaciones vs. Precio:
p3 <- ggplot(base1, aes(x = habitaciones, y = preciom, color = factor(estrato))) +
geom_jitter(width = 0.2) +
theme_minimal() +
labs(title = "Relación entre Número de Habitaciones y Precio (Casas Norte)",
x = "Número de Habitaciones",
y = "Precio (millones)",
color = "Estrato")
ggplotly(p3)Observaciones clave:
Tendencia general: Se observa una ligera relación positiva entre el número de habitaciones y el precio de la vivienda. Sin embargo, hay una alta dispersión, lo que sugiere que el número de habitaciones no es el único factor determinante del precio.
Variabilidad de precios: Para cada cantidad de habitaciones, hay una amplia distribución de precios. Otras características, como el tamaño del terreno, la ubicación exacta o el estado de la vivienda, pueden influir en el precio final.
Diferencia por estratos: Los estratos más bajos (3 y 4) tienen viviendas mayormente en el rango de precios más bajos, generalmente por debajo de los 500 millones. Los estratos 5 y 6 incluyen propiedades con precios significativamente más altos y mayor variabilidad, especialmente cuando el número de habitaciones es mayor a 4.
Viviendas con muchas habitaciones: Se identifican algunas viviendas con más de 7 habitaciones y precios elevados, posiblemente propiedades de lujo o con características especiales.
e) Zona vs. Precio:
plot_ly(base1, x = ~zona, y = ~preciom, type = "box") %>%
layout(title = "Zona vs. Precio", xaxis = list(title = "Zona"), yaxis = list(title = "Precio"))Observaciones clave:
Distribución de precios La mediana del precio está alrededor de los 350 - 400 millones. El rango intercuartílico muestra que la mayoría de las viviendas están entre 200 y 600 millones. Existen precios desde valores muy bajos hasta más de 2000 millones.
Valores atípicos (outliers) Hay muchos puntos por encima de los 1000 millones, lo que indica la presencia de viviendas con precios significativamente más altos que el resto. Estas propiedades pueden corresponder a casas de lujo o con características especiales.
Rango de precios Los bigotes del diagrama indican que la mayoría de los precios están debajo de los 1000 millones, pero hay propiedades que superan ampliamente este valor.
Correlación
# Seleccionar solo las variables numéricas
variables_numericas <- base1[, c("preciom", "areaconst", "banios", "habitaciones")]
# Calcular la matriz de correlación
matriz_correlacion <- cor(variables_numericas, use = "complete.obs")
# Visualizar la matriz de correlación
corrplot(matriz_correlacion, method = "number")Interpretación del cuadro de correlación:
a. preciom vs. areaconst: Correlación: 0.73 Interpretación: Existe una correlación positiva fuerte entre el precio de la vivienda y el área construida. Esto significa que a medida que aumenta el área construida, el precio de la vivienda tiende a aumentar.
b. preciom vs. banios: Correlación: 0.52 Interpretación: Existe una correlación positiva moderada entre el precio de la vivienda y el número de baños. A más baños, tiende a haber un precio más alto.
c. preciom vs. habitaciones: Correlación: 0.32 Interpretación: Existe una correlación positiva débil entre el precio de la vivienda y el número de habitaciones. Aunque hay una tendencia positiva, la relación no es tan fuerte como con el área construida o el número de baños.
d. areaconst vs. banios: Correlación: 0.46 Interpretación: Existe una correlación positiva moderada entre el área construida y el número de baños. Las viviendas más grandes tienden a tener más baños.
e. areaconst vs. habitaciones: Correlación: 0.38 Interpretación: Existe una correlación positiva débil entre el área construida y el número de habitaciones.
f. banios vs. habitaciones: correlación: 0.58 interpretación: existe una correlación positiva moderada entre el numero de baños y el numero de habitaciones.
Observaciones generales:
La variable que tiene la correlación más fuerte con el precio de la vivienda es el área construida. Todas las correlaciones son positivas, lo que indica que a medida que aumentan las variables independientes (área construida, baños, habitaciones), el precio de la vivienda también tiende a aumentar.
Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, número de cuartos, número de parqueaderos, número 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 𝑅2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).
# Ajustar el modelo de regresión lineal múltiple
modelo <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = base1)
# Mostrar los resultados del modelo
summary(modelo)##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = base1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -954.94 -72.39 -15.35 46.24 1076.58
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 26.56950 17.70444 1.501 0.1339
## areaconst 0.81832 0.04308 18.997 < 2e-16 ***
## estrato4 82.43683 17.36272 4.748 2.48e-06 ***
## estrato5 133.31930 16.48656 8.087 2.63e-15 ***
## estrato6 327.64135 26.46822 12.379 < 2e-16 ***
## habitaciones 1.14796 4.11279 0.279 0.7802
## parqueaderos 9.23613 5.23414 1.765 0.0781 .
## banios 24.81715 5.36415 4.626 4.42e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 156.6 on 714 degrees of freedom
## Multiple R-squared: 0.6626, Adjusted R-squared: 0.6593
## F-statistic: 200.3 on 7 and 714 DF, p-value: < 2.2e-16
Interpretación General
Se ha ajustado un modelo de regresión lineal múltiple para predecir el precio de las viviendas (preciom) en función del área construida (areaconst), el estrato (estrato), el número de habitaciones (habitaciones), el número de parqueaderos (parqueaderos) y el número de baños (banios).
R² Múltiple: El modelo explica aproximadamente el 66.26% de la varianza en el precio de las viviendas (R² = 0.6626). Esto indica un ajuste moderadamente bueno.
Significancia general del modelo: El valor p del estadístico F es muy bajo (< 2.2e-16), lo que indica que el modelo en su conjunto es estadísticamente significativo.
Interpretación de los coeficientes
(Intercepto): El intercepto es 26.56950. No es estadísticamente significativo (p = 0.1339). Su interpretación sería el precio esperado de una vivienda cuando todas las variables independientes son cero, lo cual no tiene mucho sentido práctico en este contexto.
areaconst: Por cada unidad adicional de área construida, el precio de la vivienda aumenta en 0.81832 unidades, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p < 2e-16).
estrato4: En comparación con el estrato de referencia (que no se muestra, asumiendo que es el estrato 3), las viviendas en el estrato 4 tienen un precio promedio 82.43683 unidades mayor, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p = 2.48e-06).
estrato5: En comparación con el estrato de referencia, las viviendas en el estrato 5 tienen un precio promedio 133.31930 unidades mayor, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p < 2e-16).
estrato6: En comparación con el estrato de referencia, las viviendas en el estrato 6 tienen un precio promedio 327.64135 unidades mayor, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p < 2e-16).
habitaciones: El número de habitaciones no tiene un efecto estadísticamente significativo en el precio (p = 0.7802).
parqueaderos: El número de parqueaderos tiene un efecto marginalmente significativo en el precio (p = 0.0781). Por cada parqueadero adicional, el precio aumenta en 9.23613 unidades, manteniendo constantes las demás variables.
banios: Por cada baño adicional, el precio de la vivienda aumenta en 24.81715 unidades, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p = 4.42e-06).
Discusión y lógica de los resultados:
Los resultados son en gran medida lógicos. El área construida, el estrato y el número de baños tienen un efecto positivo y significativo en el precio, lo cual es consistente con las expectativas.
Habitaciones y parqueaderos: La falta de significancia del número de habitaciones y la significancia marginal del número de parqueaderos podrían indicar que estas variables no son predictores fuertes del precio en este conjunto de datos, o que su efecto está capturado por otras variables.
Estrato: Los estratos más altos tienen un efecto positivo y significativo en el precio, lo cual es consistente con la idea de que las viviendas en estratos más altos tienden a ser más caras.
Ajuste del modelo e implicaciones:
Ajuste moderado: El R² de 0.6626 indica que el modelo explica una parte considerable de la varianza en el precio, pero aún hay margen de mejora.
Posibles mejoras:
Variables adicionales: Incluir otras variables relevantes, como la antigüedad de la vivienda, el estado de conservación, la ubicación específica dentro de la zona, etc.
Transformaciones: Transformar las variables (por ejemplo, usar logaritmos) para linealizar las relaciones.
Interacciones: Considerar interacciones entre las variables independientes.
Valores atípicos: Investigar y tratar los valores atípicos que puedan estar afectando el modelo.
En resumen:
El modelo de regresión lineal múltiple proporciona información valiosa sobre los factores que influyen en el precio de las viviendas. El área construida, el estrato y el número de baños son predictores importantes. Sin embargo, el modelo podría mejorarse incluyendo variables adicionales, transformando las variables y considerando interacciones.
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).
Este gráfico muestra la relación entre los residuos (los errores del modelo) y los valores predichos por el modelo.
Elementos del gráfico:
- Eje X (horizontal): Valores predichos (Fitted values). Representan las predicciones del modelo para el precio de las viviendas.
- Eje Y (vertical): Residuos (Residuals). Representan la diferencia entre el precio real de las viviendas y los precios predichos por el modelo.
- Puntos: Cada punto representa un residuo para una vivienda específica.
- Línea roja: Línea horizontal en 0. Representa el valor promedio de los residuos.
Interpretación:
- Distribución aleatoria: En el gráfico, parece haber una distribución bastante aleatoria, lo cual es bueno.
- Homocedasticidad: La dispersión parece ser relativamente constante, lo cual sugiere que se cumple el supuesto de homocedasticidad.
- Valores atípicos: Se pueden observar algunos valores atípicos (puntos alejados de la tendencia general), como los puntos etiquetados como 208, 513 y 632. Estos valores atípicos podrían indicar viviendas con características inusuales o errores en los datos.
Implicaciones:
- Linealidad: La distribución aleatoria de los residuos sugiere que se cumple el supuesto de linealidad.
- Homocedasticidad: La varianza constante de los residuos sugiere que se cumple el supuesto de homocedasticidad.
- Valores atípicos: Los valores atípicos identificados podrían afectar la precisión del modelo. Se podría considerar investigar estos valores y determinar si es necesario eliminarlos o tratarlos de alguna manera.
##
## Durbin-Watson test
##
## data: modelo
## DW = 1.688, p-value = 9.791e-06
## alternative hypothesis: true autocorrelation is greater than 0
La prueba de Durbin-Watson con un valor DW de 1.688 y un valor p de 9.791e-06 indica que hay evidencia de autocorrelación positiva en los residuos, lo que sugiere que el supuesto de independencia de los residuos no se cumple en este modelo.
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.82702, p-value < 2.2e-16
El gráfico Q-Q muestra que los residuos se desvían de la línea diagonal, especialmente en las colas, lo que sugiere que los residuos no siguen una distribución normal perfecta. Esto se confirma con la prueba de Shapiro-Wilk, donde se observa un valor W de 0.82702 y un valor p menor a 2.2e-16, lo que indica que los residuos no son normales y que la hipótesis nula de normalidad es rechazada. Se observan algunos valores atípicos notables, como los puntos etiquetados 208, 513 y 632, que contribuyen a esta desviación.
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 137.46, df = 7, p-value < 2.2e-16
La prueba de Breusch-Pagan, con un estadístico BP de 137.46 y un valor p menor a 2.2e-16, indica que hay evidencia de heterocedasticidad en los residuos. Esto significa que la varianza de los errores no es constante a lo largo de los valores predichos, lo que viola uno de los supuestos clave de la regresión lineal.
## GVIF Df GVIF^(1/(2*Df))
## areaconst 1.523647 1 1.234361
## estrato 1.555096 3 1.076365
## habitaciones 1.660296 1 1.288525
## parqueaderos 1.226016 1 1.107256
## banios 1.963375 1 1.401205
Los valores del Factor de Inflación de la Varianza (VIF) para todas las variables independientes (área construida, estrato, habitaciones, parqueaderos y baños) son relativamente bajos, todos por debajo de 2. Esto sugiere que no hay evidencia de multicolinealidad significativa en el modelo, lo que indica que las variables independientes no están altamente correlacionadas entre sí y que podemos confiar en la estabilidad de los coeficientes de regresión.
Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
Predicción para estrato 4:
# Crear un nuevo dataframe con las características de la vivienda
nueva_vivienda <- data.frame(
areaconst = 200,
estrato = factor("4", levels = levels(base1$estrato)),
habitaciones = 4,
parqueaderos = 1,
banios = 2
)
# Realizar la predicción
prediccion <- predict(modelo, newdata = nueva_vivienda)
# Mostrar la predicción
print(prediccion)## 1
## 336.1336
# Extraer el valor numérico de la predicción
precio_predicho <- prediccion[1]
# Imprimir el precio predicho con formato (en millones)
cat("El precio predicho de la vivienda con estrato 4 es:", precio_predicho, "millones\n")## El precio predicho de la vivienda con estrato 4 es: 336.1336 millones
Predicción para estrato 5:
# Crear un nuevo dataframe con las características de la vivienda
nueva_vivienda <- data.frame(
areaconst = 200,
estrato = factor("5", levels = levels(base1$estrato)),
habitaciones = 4,
parqueaderos = 1,
banios = 2
)
# Realizar la predicción
prediccion <- predict(modelo, newdata = nueva_vivienda)
# Mostrar la predicción
print(prediccion)## 1
## 387.0161
# Extraer el valor numérico de la predicción
precio_predicho <- prediccion[1]
# Imprimir el precio predicho con formato (en millones)
cat("El precio predicho de la vivienda con estrato 5 es:", precio_predicho, "millones\n")## El precio predicho de la vivienda con estrato 5 es: 387.0161 millones
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.
vivienda1 <- subset(base1, preciom <= 350 & areaconst >= 200 & parqueaderos >= 1 & banios >= 2 & habitaciones >= 4 & (estrato == 4 | estrato == 5))
# Ordenar el subset por areaconst y preciom de forma descendente
vivienda1 <- vivienda1[order(-vivienda1$areaconst, -vivienda1$preciom), ]
# Extraer las 3 primeras filas
top_3_viviendas_areaconst <- vivienda1[1:3, ]
vivienda1 <- vivienda1[order(vivienda1$preciom), ]
top_2_viviendas_preciom <- vivienda1[1:2, ]
# Combinar los dataframes
top_5_viviendas <- rbind(top_3_viviendas_areaconst, top_2_viviendas_preciom)
top_5_viviendas <- top_5_viviendas[order(-top_5_viviendas$areaconst, -top_5_viviendas$preciom), ]
# Mostrar el nuevo dataframe
top_5_viviendasAnálisis de las Ofertas Potenciales
Resumen de los Datos Obtenidos
La tabla muestra 5 opciones de vivienda en la Zona Norte de Cali con los siguientes atributos clave:
Todas las opciones cumplen con el criterio de precio máximo de 350 millones de pesos aprobado por la empresa.
ofertaFinal1 <- select(top_5_viviendas, longitud, latitud)
icono_personalizado <- makeIcon(
iconUrl = "location_icon.png",
iconWidth = 30,
iconHeight = 30,
iconAnchorX = 15,
iconAnchorY = 30
)
# Crea un mapa
map1 <- leaflet(ofertaFinal1) %>%
addTiles() %>%
addMarkers(
lng = ~longitud,
lat = ~latitud,
popup = ~as.character(latitud), # Puedes personalizar el contenido del popup aquí
icon = icono_personalizado
)
map1Discusión y Recomendaciones
Criterios para sugerir las mejores ofertas:
Barrios céntricos como San Vicente y Vipasa pueden tener mejor conectividad con transporte y servicios. El Bosque y Salomia pueden ofrecer mayor tranquilidad y espacios más amplios.
La vivienda en San Vicente tiene la mayor área construida (355 m²) con 8 habitaciones, lo cual puede ser una ventaja dependiendo del uso previsto. La opción en Vipasa tiene menos habitaciones pero aún una buena distribución.
Si el cliente requiere más parqueaderos, San Vicente, La Merced y Vipasa pueden ser mejores opciones. Si busca más baños, San Vicente es la mejor opción con 5 baños.
Conclusión
Las opciones más recomendadas dependen de la prioridad del comprador:
Realice los pasos del 1 al 6. Para la segunda solicitud que tiene un crédito pre-aprobado por valor de $850 millones.
Realice un filtro a la base de datos e incluya solo las ofertas de : base2: apartamentos, 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?).
oferta2 <- select(base2, longitud, latitud)
icono_personalizado <- makeIcon(
iconUrl = "location_icon.png",
iconWidth = 15,
iconHeight = 15,
iconAnchorX = 8,
iconAnchorY = 15
)
# Crea un mapa
map2 <- leaflet(oferta2) %>%
addTiles() %>%
addMarkers(
lng = ~longitud,
lat = ~latitud,
popup = ~as.character(latitud), # Puedes personalizar el contenido del popup aquí
icon = icono_personalizado
)
map2Análisis de resultados base2
Efectivamente evidenciamos que existen varios puntos por fuera de la zona sur de la ciudad, esto puede deberse a:
Rango de coordenadas de la Zona Sur:
Este rango parece alinearse con la zona sur de Cali. Sin embargo, si hay puntos fuera de estas coordenadas en el mapa, podría haber datos mal clasificados.
# Filtrar solo las viviendas de la Zona Sur
zona_sur <- dataLimpia %>% filter(zona == "Zona Sur")
# Definir límites esperados para la Zona Sur en Cali
lat_min_sur <- 3.32 # Límite inferior de latitud
lat_max_sur <- 3.39 # Límite superior de latitud
lon_min_sur <- -76.58 # Límite izquierdo de longitud
lon_max_sur <- -76.48 # Límite derecho de longitud
# Identificar viviendas fuera del rango esperado
fuera_rango_sur <- zona_sur %>%
filter(latitud < lat_min_sur | latitud > lat_max_sur |
longitud < lon_min_sur | longitud > lon_max_sur)
# Contar cuántos registros están fuera de los límites
n_fuerarango_sur <- nrow(fuera_rango_sur)
print(paste("Número de viviendas fuera de la zona esperada en el Sur:", n_fuerarango_sur))## [1] "Número de viviendas fuera de la zona esperada en el Sur: 2098"
Seguimos evidenciando errores de clasificación por zona, en esta ocasión se encontraron que 2098 viviendas etiquetadas como “Zona Sur” no están dentro de los límites geográficos esperados. Lo que nos lleva a sugerir y validar que algunos registros pueden estar mal clasificados.
Análisis de Coordenadas Anómalas Zona Sur
El siguiente gráfico muestra que la mayoría de las viviendas en la Zona Sur (puntos verdes) están dentro del rango esperado. Sin embargo, los puntos coarl representan viviendas que, a pesar de estar categorizadas como “Zona Sur”, están ubicadas fuera del área.
# Graficar la distribución de viviendas en la Zona Sur
ggplot() +
geom_point(data = zona_sur, aes(x = longitud, y = latitud), color = "green", alpha = 0.5) +
geom_point(data = fuera_rango, aes(x = longitud, y = latitud), color = "coral", size = 2) +
geom_vline(xintercept = c(lon_min_sur, lon_max_sur), linetype = "dashed") +
geom_hline(yintercept = c(lat_min_sur, lat_max_sur), linetype = "dashed") +
labs(title = "Distribución de Viviendas en la Zona Sur de Cali",
subtitle = paste(n_fuerarango_sur, "viviendas fuera de los límites esperados"),
x = "Longitud", y = "Latitud") +
theme_minimal()Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio de la casa) 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.
base2$zona <- as.factor(base2$zona)
base2$habitaciones <- as.numeric(base2$habitaciones)
base2$banios <- as.numeric(base2$banios)a) Área construida vs. Precio:
ggplot(base2, aes(x = areaconst, y = preciom)) +
geom_point(aes(color = factor(estrato))) +
theme_minimal() +
labs(title = "Relación entre área construida y precio (Apartamentos Sur)")Este es un diagrama de dispersión muestra la relación entre el área construida (areaconst) y el precio (precio) de los apartamentos en la zona sur, diferenciados por estrato socioeconómico.
Observaciones clave:
Existe una relación positiva entre el área construida y el precio: a mayor área, mayor precio. Sin embargo, hay bastante dispersión en los datos, lo que indica que otros factores también influyen en el precio.
Los apartamentos de estrato 6 (púrpura) tienen los precios más altos y suelen tener áreas más grandes. Los de estrato 3 (rojo) y estrato 4 (verde) se concentran en áreas menores a 150 m² y precios por debajo de 500 millones. El estrato 5 (azul) tiene una distribución intermedia, con algunos apartamentos grandes que alcanzan precios elevados.
Se observan algunos puntos con áreas mayores a 500 m², pero con precios relativamente bajos. Podría tratarse de datos atípicos o propiedades con características especiales.
b) Estrato vs. Precio:
plot_ly(base2, x = ~estrato, y = ~preciom, type = "box", color = ~factor(estrato)) %>%
layout(title = "Estrato vs. Precio",
xaxis = list(title = "Estrato"),
yaxis = list(title = "Precio"))Este es un diagrama de caja y bigotes (boxplot) que muestra la distribución del precio de los apartamentos según el estrato socioeconómico.
El precio de los apartamentos aumenta con el estrato, y la variabilidad del precio también es mayor en estratos altos.
Para estratos 3 y 4, los precios son más homogéneos.
En estratos 5 y 6, hay una mayor dispersión y presencia de valores atípicos, lo que indica una oferta más diversa en términos de calidad y ubicación.
c) Número de baños vs. Precio:
p2 <- ggplot(base2, aes(x = banios, y = preciom, color = factor(estrato))) +
geom_jitter(width = 0.2) +
theme_minimal() +
labs(title = "Relación entre Número de Baños y Precio (Apartamentos sur)",
x = "Número de Baños",
y = "Precio (millones)",
color = "Estrato")
ggplotly(p2)Este gráfico de dispersión muestra la relación entre el número de baños y el precio de los apartamentos, diferenciados por estrato socioeconómico.
Los apartamentos con más baños tienden a ser más costosos, especialmente en estratos altos (5 y 6).
Para apartamentos de estrato 3 y 4, la mayoría tiene entre 1 y 2 baños y precios más controlados.
En estratos altos, el número de baños es un buen indicador de segmento de lujo, pues hay más propiedades con 4 o más baños y precios elevados.
d) Número de habitaciones vs. Precio:
p3 <- ggplot(base2, aes(x = habitaciones, y = preciom, color = factor(estrato))) +
geom_jitter(width = 0.2) +
theme_minimal() +
labs(title = "Relación entre Número de Habitaciones y Precio (Apartamentos Sur)",
x = "Número de Habitaciones",
y = "Precio (millones)",
color = "Estrato")
ggplotly(p3)Este gráfico de dispersión muestra la relación entre el número de habitaciones y el precio de los apartamentos, diferenciados por estrato socioeconómico.
Los apartamentos con más habitaciones tienden a ser más costosos, especialmente en estratos altos (5 y 6).
La relación entre habitaciones y precio es similar a la de los baños, aunque con más dispersión.
En estratos altos, un mayor número de habitaciones puede ser un indicador de exclusividad y lujo.
En estratos más bajos, la cantidad de habitaciones no impacta tanto en el precio como en estratos altos.
e) Zona vs. Precio:
plot_ly(base2, x = ~zona, y = ~preciom, type = "box") %>%
layout(title = "Zona vs. Precio", xaxis = list(title = "Zona"), yaxis = list(title = "Precio"))Este gráfico de cajas muestra la distribución de precios de los apartamentos en la Zona Sur de Cali. Aunque la zona es única en el conjunto de datos base2, los precios presentan una variabilidad significativa. La mayoría de los apartamentos se encuentran entre 150 y 400 millones, con una mediana que representa el precio típico. Sin embargo, la presencia de valores atípicos sugiere la existencia de apartamentos de alto valor, lo que indica que factores como la ubicación específica, las características del edificio o las vistas podrían influir en la determinación del precio.
Correlación
# Seleccionar solo las variables numéricas
variables_numericas <- base2[, c("preciom", "areaconst", "banios", "habitaciones")]
# Calcular la matriz de correlación
matriz_correlacion <- cor(variables_numericas, use = "complete.obs")
# Visualizar la matriz de correlación
corrplot(matriz_correlacion, method = "number")Interpretación del cuadro de correlación:
a preciom vs. areaconst: Correlación: 0.76 Interpretación: Existe una correlación positiva fuerte entre el precio y el área construida. Esto confirma lo que vimos en el gráfico de dispersión: a mayor área, mayor precio. Esta correlación es muy relevante en el contexto de apartamentos, donde el tamaño es un factor clave en el valor.
b preciom vs. banios: Correlación: 0.72 Interpretación: Hay una correlación positiva fuerte entre el precio y el número de baños. Esto sugiere que los apartamentos con más baños tienden a ser más caros. Este resultado también se alinea con lo observado en el gráfico de cajas, donde vimos que el precio aumenta con el número de baños.
c preciom vs. habitaciones: Correlación: 0.33 Interpretación: Existe una correlación positiva débil entre el precio y el número de habitaciones. Aunque hay una tendencia positiva, la relación no es tan fuerte como con el área construida o los baños. Esto podría deberse a que, en el contexto de apartamentos, el número de habitaciones no es tan determinante como el área o los baños.
d areaconst vs. banios: Correlación: 0.66 Interpretación: Hay una correlación positiva moderada entre el área construida y el número de baños. Los apartamentos más grandes tienden a tener más baños. Este resultado es coherente con la lógica constructiva, donde a mayor area, mayor numero de baños.
e areaconst vs. habitaciones: Correlación: 0.43 Interpretación: Existe una correlación positiva moderada entre el área construida y el número de habitaciones. Este resultado también es coherente con la lógica constructiva, donde a mayor area, mayor numero de habitaciones.
f banios vs. habitaciones: Correlación: 0.51 Interpretación: Existe una correlación positiva moderada entre el número de baños y el número de habitaciones. Este resultado también es coherente con la lógica constructiva, donde a mayor numero de habitaciones, mayor numero de baños.
Observaciones generales:
La matriz de correlación revela que el área construida y el número de baños son los predictores más fuertes del precio de los apartamentos en la Zona Sur de Cali, mostrando correlaciones positivas significativas, mientras que el número de habitaciones tiene una influencia más débil; las correlaciones moderadas entre las variables independientes indican una baja probabilidad de multicolinealidad, y en conjunto, estos resultados validan las tendencias observadas en los gráficos previos, subrayando la importancia del tamaño y las comodidades de los apartamentos en la determinación de su valor en esta área específica.
Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, número de cuartos, número de parqueaderos, número 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 𝑅2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).
# Ajustar el modelo de regresión lineal múltiple
modelo <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = base2)
# Mostrar los resultados del modelo
summary(modelo)##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = base2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1096.93 -35.43 -2.08 34.61 894.26
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -43.32991 10.13354 -4.276 1.97e-05 ***
## areaconst 1.33359 0.04576 29.142 < 2e-16 ***
## estrato4 28.96511 6.86300 4.220 2.52e-05 ***
## estrato5 54.59210 7.08763 7.702 1.84e-14 ***
## estrato6 209.07531 8.88859 23.522 < 2e-16 ***
## habitaciones -11.54029 3.16593 -3.645 0.000272 ***
## parqueaderos 61.62033 3.50854 17.563 < 2e-16 ***
## banios 38.25237 2.85475 13.400 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 87.6 on 2779 degrees of freedom
## Multiple R-squared: 0.7914, Adjusted R-squared: 0.7909
## F-statistic: 1506 on 7 and 2779 DF, p-value: < 2.2e-16
Interpretación General
Se ha ajustado un modelo de regresión lineal múltiple para predecir el precio de los apartamentos (preciom) en la Zona Sur de Cali, en función del área construida (areaconst), el estrato (estrato), el número de habitaciones (habitaciones), el número de parqueaderos (parqueaderos) y el número de baños (banios).
R² Múltiple: El modelo explica aproximadamente el 79.14% de la varianza en el precio de los apartamentos (R² = 0.7914). Esto indica un ajuste bastante bueno.
Significancia general del modelo: El valor p del estadístico F es muy bajo (< 2.2e-16), lo que indica que el modelo en su conjunto es estadísticamente significativo. 2. Interpretación de los coeficientes:
(Intercepto): El intercepto es -43.32991. Es estadísticamente significativo (p = 1.97e-05). En este contexto, no tiene una interpretación práctica directa, ya que representaría el precio de un apartamento con todas las variables independientes iguales a cero, lo cual no es realista.
areaconst: Por cada unidad adicional de área construida, el precio del apartamento aumenta en 1.33359 unidades, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p < 2e-16).
estrato4: En comparación con el estrato de referencia (estrato 3), los apartamentos en el estrato 4 tienen un precio promedio 28.96511 unidades mayor, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p = 2.52e-05).
estrato5: En comparación con el estrato de referencia, los apartamentos en el estrato 5 tienen un precio promedio 54.59210 unidades mayor, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p = 1.84e-14).
estrato6: En comparación con el estrato de referencia, los apartamentos en el estrato 6 tienen un precio promedio 209.07531 unidades mayor, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p < 2e-16).
habitaciones: Por cada habitación adicional, el precio del apartamento disminuye en 11.54029 unidades, manteniendo constantes las demás variables. Este coeficiente es estadísticamente significativo (p = 0.000272). Este resultado es contraintuitivo y podría indicar multicolinealidad o la necesidad de incluir otras variables.
parqueaderos: Por cada parqueadero adicional, el precio del apartamento aumenta en 61.62033 unidades, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p < 2e-16).
banios: Por cada baño adicional, el precio del apartamento aumenta en 38.25237 unidades, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p < 2e-16).
Discusión y lógica de los resultados:
Resultados lógicos: Los resultados son en gran medida lógicos, con el área construida, el estrato y el número de baños teniendo un efecto positivo y significativo en el precio, lo cual es consistente con las expectativas.
Habitaciones: El efecto negativo del número de habitaciones en el precio es sorprendente y requiere mayor investigación. Podría indicar que en este subconjunto de datos (apartamentos en la Zona Sur), las habitaciones adicionales no necesariamente aumentan el valor del apartamento, o que hay otros factores correlacionados con el número de habitaciones que están afectando el precio.
Parqueaderos: El efecto positivo y significativo del número de parqueaderos es consistente con la idea de que los parqueaderos adicionales aumentan el valor de la propiedad.
Estrato: Los estratos más altos tienen un efecto positivo y significativo en el precio, lo cual es consistente con la idea de que los apartamentos en estratos más altos tienden a ser más caros.
Ajuste del modelo e implicaciones:
Buen ajuste: El R² de 0.7914 indica que el modelo explica una gran parte de la varianza en el precio, lo que sugiere un buen ajuste.
Posibles mejoras:
Variables adicionales: Investigar y posiblemente incluir otras variables relevantes que puedan explicar el efecto negativo de las habitaciones.
Interacciones: Considerar interacciones entre las variables independientes.
Valores atípicos: Investigar y tratar los valores atípicos que puedan estar afectando el modelo.
Multicolinealidad: Investigar la posible multicolinealidad entre las variables independientes, especialmente entre el número de habitaciones y otras variables.
En resumen:
El modelo de regresión lineal múltiple proporciona información valiosa sobre los factores que influyen en el precio de los apartamentos en la Zona Sur de Cali. El área construida, el estrato, el número de parqueaderos y el número de baños son predictores importantes. Sin embargo, el efecto negativo de las habitaciones requiere mayor investigación. El modelo tiene un buen ajuste, pero podría mejorarse incluyendo variables adicionales, considerando interacciones y tratando los valores atípicos.
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).
Este gráfico de residuos versus valores ajustados muestra una distribución relativamente aleatoria de los puntos alrededor de la línea horizontal en cero, lo que sugiere que el supuesto de linealidad se cumple en gran medida; sin embargo, se observa una ligera tendencia curvilínea en la parte inferior del gráfico, lo que podría indicar una posible no linealidad leve en algunos rangos de los valores predichos, y se identifican algunos valores atípicos notables, como los puntos etiquetados 1533, 441 y 2383, que podrían influir en la precisión del modelo y requerirían una investigación adicional.
##
## Durbin-Watson test
##
## data: modelo
## DW = 1.7121, p-value = 1.061e-14
## alternative hypothesis: true autocorrelation is greater than 0
La prueba de Durbin-Watson, con un valor DW de 1.7121 y un valor p de 1.061e-14, indica que existe una autocorrelación positiva significativa en los residuos, lo que sugiere que el supuesto de independencia de los residuos no se cumple en este modelo.
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.7744, p-value < 2.2e-16
El gráfico Q-Q muestra que los residuos se desvían significativamente de la línea diagonal, especialmente en las colas, lo que sugiere que no siguen una distribución normal perfecta, y esto se confirma con la prueba de Shapiro-Wilk, que arroja un valor W de 0.7744 y un valor p menor a 2.2e-16, indicando que los residuos no son normales y rechazando la hipótesis nula de normalidad; además, se observan valores atípicos notables, como los puntos etiquetados 441, 1533 y 2383, que contribuyen a esta desviación.
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 818.93, df = 7, p-value < 2.2e-16
La prueba de Breusch-Pagan, con un estadístico BP de 818.93 y un valor p menor a 2.2e-16, indica que hay evidencia de heterocedasticidad en los residuos, lo que significa que la varianza de los errores no es constante a lo largo de los valores predichos, violando así uno de los supuestos clave de la regresión lineal.
## GVIF Df GVIF^(1/(2*Df))
## areaconst 2.101039 1 1.449496
## estrato 1.815784 3 1.104530
## habitaciones 1.456102 1 1.206691
## parqueaderos 1.805577 1 1.343718
## banios 2.583448 1 1.607311
Los valores del Factor de Inflación de la Varianza (VIF) para todas las variables independientes (área construida, estrato, habitaciones, parqueaderos y baños) son relativamente bajos, todos por debajo de 3. Esto sugiere que no hay evidencia de multicolinealidad significativa en el modelo, lo que indica que las variables independientes no están altamente correlacionadas entre sí y que podemos confiar en la estabilidad de los coeficientes de regresión.
Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
Predicción para estrato 5:
# Crear un nuevo dataframe con las características de la vivienda
nueva_vivienda <- data.frame(
areaconst = 300,
estrato = factor("5", levels = levels(base2$estrato)),
habitaciones = 5,
parqueaderos = 3,
banios = 3
)
# Realizar la predicción
prediccion <- predict(modelo, newdata = nueva_vivienda)
# Mostrar la predicción
print(prediccion)## 1
## 653.2569
# Extraer el valor numérico de la predicción
precio_predicho <- prediccion[1]
# Imprimir el precio predicho con formato (en millones)
cat("El precio predicho de la vivienda con estrato 5 es:", precio_predicho, "millones\n")## El precio predicho de la vivienda con estrato 5 es: 653.2569 millones
Predicción para estrato 6:
# Crear un nuevo dataframe con las características de la vivienda
nueva_vivienda <- data.frame(
areaconst = 300,
estrato = factor("6", levels = levels(base2$estrato)),
habitaciones = 5,
parqueaderos = 3,
banios = 3
)
# Realizar la predicción
prediccion <- predict(modelo, newdata = nueva_vivienda)
# Mostrar la predicción
print(prediccion)## 1
## 807.7401
# Extraer el valor numérico de la predicción
precio_predicho <- prediccion[1]
# Imprimir el precio predicho con formato (en millones)
cat("El precio predicho de la vivienda con estrato 6 es:", precio_predicho, "millones\n")## El precio predicho de la vivienda con estrato 6 es: 807.7401 millones
Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de la vivienda 2. Tenga encuenta 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.
vivienda2 <- subset(base2, preciom <= 850 & areaconst >= 300 & parqueaderos >= 3 & banios >= 3 & habitaciones >= 5 & (estrato == 5 | estrato == 6))
# Ordenar el subset por areaconst y preciom de forma descendente
vivienda2 <- vivienda2[order(-vivienda2$areaconst, -vivienda2$preciom), ]
vivienda2Análisis de las ofertas potenciales
Comparación de precios
Comparación de características
ofertaFinal2 <- select(vivienda2, longitud, latitud)
icono_personalizado <- makeIcon(
iconUrl = "location_icon.png",
iconWidth = 30,
iconHeight = 30,
iconAnchorX = 15,
iconAnchorY = 30
)
# Crea un mapa
map2 <- leaflet(ofertaFinal2) %>%
addTiles() %>%
addMarkers(
lng = ~longitud,
lat = ~latitud,
popup = ~as.character(latitud), # Puedes personalizar el contenido del popup aquí
icon = icono_personalizado
)
map2Ubicación en el mapa
Guadalupe y Seminario son barrios cercanos dentro de la Zona Sur, lo que significa que probablemente tengan características similares en términos de movilidad, servicios y calidad de vida. Sin embargo, hay que considerar factores como la seguridad, accesibilidad a transporte y cercanía a comercios o colegios.
Conclusiones y recomendaciones
La oferta en Guadalupe es atractiva porque ofrece más área construida y más baños, aunque cuesta 60 millones más.
La oferta en Seminario es más barata, tiene más habitaciones pero menos baños, y es más compacta.
El presupuesto permite considerar más opciones, así que si ya tienes al menos 5 ofertas en el mapa, es clave analizarlas con estos criterios.
Otros aspectos a tener en cuenta: