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 (m²) | 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) .
Los datos de los tres últimos meses se adjuntan en la base que puede obtener con el siguiente código en R
| Variable | Descripción |
|---|---|
| zona | Ubicación de la vivienda: Zona Centro, Zona Norte,… |
| piso | Piso que ocupa la vivienda: primer piso, segundo piso… |
| estrato | Estrato socio-económico: 3, 4, 5, 6 |
| preciom | Precio de la vivienda en millones de pesos |
| areaconst | Área construida |
| parqueaderos | Número de parqueaderos |
| banios | Número de baños |
| habitaciones | Número de habitaciones |
| tipo | Tipo de vivienda: Casa, Apartamento |
| barrio | Barrio de ubicación de la vivienda: 20 de Julio, Álamos,… |
| longitud | Coordenada geográfica (longitud) |
| latitud | Coordenada geográfica (latitud) |
# Configurar un mirror de CRAN
options(repos = c(CRAN = "https://cran.rstudio.com/"))
# Cargar datos
install.packages("devtools") # solo la primera vez
devtools::install_github("centromagis/paqueteMODELOS", force = TRUE)
## Warning: cannot remove prior installation of package 'stringi'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\00LOCK\stringi\libs\x64\stringi.dll
## a
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\stringi\libs\x64\stringi.dll:
## Permission denied
## Warning: restored 'stringi'
## Warning: cannot remove prior installation of package 'rlang'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\00LOCK\rlang\libs\x64\rlang.dll
## a C:\Users\Vladimir\AppData\Local\R\win-library\4.3\rlang\libs\x64\rlang.dll:
## Permission denied
## Warning: restored 'rlang'
## Warning: cannot remove prior installation of package 'cli'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\00LOCK\cli\libs\x64\cli.dll a
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\cli\libs\x64\cli.dll:
## Permission denied
## Warning: restored 'cli'
## Warning: cannot remove prior installation of package 'Rcpp'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\00LOCK\Rcpp\libs\x64\Rcpp.dll
## a C:\Users\Vladimir\AppData\Local\R\win-library\4.3\Rcpp\libs\x64\Rcpp.dll:
## Permission denied
## Warning: restored 'Rcpp'
## Warning: cannot remove prior installation of package 'digest'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\00LOCK\digest\libs\x64\digest.dll
## a C:\Users\Vladimir\AppData\Local\R\win-library\4.3\digest\libs\x64\digest.dll:
## Permission denied
## Warning: restored 'digest'
## Warning: cannot remove prior installation of package 'curl'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\00LOCK\curl\libs\x64\curl.dll
## a C:\Users\Vladimir\AppData\Local\R\win-library\4.3\curl\libs\x64\curl.dll:
## Permission denied
## Warning: restored 'curl'
## Warning: cannot remove prior installation of package 'fastmap'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\00LOCK\fastmap\libs\x64\fastmap.dll
## a
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\fastmap\libs\x64\fastmap.dll:
## Permission denied
## Warning: restored 'fastmap'
## Warning: cannot remove prior installation of package 'xfun'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\00LOCK\xfun\libs\x64\xfun.dll
## a C:\Users\Vladimir\AppData\Local\R\win-library\4.3\xfun\libs\x64\xfun.dll:
## Permission denied
## Warning: restored 'xfun'
## Warning: cannot remove prior installation of package 'htmltools'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\00LOCK\htmltools\libs\x64\htmltools.dll
## a
## C:\Users\Vladimir\AppData\Local\R\win-library\4.3\htmltools\libs\x64\htmltools.dll:
## Permission denied
## Warning: restored 'htmltools'
library(paqueteMODELOS)
data("vivienda")
# Eliminar observaciones con valores NA
vivienda_clean <- na.omit(vivienda)
## package 'devtools' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Vladimir\AppData\Local\Temp\RtmpI9uODo\downloaded_packages
## stringi (1.8.3 -> 1.8.4 ) [CRAN]
## cpp11 (0.4.7 -> 0.5.0 ) [CRAN]
## rlang (1.1.3 -> 1.1.4 ) [CRAN]
## cli (3.6.2 -> 3.6.3 ) [CRAN]
## Rcpp (1.0.12 -> 1.0.13 ) [CRAN]
## digest (0.6.35 -> 0.6.37 ) [CRAN]
## curl (5.2.1 -> 5.2.2 ) [CRAN]
## fastmap (1.1.1 -> 1.2.0 ) [CRAN]
## xfun (0.46 -> 0.47 ) [CRAN]
## cards (NA -> 0.2.1 ) [CRAN]
## broom.hel... (1.16.0 -> 1.17.0 ) [CRAN]
## htmltools (0.5.7 -> 0.5.8.1) [CRAN]
## package 'stringi' successfully unpacked and MD5 sums checked
## package 'cpp11' successfully unpacked and MD5 sums checked
## package 'rlang' successfully unpacked and MD5 sums checked
## package 'cli' successfully unpacked and MD5 sums checked
## package 'Rcpp' successfully unpacked and MD5 sums checked
## package 'digest' successfully unpacked and MD5 sums checked
## package 'curl' successfully unpacked and MD5 sums checked
## package 'fastmap' successfully unpacked and MD5 sums checked
## package 'xfun' successfully unpacked and MD5 sums checked
## package 'cards' successfully unpacked and MD5 sums checked
## package 'broom.helpers' successfully unpacked and MD5 sums checked
## package 'htmltools' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Vladimir\AppData\Local\Temp\RtmpI9uODo\downloaded_packages
## ── R CMD build ─────────────────────────────────────────────────────────────────
## checking for file 'C:\Users\Vladimir\AppData\Local\Temp\RtmpI9uODo\remotesb48846ca33ba\Centromagis-paqueteMODELOS-78ce06f/DESCRIPTION' ... checking for file 'C:\Users\Vladimir\AppData\Local\Temp\RtmpI9uODo\remotesb48846ca33ba\Centromagis-paqueteMODELOS-78ce06f/DESCRIPTION' ... ✔ checking for file 'C:\Users\Vladimir\AppData\Local\Temp\RtmpI9uODo\remotesb48846ca33ba\Centromagis-paqueteMODELOS-78ce06f/DESCRIPTION' (602ms)
## ─ preparing 'paqueteMODELOS': (396ms)
## 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'
##
##
# Cargar librerías necesarias
library(dplyr)
library(paqueteMODELOS)
# Cargar los datos
data("vivienda")
# Filtrar la base de datos para incluir solo apartamentos
apartamentos <- vivienda %>% filter(tipo == "Apartamento")
# Mostrar los primeros 3 registros de la base filtrada
print(head(apartamentos, 3))
# Tabla de conteo de tipos de vivienda en la base filtrada
print(table(apartamentos$tipo))
# Resumen estadístico de la base filtrada
print(summary(apartamentos))
## # A tibble: 3 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1212 Zona N… 01 5 260 90 1 2 3
## 2 1724 Zona N… 01 5 240 87 1 3 3
## 3 2326 Zona N… 01 4 220 52 2 2 3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
##
## Apartamento
## 5100
## id zona piso estrato
## Min. : 3 Length:5100 Length:5100 Min. :3.000
## 1st Qu.:2180 Class :character Class :character 1st Qu.:4.000
## Median :4158 Mode :character Mode :character Median :5.000
## Mean :4284 Mean :4.727
## 3rd Qu.:6556 3rd Qu.:6.000
## Max. :8317 Max. :6.000
##
## preciom areaconst parqueaderos banios
## Min. : 58.0 Min. : 35.0 Min. : 1.000 Min. :0.000
## 1st Qu.: 175.0 1st Qu.: 68.0 1st Qu.: 1.000 1st Qu.:2.000
## Median : 279.0 Median : 90.0 Median : 1.000 Median :2.000
## Mean : 366.9 Mean :112.8 Mean : 1.568 Mean :2.617
## 3rd Qu.: 430.0 3rd Qu.:130.0 3rd Qu.: 2.000 3rd Qu.:3.000
## Max. :1950.0 Max. :932.0 Max. :10.000 Max. :8.000
## NA's :869
## habitaciones tipo barrio longitud
## Min. :0.000 Length:5100 Length:5100 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 :2.971 Mean :-76.53
## 3rd Qu.:3.000 3rd Qu.:-76.52
## Max. :9.000 Max. :-76.46
##
## latitud
## Min. :3.334
## 1st Qu.:3.380
## Median :3.419
## Mean :3.419
## 3rd Qu.:3.453
## Max. :3.498
##
# Instalar paquetes si no los tienes instalados
install.packages("plotly")
install.packages("dplyr")
## Warning: package 'dplyr' is in use and will not be installed
# Cargar las librerías necesarias
library(dplyr)
library(plotly)
library(paqueteMODELOS)
# Cargar los datos
data("vivienda")
# Gráfico de dispersión interactivo entre precio y área construida
plot_area <- plot_ly(data = vivienda,
x = ~areaconst,
y = ~preciom,
type = 'scatter',
mode = 'markers',
color = ~zona,
text = ~paste("Estrato:", estrato, "<br>Baños:", banios, "<br>Habitaciones:", habitaciones)) %>%
layout(title = "Relación entre el Precio de la Vivienda y el Área Construida",
xaxis = list(title = "Área Construida (m²)"),
yaxis = list(title = "Precio de la Vivienda (Millones)"))
plot_area
## Warning: Ignoring 3 observations
## package 'plotly' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Vladimir\AppData\Local\Temp\RtmpI9uODo\downloaded_packages
Tendencia General:
Dispersión por Zonas:
Comparación entre Zonas:
Densidad de Datos:
Hay una alta concentración de datos en el rango de 0 a 500 m² de área construida, lo que indica que la mayoría de las viviendas en la muestra tienen áreas en ese rango.
Por encima de 500 m², las viviendas son menos comunes, pero cuando existen, tienden a tener precios significativamente más altos.
Outliers:
# Gráfico de caja interactivo para precio según estrato
plot_estrato <- plot_ly(data = vivienda,
x = ~as.factor(estrato),
y = ~preciom,
type = 'box',
color = ~as.factor(estrato)) %>%
layout(title = "Distribución del Precio de la Vivienda por Estrato",
xaxis = list(title = "Estrato"),
yaxis = list(title = "Precio de la Vivienda (Millones)"))
plot_estrato
## Warning: Ignoring 3 observations
Tendencia General:
Mediana del Precio:
Estrato 3: La mediana del precio de la vivienda es relativamente baja, alrededor de 200 millones.
Estrato 4: La mediana aumenta un poco en comparación con el estrato 3, situándose alrededor de 250 millones.
Estrato 5: La mediana del precio se incrementa considerablemente a aproximadamente 350 millones.
Estrato 6: La mediana es aún más alta, superando los 500 millones. Rango Intercuartílico (IQR):
El rango intercuartílico, que es la diferencia entre el primer y tercer cuartil, es mayor en los estratos 5 y 6, lo que indica que hay una mayor variabilidad en los precios de las viviendas dentro de estos estratos.
El estrato 3 y 4 tienen rangos intercuartílicos más estrechos, lo que sugiere que los precios de las viviendas en estos estratos son más consistentes y menos variables.
Outliers (Valores Atípicos):
Se observan varios valores atípicos en todos los estratos, especialmente en los estratos 4, 5, y 6. Estos son puntos que se encuentran fuera del rango esperado (por encima del tercer cuartil más 1.5 veces el IQR).
En el estrato 6, hay outliers que alcanzan precios muy altos, casi hasta los 2000 millones, lo que indica que en este estrato puede haber viviendas de lujo o con características excepcionales que justifiquen estos precios.
# Gráfico de dispersión interactivo entre precio y número de baños
plot_banios <- plot_ly(data = vivienda,
x = ~banios,
y = ~preciom,
type = 'scatter',
mode = 'markers',
color = ~zona,
text = ~paste("Área construida:", areaconst, "<br>Estrato:", estrato, "<br>Habitaciones:", habitaciones)) %>%
layout(title = "Relación entre el Precio de la Vivienda y el Número de Baños",
xaxis = list(title = "Número de Baños"),
yaxis = list(title = "Precio de la Vivienda (Millones)"))
plot_banios
## Warning: Ignoring 3 observations
1. Zona Centro:
En la Zona Centro, la mayoría de las viviendas tienen entre 2 y 4 baños. Hay una tendencia general de que, a medida que aumenta el número de baños, el precio de la vivienda también tiende a aumentar, aunque hay una gran variabilidad en los precios para viviendas con más de 4 baños.
La dispersión sugiere que, en esta zona, el precio de la vivienda puede variar considerablemente incluso con un número similar de baños, lo que podría deberse a otros factores como la ubicación exacta, el estado de la propiedad, o características adicionales.
2. Zona Norte:
La Zona Norte muestra una tendencia similar, pero aquí se observa una mayor cantidad de viviendas con un número elevado de baños (hasta 10). Los precios en esta zona tienden a ser más altos en comparación con la Zona Centro, especialmente para viviendas con más baños.
La dispersión de los precios es también significativa, pero hay una clara concentración de viviendas de alto precio (más de 1000 millones) con un número de baños entre 4 y 6.
3. Zona Oeste:
En la Zona Oeste, el patrón es similar al de la Zona Norte, con una tendencia al alza en los precios a medida que aumenta el número de baños.
Se nota una gran concentración de precios entre 500 y 1500 millones para viviendas con 3 a 6 baños.
Al igual que en otras zonas, existe una variabilidad en los precios para viviendas con el mismo número de baños, lo que podría indicar que otros factores también influyen significativamente en el precio.
4. Zona Oriente:
La Zona Oriente muestra precios más bajos en general, con una menor dispersión en comparación con otras zonas.
La mayoría de las viviendas en esta zona tienen entre 2 y 4 baños, y sus precios están en un rango más limitado.
Hay menos propiedades con precios extremadamente altos, lo que sugiere que esta zona podría ser menos costosa y con menos variabilidad en los precios.
5. Zona Sur:
En la Zona Sur, existe una gran dispersión de precios, especialmente para viviendas con 4 a 6 baños, donde los precios pueden variar desde los 500 hasta los 2000 millones.
Esta zona muestra una amplia variedad de opciones de vivienda, desde propiedades más económicas hasta algunas bastante caras, lo que indica una mayor diversidad en el mercado inmobiliario de esta zona.
La relación entre el número de baños y el precio parece ser más consistente, pero con outliers significativos, que podrían ser propiedades de lujo o con características únicas.
Conclusión General:
En todas las zonas, hay una tendencia general de que a mayor número de baños, el precio de la vivienda tiende a aumentar. Sin embargo, la variabilidad dentro de cada zona sugiere que el número de baños es solo uno de los muchos factores que determinan el precio de la vivienda.
Las zonas Norte y Oeste tienden a tener viviendas con precios más altos y una mayor dispersión, lo que podría reflejar una mayor demanda o la presencia de propiedades de lujo.
La Zona Oriente parece ser la más económica y con menos variabilidad, mientras que la Zona Sur presenta una mezcla de propiedades tanto económicas como de lujo, con una amplia dispersión en los precios.
Esta información es crucial para María, ya que le permite identificar cómo varían los precios dentro de cada zona en función del número de baños, lo que puede ser un indicador de lujo o tamaño de la vivienda, y usar esta información para asesorar mejor a sus clientes según sus necesidades y presupuesto.
# Gráfico de dispersión interactivo entre precio y número de habitaciones
plot_habitaciones <- plot_ly(data = vivienda,
x = ~habitaciones,
y = ~preciom,
type = 'scatter',
mode = 'markers',
color = ~zona,
text = ~paste("Área construida:", areaconst, "<br>Estrato:", estrato, "<br>Baños:", banios)) %>%
layout(title = "Relación entre el Precio de la Vivienda y el Número de Habitaciones",
xaxis = list(title = "Número de Habitaciones"),
yaxis = list(title = "Precio de la Vivienda (Millones)"))
plot_habitaciones
## Warning: Ignoring 3 observations
1. Zona Centro:
La relación entre el número de habitaciones y el precio de la vivienda en la Zona Centro muestra una tendencia general a que, a medida que aumenta el número de habitaciones, los precios también tienden a aumentar.
Sin embargo, la variabilidad es significativa, especialmente en viviendas con 4 o más habitaciones, donde el precio puede variar desde 200 hasta más de 1000 millones.
Esto sugiere que el número de habitaciones es un factor importante, pero no el único determinante del precio en esta zona. Otros factores como la ubicación específica dentro de la Zona Centro, la calidad de la construcción o las amenidades podrían influir en el precio.
2. Zona Norte:
En la Zona Norte, se observa una tendencia similar, pero con precios más altos en general en comparación con la Zona Centro.
Las viviendas con 4 o más habitaciones tienden a tener precios que pueden superar los 1000 millones, especialmente cuando el número de habitaciones es mayor.
Este gráfico indica que en la Zona Norte, el número de habitaciones es un fuerte indicador del precio, con una clara progresión en el precio a medida que aumenta el número de habitaciones.
3. Zona Oeste:
La Zona Oeste también muestra una tendencia creciente en el precio con el aumento en el número de habitaciones, pero con una mayor dispersión, especialmente en propiedades con 4 habitaciones o más.
Las viviendas en esta zona pueden alcanzar precios muy altos (hasta 2000 millones), lo que sugiere la presencia de propiedades de lujo o características adicionales que elevan el precio.
Este gráfico muestra que, aunque el número de habitaciones es relevante, existen otros factores que también influyen en el precio en esta zona.
4. Zona Oriente:
La Zona Oriente muestra precios significativamente más bajos en comparación con otras zonas.
La relación entre el número de habitaciones y el precio es menos pronunciada, con precios que se mantienen relativamente constantes incluso con un aumento en el número de habitaciones.
Esto podría indicar que en la Zona Oriente, el precio está más influenciado por otros factores, como la ubicación o las condiciones socioeconómicas de la zona, en lugar del número de habitaciones.
5. Zona Sur:
En la Zona Sur, se observa una amplia dispersión en los precios, especialmente en viviendas con 4 o más habitaciones.
Los precios pueden variar ampliamente, desde menos de 500 millones hasta más de 1500 millones para viviendas con un número similar de habitaciones.
La Zona Sur parece ser una zona con una gran diversidad en términos de propiedades, donde el número de habitaciones es un indicador relevante del precio, pero no el único factor determinante.
Conclusión General:
Tendencia General: En la mayoría de las zonas, existe una tendencia creciente en los precios a medida que aumenta el número de habitaciones. Sin embargo, la magnitud de esta relación varía significativamente entre zonas.
Zona Centro y Zona Oriente: En estas zonas, el número de habitaciones tiene menos impacto en el precio comparado con otras zonas, lo que podría sugerir que otros factores como la ubicación exacta, el acceso a servicios o la antigüedad de la propiedad juegan un papel más importante.
Zona Norte y Zona Oeste: Estas zonas muestran una mayor sensibilidad al número de habitaciones, con una progresión más clara en el precio a medida que aumenta el número de habitaciones, indicando que en estas zonas, el tamaño y la capacidad de la vivienda son factores críticos en la determinación del precio.
Zona Sur: Presenta una gran diversidad, lo que podría indicar un mercado más heterogéneo con una mezcla de propiedades económicas y de lujo.
Esta interpretación puede ayudar a María a entender cómo el número de habitaciones afecta el precio en diferentes zonas, permitiéndole ofrecer asesorías más precisas a sus clientes basadas en las características de la vivienda y su ubicación.
# Cargar las librerías necesarias
library(dplyr)
# Ajustar el modelo de regresión lineal múltiple
modelo <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = vivienda)
# Resumen del modelo
summary(modelo)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = vivienda)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1412.57 -88.36 -17.55 56.24 1101.38
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -380.7629 14.3638 -26.51 <2e-16 ***
## areaconst 0.8510 0.0222 38.33 <2e-16 ***
## estrato 97.9107 2.8342 34.55 <2e-16 ***
## habitaciones -31.2744 2.2613 -13.83 <2e-16 ***
## parqueaderos 74.4922 2.5900 28.76 <2e-16 ***
## banios 61.0554 2.6271 23.24 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 177.2 on 6711 degrees of freedom
## (1605 observations deleted due to missingness)
## Multiple R-squared: 0.7206, Adjusted R-squared: 0.7204
## F-statistic: 3462 on 5 and 6711 DF, p-value: < 2.2e-16
Este modelo tiene como objetivo predecir el precio de la vivienda en función de varias variables: área construida, estrato, número de habitaciones, número de parqueaderos y número de baños. A continuación, se presentan las interpretaciones de los coeficientes y las métricas del modelo.
1. Interpretación de los Coeficientes
Intercepto (Intercept): −380.7629
Área Construida (areaconst): 0.8510
Estrato (estrato): 97.9107
Número de Habitaciones (habitaciones): −31.2744
Número de Parqueaderos (parqueaderos): 74.4922
Número de Baños (banios): 61.0554
2. Significancia Estadística de los Coeficientes
3. Evaluación del Ajuste del Modelo
R-cuadrado (R-squared): 0.7206
R-cuadrado ajustado (Adjusted R-squared): 0.7204
Error estándar residual (Residual Standard Error): 177.2 millones de pesos
4. Discusión del Ajuste del Modelo y Mejora Potencial
Mejoras Potenciales:
Incorporación de nuevas variables: Podría considerarse añadir otras variables como la ubicación exacta (por coordenadas geográficas), la antigüedad de la vivienda, la calidad de la construcción o incluso variables macroeconómicas como las tasas de interés.
Modelos no lineales: Dado que la relación entre las variables independientes y el precio podría no ser estrictamente lineal, considerar modelos no lineales o de interacciones entre variables podría mejorar el ajuste.
Análisis de valores atípicos: Identificar y analizar los outliers (residuos muy grandes o pequeños) podría ayudar a entender si hay subgrupos de datos que se comportan de manera diferente o si hay errores en los datos.
# Cargar las librerías necesarias
# Cargar las librerías necesarias
library(ggplot2)
# Ajustar el modelo sin valores NA
modelo <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = vivienda_clean)
# Graficar residuos vs. predictores
par(mfrow=c(2,3)) # Configurar múltiples gráficos
plot(vivienda_clean$areaconst, resid(modelo),
main = "Residuos vs. Área Construida",
xlab = "Área Construida (m²)", ylab = "Residuos")
abline(0, 0)
plot(vivienda_clean$estrato, resid(modelo),
main = "Residuos vs. Estrato",
xlab = "Estrato", ylab = "Residuos")
abline(0, 0)
plot(vivienda_clean$habitaciones, resid(modelo),
main = "Residuos vs. Habitaciones",
xlab = "Habitaciones", ylab = "Residuos")
abline(0, 0)
plot(vivienda_clean$parqueaderos, resid(modelo),
main = "Residuos vs. Parqueaderos",
xlab = "Parqueaderos", ylab = "Residuos")
abline(0, 0)
plot(vivienda_clean$banios, resid(modelo),
main = "Residuos vs. Baños",
xlab = "Baños", ylab = "Residuos")
abline(0, 0)
1. Residuos vs. Área Construida
Observaciones:
Se observa una ligera curvatura en la nube de puntos, especialmente en los valores bajos y altos de área construida.
Los residuos parecen estar más concentrados en áreas construidas pequeñas (menos de 500 m²), pero muestran una dispersión más amplia a medida que el área construida aumenta.
Interpretación:
2. Residuos vs. Estrato
Observaciones:
Los residuos se distribuyen de manera bastante uniforme alrededor de cero para los diferentes niveles de estrato.
No se observa un patrón claro o tendencia entre los residuos y el estrato.
Interpretación:
3. Residuos vs. Habitaciones
Observaciones:
Se puede observar una mayor dispersión de los residuos en viviendas con un mayor número de habitaciones, especialmente a partir de 4 habitaciones.
No obstante, los residuos parecen estar distribuidos de manera bastante uniforme en torno a cero.
Interpretación:
4. Residuos vs. Parqueaderos
Observaciones:
Interpretación:
5. Residuos vs. Baños
Observaciones:
Al igual que con los parqueaderos, los residuos se distribuyen uniformemente alrededor de cero para el número de baños.
No se observan patrones claros o curvaturas en la relación.
Interpretación:
Conclusión General
Recomendaciones:
Considerar la adición de un término cuadrático para el área construida (areaconst^2) para capturar mejor la curvatura observada en el gráfico de residuos.
No parece ser necesario realizar transformaciones o añadir términos adicionales para las demás variables, ya que los residuos no muestran patrones significativos que sugieran relaciones no lineales.
# Graficar residuos estandarizados vs. valores predichos
plot(predict(modelo), rstandard(modelo),
main = "Residuos Estandarizados vs. Valores Predichos",
xlab = "Valores Predichos", ylab = "Residuos Estandarizados")
abline(0, 0)
Interpretación del Gráfico para Diagnóstico de Homoscedasticidad
Distribución de los Residuos:
Observaciones Clave:
En el gráfico, se observa que los residuos tienen una dispersión menor en los valores predichos bajos (aproximadamente entre 0 y 500 millones), pero a medida que los valores predichos aumentan, la dispersión de los residuos también aumenta.
Este patrón, donde los residuos se expanden a medida que los valores predichos aumentan, sugiere la presencia de heteroscedasticidad. Esto significa que la varianza de los errores no es constante, y tiende a aumentar con valores predichos más altos.
Implicaciones:
La presencia de heteroscedasticidad puede hacer que los intervalos de confianza y las pruebas de hipótesis sean menos confiables, ya que la suposición de varianza constante no se cumple.
Los coeficientes estimados en el modelo siguen siendo insesgados, pero las estimaciones de su varianza pueden estar sesgadas, lo que afecta la inferencia estadística.
Recomendaciones para Tratar la Heteroscedasticidad
Transformaciones de la Variable Dependiente:
Modelos Robustos:
Modelos Alternativos:
Conclusión
Podemos usar un gráfico Q-Q (cuantil-cuantil) para verificar la normalidad de los residuos.
# Gráfico Q-Q para los residuos
qqnorm(resid(modelo), main = "Gráfico Q-Q de los Residuos")
qqline(resid(modelo))
Línea de Referencia:
Observaciones Clave:
En el gráfico, los puntos se desvían de la línea de referencia, especialmente en los extremos (cuantiles más bajos y más altos).
Los puntos en la parte superior derecha del gráfico se elevan por encima de la línea de referencia, lo que indica que los residuos en ese rango tienen valores mayores a los esperados bajo una distribución normal.
De manera similar, en la parte inferior izquierda del gráfico, los puntos se alejan hacia abajo de la línea de referencia, lo que indica que hay residuos menores a lo esperado bajo una distribución normal.
Implicaciones:
El desvío en los extremos del gráfico sugiere que los residuos no siguen una distribución normal, especialmente en las colas de la distribución. Esto es indicativo de la presencia de outliers o una distribución con colas más pesadas (kurtosis alta).
La falta de normalidad en los residuos puede afectar la validez de las pruebas de hipótesis y los intervalos de confianza derivados del modelo de regresión, ya que estos asumen que los residuos son normales.
Recomendaciones para Tratar la No-Normalidad de los Errores
Transformación de la Variable Dependiente:
Una transformación de la variable dependiente, como una transformación logarítmica (log(preciom)), podría ayudar a normalizar los residuos. Considerar un Modelo Alternativo:
Si la transformación no mejora significativamente la normalidad de los residuos, podrías considerar modelos alternativos que no asuman normalidad de los errores, como modelos de regresión robusta.
Investigación de Outliers:
Reevaluar el Modelo:
Conclusión
El test de Durbin-Watson se utiliza comúnmente para verificar la independencia de los errores.
# Instalar paquete necesario
install.packages("lmtest")
library(lmtest)
# Prueba de Durbin-Watson
dwtest(modelo)
## package 'lmtest' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Vladimir\AppData\Local\Temp\RtmpI9uODo\downloaded_packages
##
## Durbin-Watson test
##
## data: modelo
## DW = 1.582, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
El test de Durbin-Watson es una prueba estadística que se utiliza para detectar la presencia de autocorrelación en los residuos de un modelo de regresión lineal. La autocorrelación es un problema cuando los residuos de un modelo están correlacionados entre sí, lo que viola uno de los supuestos clave de la regresión lineal, que es la independencia de los errores.
Resultados del Test de Durbin-Watson
Interpretación de los Resultados
Estadístico de Durbin-Watson (DW = 1.582):
p-value (< 2.2e-16):
El p-valor es extremadamente bajo, lo que significa que podemos rechazar la hipótesis nula de que no hay autocorrelación en los residuos.
Este p-valor sugiere que la autocorrelación positiva observada en los residuos es estadísticamente significativa.
Implicaciones
Autocorrelación positiva: La presencia de autocorrelación positiva significa que los errores tienden a estar relacionados entre sí, lo que puede ser problemático porque:
Los errores no son independientes, lo que puede llevar a inferencias incorrectas sobre los coeficientes del modelo.
Los intervalos de confianza y las pruebas de hipótesis pueden no ser válidos. La eficiencia de las estimaciones de los coeficientes puede verse afectada.
Recomendaciones
Incluir un término de tendencia o estacionalidad:
Modelos Alternativos:
Errores estándar robustos:
Revisar la estructura del modelo:
Conclusión
Para evaluar la multicolinealidad en un modelo de regresión lineal, se utiliza comúnmente el Factor de Inflación de la Varianza (VIF, por sus siglas en inglés). El VIF mide cuánto aumenta la varianza de los coeficientes estimados debido a la colinealidad entre las variables independientes. Un VIF alto indica que una variable independiente está altamente colineada con otras variables en el modelo, lo que puede ser problemático.
install.packages("car")
library(car)
# Ajustar el modelo de regresión lineal
modelo <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = vivienda_clean)
# Calcular el VIF
vif(modelo)
## package 'car' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Vladimir\AppData\Local\Temp\RtmpI9uODo\downloaded_packages
## areaconst estrato habitaciones parqueaderos banios
## 2.305315 1.527546 2.020226 1.906627 2.856963
Rango de VIF y su Significado:
Análisis de los Resultados:
Conclusión
Implicaciones:
# Cargar las librerías necesarias
set.seed(123) # Fijar la semilla para reproducibilidad
# Dividir los datos en 70% para entrenamiento y 30% para prueba
indices <- sample(1:nrow(vivienda_clean), size = 0.7 * nrow(vivienda_clean))
train_data <- vivienda_clean[indices, ]
test_data <- vivienda_clean[-indices, ]
# Ajustar el modelo de regresión lineal con el conjunto de entrenamiento
modelo_train <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = train_data)
# Mostrar el resumen del modelo
summary(modelo_train)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = train_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -849.34 -83.39 -15.22 53.32 1006.81
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -380.63173 19.74115 -19.281 <2e-16 ***
## areaconst 0.87357 0.03202 27.281 <2e-16 ***
## estrato 96.41321 3.88986 24.786 <2e-16 ***
## habitaciones -31.98113 3.20246 -9.986 <2e-16 ***
## parqueaderos 70.69210 3.63106 19.469 <2e-16 ***
## banios 64.06228 3.68610 17.379 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 169.5 on 3359 degrees of freedom
## Multiple R-squared: 0.7372, Adjusted R-squared: 0.7368
## F-statistic: 1884 on 5 and 3359 DF, p-value: < 2.2e-16
Los resultados que has proporcionado corresponden a un modelo de regresión lineal múltiple ajustado a un conjunto de entrenamiento (70% de los datos). A continuación, se proporciona una interpretación detallada de los resultados.
1. Resumen de los Residuos * Min: -849.34 * 1Q (Primer Cuartil): -83.39 * Mediana: -15.22 * 3Q (Tercer Cuartil): 53.32 * Max: 1006.81
Interpretación:
2. Coeficientes
Interpretación de los Coeficientes:
Intercepto (-380.63173): Este valor representa el precio de la vivienda cuando todas las variables independientes son iguales a cero. Sin embargo, este valor no tiene una interpretación práctica directa en este contexto porque no tendría sentido tener un área construida, estrato, habitaciones, parqueaderos y baños iguales a cero.
Área Construida (areaconst) - 0.87357: Por cada metro cuadrado adicional de área construida, el precio de la vivienda aumenta en promedio en 0.873 millones de pesos (873,570 pesos), manteniendo constantes las demás variables. Este resultado es lógico y consistente con la intuición de que viviendas más grandes suelen tener un mayor valor.
Estrato (estrato) - 96.41321: Por cada unidad adicional en el estrato socioeconómico, el precio de la vivienda aumenta en promedio en 96.41 millones de pesos, manteniendo constantes las demás variables. Esto sugiere que las viviendas en estratos más altos son significativamente más caras.
Número de Habitaciones (habitaciones) - -31.98113: Cada habitación adicional está asociada con una disminución promedio en el precio de la vivienda de 31.98 millones de pesos, manteniendo constantes las demás variables. Esto podría parecer contraintuitivo, pero puede indicar que más habitaciones podrían estar asociadas con una reducción en otras características de calidad o que las viviendas con más habitaciones tienden a ser más grandes en áreas menos costosas.
Número de Parqueaderos (parqueaderos) - 70.69210: Cada parqueadero adicional aumenta el precio de la vivienda en promedio en 70.69 millones de pesos, manteniendo constantes las demás variables. Este es un resultado lógico, ya que más espacio para estacionamiento generalmente agrega valor a la propiedad.
Número de Baños (banios) - 64.06228: Cada baño adicional aumenta el precio de la vivienda en promedio en 64.06 millones de pesos, manteniendo constantes las demás variables. Esto es consistente con la intuición de que más baños suelen asociarse con viviendas más cómodas y valiosas.
Significancia Estadística:
3. Errores Estándar Residuales * Residual Standard Error: 169.5 millones de pesos en 3359 grados de libertad
Interpretación:
4. Coeficientes de Determinación (R-squared y Adjusted R-squared) * Multiple R-squared: 0.7372 * Adjusted R-squared: 0.7368
Interpretación:
5. Estadístico F * F-statistic: 1884 en 5 y 3359 grados de libertad * p-value: <2.2e-16
Interpretación:
Conclusión General
El modelo de regresión lineal múltiple ajustado sobre el conjunto de entrenamiento muestra que las variables seleccionadas (área construida, estrato, número de habitaciones, número de parqueaderos, y número de baños) son buenos predictores del precio de la vivienda, con un R-squared elevado que sugiere un buen poder explicativo. Sin embargo, aún existe una variabilidad en los precios no explicada por el modelo, como lo indican los errores residuales, lo cual podría explorarse incluyendo variables adicionales o realizando transformaciones a las variables existentes.
# Realizar predicciones utilizando el conjunto de prueba
predicciones <- predict(modelo_train, newdata = test_data)
# Mostrar las primeras filas de las predicciones junto con los valores reales
resultados <- data.frame(Real = test_data$preciom, Predicho = predicciones)
head(resultados)
## Real Predicho
## 1 320 438.2162
## 2 625 687.6203
## 3 750 642.3413
## 4 320 336.9942
## 5 175 81.3667
## 6 170 221.1463
# Calcular el Error Absoluto Medio (MAE)
mae <- mean(abs(resultados$Real - resultados$Predicho))
# Calcular el Error Cuadrático Medio (MSE)
mse <- mean((resultados$Real - resultados$Predicho)^2)
# Calcular la Raíz del Error Cuadrático Medio (RMSE)
rmse <- sqrt(mse)
# Calcular el R2 en el conjunto de prueba
sst <- sum((resultados$Real - mean(resultados$Real))^2)
sse <- sum((resultados$Real - resultados$Predicho)^2)
r_squared <- 1 - sse/sst
# Mostrar los resultados de las métricas
cat("MAE:", mae, "\n")
cat("MSE:", mse, "\n")
cat("RMSE:", rmse, "\n")
cat("R²:", r_squared, "\n")
## MAE: 112.5895
## MSE: 28912.5
## RMSE: 170.0368
## R²: 0.7067298
1. Error Absoluto Medio (MAE): 112.5895 * Interpretación: El MAE de 112.5895 millones de pesos indica que, en promedio, las predicciones del modelo están fuera del valor real por aproximadamente 112.59 millones de pesos. * Implicación: Este es un error absoluto relativamente bajo en el contexto de los precios de las viviendas, lo que sugiere que el modelo tiene una precisión aceptable, aunque podría no ser perfecto para todas las observaciones.
2. Error Cuadrático Medio (MSE): 28912.5 * Interpretación: El MSE de 28912.5 millones de pesos cuadrados refleja la media de los cuadrados de los errores (diferencias entre los valores reales y predichos). Esta métrica es más sensible a errores grandes, por lo que un MSE más alto indica la presencia de algunos errores significativos en las predicciones. * Implicación: Aunque el MSE es útil para identificar la magnitud de los errores, es más difícil de interpretar directamente en comparación con el MAE y el RMSE. Sin embargo, el valor indica que hay variabilidad en la precisión de las predicciones, con algunos errores grandes presentes.
3. Raíz del Error Cuadrático Medio (RMSE): 170.0368 Interpretación: El RMSE de 170.0368 millones de pesos proporciona una medida de la magnitud promedio del error de las predicciones, en las mismas unidades que la variable dependiente (en este caso, millones de pesos). Implicación: Un RMSE de 170.04 sugiere que, en promedio, las predicciones del modelo están fuera del valor real por aproximadamente 170.04 millones de pesos. Aunque es un error moderado, este valor refleja que el modelo es razonablemente preciso, pero con margen para mejorar.
4. Coeficiente de Determinación (R²): 0.7067298 * Interpretación: El R² de 0.7067 indica que el 70.67% de la variabilidad en los precios de las viviendas en el conjunto de prueba es explicada por las variables independientes incluidas en el modelo. * Implicación: Un R² de 70.67% es bastante alto y sugiere que el modelo tiene un buen poder explicativo. Sin embargo, hay un 29.33% de la variabilidad en los precios que no está explicada por el modelo, lo que indica que podrían existir otros factores no considerados en el modelo actual que también influyen en los precios de las viviendas.
Conclusión General