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 | 300 |
| Parqueaderos | 1 | 3 |
| Baños | 2 | 3 |
| Habitaciones | 4 | 5 |
| Estrato | 4 o 5 | 5 o 6 |
| Zona | Norte | Sur |
| Crédito preaprobado | 350 millones | 850 millones |
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).
Se importa la base de datos utilizada en la presente actividad.
## Downloading GitHub repo dgonxalex80/paqueteMODELOS@HEAD
## utf8 (1.2.3 -> 1.2.4 ) [CRAN]
## fansi (1.0.4 -> 1.0.6 ) [CRAN]
## stringi (1.7.12 -> 1.8.3 ) [CRAN]
## rlang (1.1.1 -> 1.1.3 ) [CRAN]
## purrr (1.0.1 -> 1.0.2 ) [CRAN]
## glue (1.6.2 -> 1.7.0 ) [CRAN]
## cli (3.6.1 -> 3.6.2 ) [CRAN]
## Rcpp (1.0.10 -> 1.0.12) [CRAN]
## digest (0.6.31 -> 0.6.34) [CRAN]
## curl (5.0.1 -> 5.2.1 ) [CRAN]
## timechange (0.2.0 -> 0.3.0 ) [CRAN]
## xfun (0.39 -> 0.42 ) [CRAN]
## htmltools (0.5.5 -> 0.5.7 ) [CRAN]
## yaml (2.3.7 -> 2.3.8 ) [CRAN]
## Installing 14 packages: utf8, fansi, stringi, rlang, purrr, glue, cli, Rcpp, digest, curl, timechange, xfun, htmltools, yaml
## Warning: package 'purrr' is in use and will not be installed
## Installing packages into 'C:/Users/victo/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'utf8' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'utf8'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\utf8\libs\x64\utf8.dll a
## C:\Users\victo\AppData\Local\R\win-library\4.3\utf8\libs\x64\utf8.dll:
## Permission denied
## Warning: restored 'utf8'
## package 'fansi' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'fansi'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\fansi\libs\x64\fansi.dll
## a C:\Users\victo\AppData\Local\R\win-library\4.3\fansi\libs\x64\fansi.dll:
## Permission denied
## Warning: restored 'fansi'
## package 'stringi' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'stringi'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\stringi\libs\x64\stringi.dll
## a C:\Users\victo\AppData\Local\R\win-library\4.3\stringi\libs\x64\stringi.dll:
## Permission denied
## Warning: restored 'stringi'
## package 'rlang' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'rlang'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\rlang\libs\x64\rlang.dll
## a C:\Users\victo\AppData\Local\R\win-library\4.3\rlang\libs\x64\rlang.dll:
## Permission denied
## Warning: restored 'rlang'
## package 'glue' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'glue'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\glue\libs\x64\glue.dll a
## C:\Users\victo\AppData\Local\R\win-library\4.3\glue\libs\x64\glue.dll:
## Permission denied
## Warning: restored 'glue'
## package 'cli' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'cli'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\cli\libs\x64\cli.dll a
## C:\Users\victo\AppData\Local\R\win-library\4.3\cli\libs\x64\cli.dll: Permission
## denied
## Warning: restored 'cli'
## package 'Rcpp' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'Rcpp'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\Rcpp\libs\x64\Rcpp.dll a
## C:\Users\victo\AppData\Local\R\win-library\4.3\Rcpp\libs\x64\Rcpp.dll:
## Permission denied
## Warning: restored 'Rcpp'
## package 'digest' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'digest'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\digest\libs\x64\digest.dll
## a C:\Users\victo\AppData\Local\R\win-library\4.3\digest\libs\x64\digest.dll:
## Permission denied
## Warning: restored 'digest'
## package 'curl' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'curl'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\curl\libs\x64\curl.dll a
## C:\Users\victo\AppData\Local\R\win-library\4.3\curl\libs\x64\curl.dll:
## Permission denied
## Warning: restored 'curl'
## package 'timechange' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'timechange'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\timechange\libs\x64\timechange.dll
## a
## C:\Users\victo\AppData\Local\R\win-library\4.3\timechange\libs\x64\timechange.dll:
## Permission denied
## Warning: restored 'timechange'
## package 'xfun' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'xfun'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\xfun\libs\x64\xfun.dll a
## C:\Users\victo\AppData\Local\R\win-library\4.3\xfun\libs\x64\xfun.dll:
## Permission denied
## Warning: restored 'xfun'
## package 'htmltools' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'htmltools'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\htmltools\libs\x64\htmltools.dll
## a
## C:\Users\victo\AppData\Local\R\win-library\4.3\htmltools\libs\x64\htmltools.dll:
## Permission denied
## Warning: restored 'htmltools'
## package 'yaml' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'yaml'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\victo\AppData\Local\R\win-library\4.3\00LOCK\yaml\libs\x64\yaml.dll a
## C:\Users\victo\AppData\Local\R\win-library\4.3\yaml\libs\x64\yaml.dll:
## Permission denied
## Warning: restored 'yaml'
##
## The downloaded binary packages are in
## C:\Users\victo\AppData\Local\Temp\Rtmp6tlPvd\downloaded_packages
## ── R CMD build ─────────────────────────────────────────────────────────────────
##
✔ checking for file 'C:\Users\victo\AppData\Local\Temp\Rtmp6tlPvd\remotes1be8140f6113\dgonxalex80-paqueteMODELOS-796f588/DESCRIPTION' (455ms)
##
─ preparing 'paqueteMODELOS': (4.2s)
## checking DESCRIPTION meta-information ...
✔ checking DESCRIPTION meta-information
##
─ checking for LF line-endings in source and make files and shell scripts
##
─ checking for empty or unneeded directories
##
─ building 'paqueteMODELOS_0.1.0.tar.gz'
##
##
## Installing package into 'C:/Users/victo/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## Loading required package: boot
##
## Attaching package: 'boot'
## The following object is masked from 'package:psych':
##
## logit
## Loading required package: broom
## Loading required package: GGally
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## Loading required package: gridExtra
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
## Loading required package: knitr
## Loading required package: summarytools
##
## Attaching package: 'summarytools'
## The following object is masked from 'package:tibble':
##
## view
# Convierto la tibble a un tibble estándar
vivienda_standard <- as_tibble(vivienda)
# Analizo el tipo de atributos de la variable vivienda
str(vivienda_standard)## tibble [8,322 × 13] (S3: 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 ...
La base de datos vivienda cuenta con 8322 registros y 13 variables, las cuales estan conformadas de la siguiente forma:
Se presentan las estaísticas descriptivas para cada una de las variables númericas.
## 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
A continución se verifica si la base de dtos contiene datos faltantes.
# Cuento el número de valores N/A en cada variable de la variable vivienda.
vivienda %>%
summarise_all(list(~ sum(is.na(.))))# Calculo el porcentaje de valores perdidos por columna
missing_percentage <- colMeans(is.na(vivienda)) * 100
# Creo un data frame con la información
missing_data <- data.frame(variable = names(missing_percentage), pct_missing = missing_percentage)
# Creo el gráfico de barras
ggplot(missing_data, aes(x = reorder(variable, -pct_missing), y = pct_missing)) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
geom_text(aes(label = sprintf("%.1f%%", pct_missing)), vjust = -0.5) +
labs(title = "Porcentaje de valores perdidos por variable",
x = "Variable",
y = "Porcentaje de valores perdidos") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
ylim(c(0, 35))
Como se puede observar, la variable piso contiene más del 20% de los
datos faltantes; sin embargo, y dado que esta variable no se utilizará
en esta actividad, se eliminará de la base de datos. Con respecto a la
variable parqueaderos, ya que no excede el 20% de datos faltantes, estos
se omitirán. Esta decisión se tomó debido a que no se sabe si estos
datos están nulos porque las viviendas no tenían parqueadero o porque se
les olvidó completar este registro.
#Elimino la variable piso
vivienda2 <- vivienda[, !(names(vivienda) %in% c("piso"))]
# Muestra las primeras 5 filas del nuevo data frame
head(vivienda2, 5)# Omito los datos faltes en las otras variables
viviendaclean=na.omit(vivienda2)
md.pattern(viviendaclean, rotate.names = TRUE)## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
## id zona estrato preciom areaconst parqueaderos banios habitaciones tipo
## 6717 1 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0 0
## barrio longitud latitud
## 6717 1 1 1 0
## 0 0 0 0
Como se puede observar en el gráfico ya no hay valores nulos o datos faltantes.
| Características | Vivienda 1 |
|---|---|
| Tipo | Casa |
| Área construida | 200 |
| Parqueaderos | 1 |
| Baños | 2 |
| Habitaciones | 4 |
| Estrato | 4 o 5 |
| Zona | Norte |
| Crédito preaprobado | 350 millones |
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?).
# Se realiza el filtro de la base de datos donde se incluyen solo las casa de zona norte de la ciudad.
base1 <- viviendaclean[viviendaclean$zona == "Zona Norte" & viviendaclean$tipo == "Casa", ]
# Muestro los primeros 3 registros del nuevo data frame
head(base1, 3)# Se realizan tablas que comprueban la consulta
#Tabla de frecuencia para la columa "zona"
tabla_zona <- table(base1$zona)
print(tabla_zona)##
## Zona Norte
## 435
# Se realizan tablas que comprueban la consulta
#Tabla de frecuencia para la columa "tipo"
tabla_tipo <- table(base1$tipo)
print(tabla_tipo)##
## Casa
## 435
En la zona norte hay 435 casas.
# Filtro solo las bases en Zona Norte para el mapa
bases_zona_norte <- base1[base1$zona == "Zona Norte", ]
# Creo el mapa con leaflet
mapa_bases_leaflet <- leaflet(data = bases_zona_norte) %>%
addTiles() %>% # Añadir capa de teselas (tiles) para el mapa base
addCircleMarkers(
~longitud, ~latitud,
radius = 3, color = "purple",
popup = ~paste(
"Tipo:", tipo, "<br>Zona:", zona,
"<br>Área Construida:", areaconst,
"<br>Parqueaderos:", parqueaderos,
"<br>Baños:", banios,
"<br>Barrio:", barrio,
"<br>Habitaciones:", habitaciones,
"<br>Estrato:", estrato
)
) %>%
setView(lng = mean(bases_zona_norte$longitud), lat = mean(bases_zona_norte$latitud), zoom = 12) # Ajustar la vista del mapa
# Visualizo el mapa
mapa_bases_leafletDespués de una detallada revisión del mapa, se evidencian algunos puntos que no se encuentran ubicados en la zona norte, lo cual sugiere la posibilidad de un error durante el proceso de diligenciamiento de las coordenadas. Se identificaron viviendas que no corresponden a la zona norte, y entre ellas se destacan las siguientes:
Vivienda en el barrio Juanambú:
Esta vivienda está catalogada erróneamente, ya que el barrio Juanambú pertenece a la zona sur de la ciudad de Cali. La discrepancia podría atribuirse a un descuido al ingresar las coordenadas o una confusión en la asignación de la zona.
Vivienda en el barrio Acopi:
Se identificó otra vivienda ubicada en el barrio Acopi, que también es parte de la zona sur. Similar al caso anterior, la presencia de esta vivienda en la zona norte podría deberse a una equivocación al registrar las coordenadas geográficas.
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.
# Selecciono las variables de interés
variables_interes <- base1[, c("preciom", "areaconst", "parqueaderos", "banios", "habitaciones")]
# Calculo la matriz de correlación
matriz_correlacion <- cor(variables_interes)
# Creo una tabla con los coeficientes de correlación
tabla_correlacion <- as.table(matriz_correlacion)
# Muestro la tabla
tabla_correlacion## preciom areaconst parqueaderos banios habitaciones
## preciom 1.0000000 0.6853915 0.4116620 0.5086427 0.3650859
## areaconst 0.6853915 1.0000000 0.3069709 0.4574766 0.4206897
## parqueaderos 0.4116620 0.3069709 1.0000000 0.3918638 0.2413962
## banios 0.5086427 0.4574766 0.3918638 1.0000000 0.5903821
## habitaciones 0.3650859 0.4206897 0.2413962 0.5903821 1.0000000
# Asegúrate de tener el paquete corrplot instalado y cargado
# install.packages("corrplot")
library(corrplot)## corrplot 0.92 loaded
# Seleccionar las variables de interés
variables_interes <- base1[, c("preciom", "areaconst", "parqueaderos", "banios", "habitaciones")]
# Calcular la matriz de correlación
matriz_correlacion <- cor(variables_interes)
# Crear una representación visual de la matriz de correlación
corrplot(matriz_correlacion, method = "color", type = "upper", order = "hclust")# Asegúrate de tener el paquete plotly instalado y cargado
# install.packages("plotly")
library(plotly)
# Seleccionar las variables de interés
variables_interes <- base1[, c("preciom", "areaconst", "parqueaderos", "banios", "habitaciones")]
# Calcular la matriz de correlación
matriz_correlacion <- cor(variables_interes)
# Crear un gráfico de heatmap interactivo con plotly
heatmap_plotly <- plot_ly(z = matriz_correlacion, type = "heatmap", colorscale = "Viridis")
# Mostrar el gráfico
heatmap_plotly