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 |
El problema consiste en ayudar a María a responder la solicitud, mediante técnicas modelación que usted conoce. Ella requiere 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) .
En este informe, exploramos el impacto de diversas variables en el precio de las viviendas y proporcionamos recomendaciones personalizadas para dos casos específicos.
Para comprender cómo diferentes características afectan el precio de las viviendas, realizamos un análisis detallado. Es importante destacar que al evaluar el impacto de cada variable en el precio, mantenemos las demás constantes, lo que nos permite determinar su influencia individual.
Área Construida: La extensión de la propiedad es un factor crucial. En promedio, cada metro cuadrado adicional agrega 0.67 millones de pesos al precio de las casas y 1.29 millones de pesos al de los apartamentos.
Baños: La cantidad de baños también afecta significativamente el precio. Cada baño adicional suma aproximadamente 18.90 millones de pesos para las casas y 50.70 millones de pesos para los apartamentos.
Estrato: El estrato residencial tiene un impacto notable. Cada incremento en el estrato aumenta el precio en aproximadamente 80.63 millones de pesos para las casas y 60.90 millones de pesos para los apartamentos.
Parqueaderos: Los parqueaderos son un factor valorado. Por cada espacio adicional, el precio aumenta en unos 24.01 millones de pesos para las casas y 72.91 millones de pesos para los apartamentos.
Con base en pruebas y análisis se determina que la relación de las habitaciones no es muy significativa o correcta por tal motivo no se toma en cuenta.
Presentamos recomendaciones personalizadas para dos casos específicos:
| Características | Vivienda 1: Casa en el Norte |
|---|---|
| Área Construida | 200 m² |
| Parqueaderos | 1 |
| Baños | 2 |
| Habitaciones | 4 |
| Estrato | 4 o 5 |
| Zona | Norte |
| Crédito Preaprobado | 350 millones de pesos |
| Características | Vivienda 2: Apartamento en el Sur |
|---|---|
| Área Construida | 300 m² |
| Parqueaderos | 3 |
| Baños | 3 |
| Habitaciones | 5 |
| Estrato | 5 o 6 |
| Zona | Sur |
| Crédito Preaprobado | 850 millones de pesos |
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?).
#install.packages("devtools") # solo la primera vez
#devtools::install_github("dgonxalex80/paqueteMODELOS", force =TRUE)
library(paqueteMODELOS)
data("vivienda")
library(plotly)
library(ggplot2)
library(knitr)
library(dplyr)
library(treemap)
library(leaflet)
glimpse(vivienda)
## Rows: 8,322
## Columns: 13
## $ id <dbl> 1147, 1169, 1350, 5992, 1212, 1724, 2326, 4386, 1209, 159…
## $ zona <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur…
## $ piso <chr> NA, NA, NA, "02", "01", "01", "01", "01", "02", "02", "02…
## $ estrato <dbl> 3, 3, 3, 4, 5, 5, 4, 5, 5, 5, 6, 4, 5, 6, 4, 5, 5, 4, 5, …
## $ preciom <dbl> 250, 320, 350, 400, 260, 240, 220, 310, 320, 780, 750, 62…
## $ areaconst <dbl> 70, 120, 220, 280, 90, 87, 52, 137, 150, 380, 445, 355, 2…
## $ parqueaderos <dbl> 1, 1, 2, 3, 1, 1, 2, 2, 2, 2, NA, 3, 2, 2, 1, 4, 2, 2, 2,…
## $ banios <dbl> 3, 2, 2, 5, 2, 3, 2, 3, 4, 3, 7, 5, 6, 2, 4, 4, 4, 3, 2, …
## $ habitaciones <dbl> 6, 3, 4, 3, 3, 3, 3, 4, 6, 3, 6, 5, 6, 2, 5, 5, 4, 3, 3, …
## $ tipo <chr> "Casa", "Casa", "Casa", "Casa", "Apartamento", "Apartamen…
## $ barrio <chr> "20 de julio", "20 de julio", "20 de julio", "3 de julio"…
## $ longitud <dbl> -76.51168, -76.51237, -76.51537, -76.54000, -76.51350, -7…
## $ latitud <dbl> 3.43382, 3.43369, 3.43566, 3.43500, 3.45891, 3.36971, 3.4…
La información anterior se sintetiza en la siguiente tabla, la cual ofrece una visión panorámica del tipo de conjunto de datos disponible.
| Variables | Cantidad |
|---|---|
| Numéricas | 9 |
| Categóricas | 4 |
| Total | 13 |
| Total de registros: | 8322 |
A continuación, se detallará la cantidad de datos faltantes por cada variable. Este análisis es relevante, ya que permite evaluar si la base de datos contiene información válida. Además, este conocimiento puede ejercer influencia en las decisiones futuras basadas en el análisis y proporcionar orientación al decidir si es conveniente descartar ciertas variables.
faltantes <- colSums(is.na(vivienda))
knitr::kable(faltantes, caption = "Datos faltantes por variable")
| x | |
|---|---|
| id | 3 |
| zona | 3 |
| piso | 2638 |
| estrato | 3 |
| preciom | 2 |
| areaconst | 3 |
| parqueaderos | 1605 |
| banios | 3 |
| habitaciones | 3 |
| tipo | 3 |
| barrio | 3 |
| longitud | 3 |
| latitud | 3 |
A partir de los datos presentes en esta tabla, se genera el gráfico de barras que se muestra a continuación, el cual proporciona una representación visual significativa.
# porcentaje de datos perdidos para cada variable
porcentaje_perdidos <- sapply(vivienda, function(x) sum(is.na(x)) / length(x) * 100)
# data frame con los porcentajes
df_porcentaje <- data.frame(variable = names(porcentaje_perdidos), porcentaje = porcentaje_perdidos)
# Gráfica de barras
ggplot(df_porcentaje, aes(x = variable, y = porcentaje)) +
geom_bar(stat = "identity", fill = "dodgerblue") +
labs(title = "Porcentaje de Datos Perdidos por Variable", x = "Variable", y = "Porcentaje (%)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Tras analizar la gráfica y la tabla anteriores, se observa que las variables “parqueaderos” y “piso” presentan tasas de datos faltantes del 19.3% y 31.7%, respectivamente. En consecuencia, se ha decidido descartar la variable piso, ya que esta no se incluirá en el análisis posterior. Esta elección se fundamenta en la necesidad de evitar una posible pérdida significativa de información si se optara por utilizar únicamente los datos disponibles en esta variable. Eliminar este atributo por completo evitará la necesidad de eliminar un porcentaje equivalente de datos en otras columnas para mantener un análisis coherente y conjunto. Además, se conservará el atributo ‘parqueadero’, ya que debe incluirse en el análisis posterior según los requisitos del caso. Por lo tanto, en este escenario se optará por eliminar los valores faltantes, ya que al utilizar la media podría introducir sesgos considerables en el conjunto de datos, particularmente debido a la naturaleza discreta de los datos.
Ademas se observó que las variables “zona”, “estrato”, “areaconst”, “banios”, “habitaciones”, “tipo”, “barrio” y “preciom” presentaron un porcentaje de datos faltantes que se aproxima a cero por ciento. Esto implica que en prácticamente todas las observaciones de la base de datos, estas variables cuentan con información completa . Debido a que el porcentaje de datos faltantes es extremadamente bajo,se ha decidió llevar a cabo la eliminación de estos registros con datos faltantes en las variables mencionadas.
#Eliminaciòn de columna piso
vivienda<- vivienda %>%
select(-piso)
# Eliminacion de observaciones con datos faltantes
datos_sin_na <- vivienda[complete.cases(
vivienda$zona ,vivienda$estrato ,vivienda$areaconst ,vivienda$banios ,vivienda$habitaciones ,vivienda$tipo ,vivienda$barrio ,vivienda$preciom, vivienda$parqueaderos), ]
datos_sin_na<-textshape::column_to_rownames(datos_sin_na, loc = 1)
#head(datos_sin_na,5)
glimpse(datos_sin_na)
## Rows: 6,717
## Columns: 11
## $ zona <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur…
## $ estrato <dbl> 3, 3, 3, 4, 5, 5, 4, 5, 5, 5, 4, 5, 6, 4, 5, 5, 4, 5, 3, …
## $ preciom <dbl> 250, 320, 350, 400, 260, 240, 220, 310, 320, 780, 625, 75…
## $ areaconst <dbl> 70, 120, 220, 280, 90, 87, 52, 137, 150, 380, 355, 237, 9…
## $ parqueaderos <dbl> 1, 1, 2, 3, 1, 1, 2, 2, 2, 2, 3, 2, 2, 1, 4, 2, 2, 2, 1, …
## $ banios <dbl> 3, 2, 2, 5, 2, 3, 2, 3, 4, 3, 5, 6, 2, 4, 4, 4, 3, 2, 2, …
## $ habitaciones <dbl> 6, 3, 4, 3, 3, 3, 3, 4, 6, 3, 5, 6, 2, 5, 5, 4, 3, 3, 3, …
## $ tipo <chr> "Casa", "Casa", "Casa", "Casa", "Apartamento", "Apartamen…
## $ barrio <chr> "20 de julio", "20 de julio", "20 de julio", "3 de julio"…
## $ longitud <dbl> -76.51168, -76.51237, -76.51537, -76.54000, -76.51350, -7…
## $ latitud <dbl> 3.43382, 3.43369, 3.43566, 3.43500, 3.45891, 3.36971, 3.4…
Antes de hacer el filtrado segun Tipo de vivienda: Casa y Zona: Zona norte, se proporciona una visualización clara de cómo se distribuyen los tipos de vivienda según las diferentes zonas, esta información se ha organizado en la siguiente tabla.
kable(table(datos_sin_na$zona, datos_sin_na$tipo))
| Apartamento | Casa | |
|---|---|---|
| Zona Centro | 10 | 54 |
| Zona Norte | 852 | 435 |
| Zona Oeste | 966 | 132 |
| Zona Oriente | 22 | 141 |
| Zona Sur | 2381 | 1724 |
Ya que se tiene una visión general de la distribución del tipo de vivienda segun la zona, se hace el filtrado de interés
# Filtrar las casas en la zona norte
base1 <- datos_sin_na[datos_sin_na$tipo == 'Casa' & datos_sin_na$zona == 'Zona Norte', ]
# Presentar los primeros 3 registros
head(base1, 3)
## zona estrato preciom areaconst parqueaderos banios habitaciones tipo
## 1209 Zona Norte 5 320 150 2 4 6 Casa
## 1592 Zona Norte 5 780 380 2 3 3 Casa
## 4460 Zona Norte 4 625 355 3 5 5 Casa
## barrio longitud latitud
## 1209 acopi -76.51341 3.47968
## 1592 acopi -76.51674 3.48721
## 4460 acopi -76.53179 3.40590
summary(base1)
## zona estrato preciom areaconst
## Length:435 Min. :3.000 Min. : 89.0 Min. : 30.0
## Class :character 1st Qu.:4.000 1st Qu.: 330.0 1st Qu.: 170.5
## Mode :character Median :5.000 Median : 425.0 Median : 264.5
## Mean :4.455 Mean : 479.8 Mean : 292.7
## 3rd Qu.:5.000 3rd Qu.: 582.5 3rd Qu.: 357.0
## Max. :6.000 Max. :1940.0 Max. :1440.0
## parqueaderos banios habitaciones tipo
## Min. : 1.000 Min. : 0.000 Min. : 0.000 Length:435
## 1st Qu.: 1.000 1st Qu.: 3.000 1st Qu.: 4.000 Class :character
## Median : 2.000 Median : 4.000 Median : 4.000 Mode :character
## Mean : 2.182 Mean : 3.782 Mean : 4.809
## 3rd Qu.: 3.000 3rd Qu.: 5.000 3rd Qu.: 5.000
## Max. :10.000 Max. :10.000 Max. :10.000
## barrio longitud latitud
## Length:435 Min. :-76.59 Min. :3.333
## Class :character 1st Qu.:-76.53 1st Qu.:3.462
## Mode :character Median :-76.52 Median :3.473
## Mean :-76.52 Mean :3.468
## 3rd Qu.:-76.51 3rd Qu.:3.483
## Max. :-76.48 Max. :3.496
Para realizar una comparación y analisis efectivo de las casas en la zona norte, es importante tener en cuenta la delimitación de las distintas zonas, especificamente la Zona Norte y la Zona Sur. A continuación, se presenta el mapa oficial de zonificación desarrollado por la Alcaldía de Santiago de Cali:
Ahora se procede a visualizar el mapa generado a partir de las casas existentes o que figuran como existentes en la zona norte. Este mapa ayuda a identificar la distribución y ubicación de las propiedades disponibles en esa área específica.
leaflet() %>% addCircleMarkers(lng=base1$longitud,lat=base1$latitud,radius= 0.2,label = base1$preciom) %>% addTiles()
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.
Primero se muestra la correlació entre las variables
# Calculamos la matriz de correlación para las variables de interés
correlaciones <- cor(base1[,c( 'preciom','areaconst', 'estrato', 'banios', 'habitaciones')], use = "complete.obs")
# Visualización de la matriz de correlación
plot_ly(z = correlaciones, x = colnames(correlaciones), y = colnames(correlaciones), type = "heatmap")
A partir del análisis realizado en el mapa de calor, se han identificado las siguientes correlaciones:
Precio y Área Construida: Se observa una correlación significativa de 0.68, lo cual indica una fuerte relación entre estas dos variables. Esta alta correlación sugiere una tendencia lineal clara que se verá reflejada en el gráfico de dispersión.
Precio y Estrato: Se detecta una correlación moderada de 0.52 entre el precio y el estrato. Aunque no es tan fuerte como la anterior, esta correlación aún sugiere una tendencia lineal que puede observarse en el gráfico.
Precio y Baños: La correlación entre el precio y el número de baños es de 0.50, lo que indica una relación moderada entre estas dos variables. Aunque la correlación no es tan fuerte, sigue siendo relevante y podría reflejarse en un patrón lineal en el gráfico.
Precio y Habitaciones: Se registra una correlación más baja de 0.36 entre el precio y el número de habitaciones. Esta correlación más débil sugiere que es menos probable que se observe una tendencia lineal clara en el gráfico.
Además, se observa una correlación alta de 0.6 entre el número de habitaciones y el número de baños. Las demás correlaciones entre variables, excepto con el precio, son menores a 0.5, lo que indica una relación más débil entre estas variables.
library(plotly)
scatter_precio_area <- plot_ly(data = base1, x = ~areaconst, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "Precio vs. Área Construida")
scatter_precio_estrato <- plot_ly(data = base1, x = ~estrato, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "Precio vs. Estrato")
scatter_precio_banios <- plot_ly(data = base1, x = ~banios, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "Precio vs. Número de Baños")
scatter_precio_habitaciones <- plot_ly(data = base1, x = ~habitaciones, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "Precio vs. Numero de Habitaciones")
matriz_correlacion <- cor(base1[c("preciom", "areaconst", "estrato", "banios", "habitaciones")])
heatmap_correlacion <- plot_ly(z = matriz_correlacion, x = colnames(matriz_correlacion), y = colnames(matriz_correlacion), type = "heatmap", name = "Matriz de Correlación")
subplot_graficos <- subplot(
scatter_precio_area, scatter_precio_estrato, scatter_precio_banios, scatter_precio_habitaciones,
nrows = 2, margin = 0.05
)
subplot_graficos
A partir de los gráficos de dispersión generados, se pueden destacar las siguientes observaciones:
Precio vs Área Construida: Como se esperaba, se puede apreciar una clara tendencia lineal en el gráfico. Esto sugiere que en la zona norte, las casas tienden a aumentar su precio conforme aumenta su área construida.
Precio vs Estrato: También se observa una tendencia lineal en este gráfico, aunque no tan marcada como en el caso anterior. La tendencia muestra que, para la zona norte, las casas tienden a tener un precio más alto a medida que aumenta su estrato.
Precio vs Número de Baños: En este caso, también se identifica una tendencia lineal leve. El gráfico muestra que, conforme aumenta el número de baños, el precio de las casas tiende a incrementarse en la zona norte.
Precio vs Número de Habitaciones: Aunque se puede notar una ligera tendencia en el gráfico, esta no es tan pronunciada como en los casos anteriores. Esto concuerda con la baja correlación entre estas dos variables, como se había anticipado, entonces no necesariamente a mayor numero de habitaciones se va a esperar un mayor precio.
*Usar la variable zona para este ejercicio es innecesario ya que todas las variables se encuentran en la zona norte.
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 R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).
modelo=lm(preciom ~ areaconst + parqueaderos + banios + habitaciones + estrato, data=base1)
summary(modelo)
##
## Call:
## lm(formula = preciom ~ areaconst + parqueaderos + banios + habitaciones +
## estrato, data = base1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -784.29 -77.56 -16.03 47.67 978.61
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -238.17090 44.40551 -5.364 1.34e-07 ***
## areaconst 0.67673 0.05281 12.814 < 2e-16 ***
## parqueaderos 24.00598 5.86889 4.090 5.14e-05 ***
## banios 18.89938 7.48800 2.524 0.012 *
## habitaciones 7.64511 5.65873 1.351 0.177
## estrato 80.63495 9.82632 8.206 2.70e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 155.1 on 429 degrees of freedom
## Multiple R-squared: 0.6041, Adjusted R-squared: 0.5995
## F-statistic: 130.9 on 5 and 429 DF, p-value: < 2.2e-16
El valor de R-squared muestra que las variables areaconst, parqueaderos ,banios, habitaciones y estrato, puede explicar el 60% de la variación en el precio de las viviendas respecto a la variacion total, es decir que el otro 40% de las variaciones del precio de las viviendas se debe a otros factores.El valor ajustado de 0.59 y Sugiere que después de ajustar el modelo por el número de variables, el modelo aún explica aproximadamente el 59% de la variabilidad.
El valor de F es 130.9, lo cual es significativo con un valor de p < 2.2e-16 . Este resultado indica que hay menos de un 0.1% de probabilidad de que ocurra un estadístico F tan grande si la hipótesis nula fuera cierta. Por lo tanto, podemos concluir que el modelo de regresión resulta en una predicción significativamente mejor de el precio de las viviendas que si usáramos el valor promedio de el precio de las viviendas como modelo. En resumen, el modelo de regresión en general predice significativamente bien el precio de las viviendas, aunque podria ser mejorado eliminando varibles que no son tan redundantes.
La columna “estimate” muestra los coeficientes de regresión, que representan el cambio esperado en la variable de resultado (en este caso, el precio de la vivienda) por cada unidad de cambio en la variable independiente correspondiente, manteniendo todas las demás variables constantes. El intercepto es el valor esperado del precio cuando todas las variables independientes son cero.En este caso, el valor estimado del intercepto es -238.17090. Un valor negativo del intercepto no necesariamente implica un precio negativo de la vivienda. En cambio, representa el precio base teórico de la vivienda cuando todas las variables independientes son cero. En un contexto real, algunas variables, como el área construida, el número de baños, etc., nunca serían cero, lo que hace que esta interpretación literal del intercepto carezca de significado práctico.
En relación a los coeficientes de regresión, se observa que todos son considerablemente mayores que cero, lo que sugiere una potencial relación entre cada variable y el precio de la vivienda. Para validar esta relación, se utiliza la prueba t, que evalúa si el valor del coeficiente (p) es significativamente diferente de cero.
Al analizar los valores de p asociados, se observa lo siguiente:
Para el área construida, el valor de p es extremadamente bajo (< 2e-16 ***), indicando una probabilidad prácticamente nula de que el coeficiente sea igual a cero. Esto sugiere que el área construida tiene una relación significativa con el precio de la vivienda.
Similarmente, para el número de parqueaderos, el valor de p es muy bajo (5.14e-05 ***), lo que también sugiere una relación significativa con el precio de la vivienda.
En el caso de los baños, el valor de p es 0.012 *, aunque mayor que los anteriores, sigue siendo lo suficientemente bajo como para indicar una relación significativa con el precio, aunque posiblemente menor que las variables anteriores.
Respecto al estrato, el valor de p sugiere una relación significativa con el precio de la vivienda.
Para el número de habitaciones, el valor de p es más alto (0.177), lo que indica una menor significancia estadística. Esto sugiere que, si bien puede haber alguna relación entre este factor y el precio de la vivienda, no es tan fuerte como las otras variables.
En términos generales, el modelo muestra un buen ajuste a los datos, con la mayoría de las variables demostrando una relación significativa con el precio de la vivienda. Sin embargo, hay una variable que no parece tener una influencia significativa en el precio. Aunque el modelo es considerablemente sólido, aún queda un porcentaje considerable de la variación en el precio de la vivienda que no está explicada. Esto sugiere que hay otros factores que podrían contribuir a la variabilidad del precio y que no están siendo considerados en el modelo actual.
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).
par(mfrow=c(2,2))
plot(modelo)
resmod = modelo$residuals
shapiro.test(resmod)
##
## Shapiro-Wilk normality test
##
## data: resmod
## W = 0.85246, p-value < 2.2e-16
library(lmtest)
dwtest(modelo)
##
## Durbin-Watson test
##
## data: modelo
## DW = 1.7615, p-value = 0.005472
## alternative hypothesis: true autocorrelation is greater than 0
gqtest(modelo)
##
## Goldfeld-Quandt test
##
## data: modelo
## GQ = 2.2522, df1 = 212, df2 = 211, p-value = 2.995e-09
## alternative hypothesis: variance increases from segment 1 to 2
El p-valor resultante es de 2.995e-09, lo que sigfnifica que es menor al nivel de significancia (0.05), es decir se rechaza la hipotesis, la varianza de los errores no es constante.
Es recomendable evaluar la eliminación de variables como habitaciones o baños, ya que pueden no ser relevantes para el análisis y podrían simplificar el modelo sin perder precisión en las predicciones. Además, la transformación logarítmica de algunas variables podría mejorar la distribución de los datos y la relación lineal con la variable objetivo. Es importante identificar y abordar los valores atípicos que podrían influir significativamente en los resultados del análisis, ya que estos pueden distorsionar las estimaciones y afectar la interpretación de los resultados.
Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
| 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 |
predict(modelo,list(areaconst = 200,parqueaderos = 1, banios = 2,
habitaciones = 4, estrato = 4))
## 1
## 312.101
predict(modelo,list(areaconst = 200,parqueaderos = 1, banios = 2,
habitaciones = 4, estrato = 5))
## 1
## 392.7359
Según los requerimientos, la prediccion que mejor se ajusta al crédito aprobado de 350 millones para la vivienda 1 es el caso #1, el cual contiene el estrato 4 con una predicción de precio de 312.101.000 millones de pesos.
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.
basecasa1=subset(base1, areaconst>=200 & preciom<=350 & habitaciones>=4 & estrato==4 & parqueaderos>=1 & banios >= 2)
basecasa1 = head(basecasa1,5)
basecasa1
## zona estrato preciom areaconst parqueaderos banios habitaciones tipo
## 4458 Zona Norte 4 315 270 2 4 4 Casa
## 3352 Zona Norte 4 335 300 3 4 4 Casa
## 937 Zona Norte 4 350 280 2 3 4 Casa
## 952 Zona Norte 4 330 275 2 3 5 Casa
## 1020 Zona Norte 4 230 250 2 3 5 Casa
## barrio longitud latitud
## 4458 el bosque -76.53176 3.48780
## 3352 el bosque -76.52600 3.43400
## 937 la merced -76.50603 3.46643
## 952 la merced -76.50647 3.47516
## 1020 la merced -76.50799 3.47424
leaflet() %>% addCircleMarkers(lng=basecasa1$longitud,lat=basecasa1$latitud,radius= 5,label = basecasa1$preciom) %>% addTiles()
Realice los pasos del 1 al 6. Para la segunda solicitud que tiene un crédito pre-aprobado por valor de $850 millones.
| Características | Vivienda 2 |
|---|---|
| Tipo | Apartamento |
| Área construida | 300 |
| Parqueaderos | 3 |
| Baños | 3 |
| Habitaciones | 5 |
| Estrato | 5 o 6 |
| Zona | Sur |
| Crédito preaprobado | 850 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?).
base2=data.frame(subset(datos_sin_na, tipo=="Apartamento" & zona=="Zona Sur"))
head(base2,3)
## zona estrato preciom areaconst parqueaderos banios habitaciones
## 5098 Zona Sur 4 290 96 1 2 3
## 698 Zona Sur 3 78 40 1 1 2
## 8199 Zona Sur 6 875 194 2 5 3
## tipo barrio longitud latitud
## 5098 Apartamento acopi -76.53464 3.44987
## 698 Apartamento aguablanca -76.50100 3.40000
## 8199 Apartamento aguacatal -76.55700 3.45900
kable(table(datos_sin_na$zona, datos_sin_na$tipo))
| Apartamento | Casa | |
|---|---|---|
| Zona Centro | 10 | 54 |
| Zona Norte | 852 | 435 |
| Zona Oeste | 966 | 132 |
| Zona Oriente | 22 | 141 |
| Zona Sur | 2381 | 1724 |
leaflet() %>% addCircleMarkers(lng=base2$longitud,lat=base2$latitud,radius= 0.2,label = base2$preciom) %>% addTiles()
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
Primero se muestra la correlació entre las variables
# Calculamos la matriz de correlación para las variables de interés
correlaciones <- cor(base2[,c( 'preciom','areaconst', 'estrato', 'banios', 'habitaciones')], use = "complete.obs")
# Visualización de la matriz de correlación
plot_ly(z = correlaciones, x = colnames(correlaciones), y = colnames(correlaciones), type = "heatmap")
A partir del análisis realizado en el mapa de calor, se han identificado las siguientes correlaciones:
Precio y Área Construida: Se observa una correlación significativa de 0.74, lo cual indica una fuerte relación entre estas dos variables. Esta alta correlación sugiere una tendencia lineal clara que se verá reflejada en el gráfico de dispersión.
Precio y Estrato: Se detecta una correlación alta de 0.64 entre el precio y el estrato. Aunque no es tan fuerte como la anterior, esta correlación aún sugiere una tendencia lineal que puede observarse en el gráfico.
Precio y Baños: La correlación entre el precio y el número de baños es de 0.71, lo que indica una relación bastante significativa entre estas dos variables, lo que sugiere una relación lineal fuerte.
Precio y Habitaciones: Se registra una correlación más baja de 0.29 entre el precio y el número de habitaciones. Esta correlación más débil sugiere que es menos probable que se observe una tendencia lineal clara en el gráfico.
library(plotly)
scatter_precio_area <- plot_ly(data = base2, x = ~areaconst, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "Precio vs. Área Construida")
scatter_precio_estrato <- plot_ly(data = base2, x = ~estrato, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "Precio vs. Estrato")
scatter_precio_banios <- plot_ly(data = base2, x = ~banios, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "Precio vs. Número de Baños")
scatter_precio_habitaciones <- plot_ly(data = base2, x = ~habitaciones, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "Precio vs. Numero de Habitaciones")
matriz_correlacion <- cor(base2[c("preciom", "areaconst", "estrato", "banios", "habitaciones")])
heatmap_correlacion <- plot_ly(z = matriz_correlacion, x = colnames(matriz_correlacion), y = colnames(matriz_correlacion), type = "heatmap", name = "Matriz de Correlación")
subplot_graficos <- subplot(
scatter_precio_area, scatter_precio_estrato, scatter_precio_banios, scatter_precio_habitaciones,
nrows = 2, margin = 0.05
)
subplot_graficos
A partir de los gráficos de dispersión generados, se pueden destacar las siguientes observaciones:
Precio vs Área Construida: Como se esperaba, se puede apreciar una clara tendencia lineal en el gráfico, aunque tambien se observan un para de valores atipicos. Esto sugiere que en la zona sur, las casas tienden a aumentar su precio conforme aumenta su área construida.
Precio vs Estrato: También se observa una tendencia lineal en este gráfico, aunque no tan marcada como en el caso anterior. La tendencia muestra que, para la zona Sur, las casas tienden a tener un precio más alto a medida que aumenta su estrato.
Precio vs Número de Baños: En este caso, también se identifica una tendencia lineal leve. El gráfico muestra que, conforme aumenta el número de baños, el precio de las casas tiende a incrementarse en la zona Sur.
Precio vs Número de Habitaciones: Aunque se puede notar una ligera tendencia en el gráfico, esta no es tan pronunciada como en los casos anteriores. Esto concuerda con la baja correlación entre estas dos variables, como se había anticipado, entonces no necesariamente a mayor numero de habitaciones se va a esperar un mayor precio.
*Usar la variable zona para este ejercicio es innecesario ya que todas las variables se encuentran en la zona norte.
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 R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).
modelo1=lm(preciom ~ areaconst + parqueaderos + banios + habitaciones + estrato, data=base2)
summary(modelo1)
##
## Call:
## lm(formula = preciom ~ areaconst + parqueaderos + banios + habitaciones +
## estrato, data = base2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1092.02 -42.28 -1.33 40.58 926.56
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -261.62501 15.63220 -16.736 < 2e-16 ***
## areaconst 1.28505 0.05403 23.785 < 2e-16 ***
## parqueaderos 72.91468 3.95797 18.422 < 2e-16 ***
## banios 50.69675 3.39637 14.927 < 2e-16 ***
## habitaciones -24.83693 3.89229 -6.381 2.11e-10 ***
## estrato 60.89709 3.08408 19.746 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 98.02 on 2375 degrees of freedom
## Multiple R-squared: 0.7485, Adjusted R-squared: 0.748
## F-statistic: 1414 on 5 and 2375 DF, p-value: < 2.2e-16
El valor de R-squared muestra que las variables areaconst, parqueaderos ,banios, habitaciones y estrato, puede explicar el 75% de la variación en el precio de las viviendas respecto a la variacion total, es decir que el otro 25% de las variaciones del precio de las viviendas se debe a otros factores.El valor ajustado de 0.74 sugiere que después de ajustar el modelo por el número de variables, el modelo aún explica aproximadamente el 74% de la variabilidad.
El valor de F es 1414, lo cual es significativo con un valor de p < 2.2e-16 . Este resultado indica que hay menos de un 0.1% de probabilidad de que ocurra un estadístico F tan grande si la hipótesis nula fuera cierta. Por lo tanto, podemos concluir que el modelo de regresión resulta en una predicción significativamente mejor de el precio de las viviendas que si usáramos el valor promedio de el precio de las viviendas como modelo. En resumen, el modelo de regresión en general predice significativamente bien el precio de las viviendas.
La columna “estimate” muestra los coeficientes de regresión, que representan el cambio esperado en la variable de resultado (en este caso, el precio de la vivienda) por cada unidad de cambio en la variable independiente correspondiente, manteniendo todas las demás variables constantes. El intercepto es el valor esperado del precio cuando todas las variables independientes son cero.En este caso, el valor estimado del intercepto es -261.62501. Un valor negativo del intercepto no necesariamente implica un precio negativo de la vivienda. En cambio, representa el precio base teórico de la vivienda cuando todas las variables independientes son cero. En un contexto real, algunas variables, como el área construida, el número de baños, etc., nunca serían cero, lo que hace que esta interpretación literal del intercepto carezca de significado práctico.
En relación a los coeficientes de regresión, se observa que todos son considerablemente mayores o menores que cero, lo que sugiere una potencial relación entre cada variable y el precio de la vivienda. Para validar esta relación, se utiliza la prueba t, que evalúa si el valor del coeficiente (p) es significativamente diferente de cero.
Al analizar los valores de p asociados, se observa lo siguiente:
Para el área construida, Número de parqueaderos , Baños y Estrato el p-value es extremadamente bajo (< 2e-16 ***), indicando una probabilidad prácticamente nula de que el coeficiente sea igual a cero. Esto sugiere que estas variables tienen una relación significativa con el precio de la vivienda.
Para el número de habitaciones, el p-value es más grande(2.11e-10 ***), lo que indica una menor significancia estadística. Esto sugiere que, si bien puede haber alguna relación entre este factor y el precio de la vivienda, no es tan fuerte como las otras variables.
Conlusión de el modelo implementado
En términos generales, el modelo muestra un buen ajuste a los datos, con la mayoría de las variables demostrando una relación significativa con el precio de la vivienda. (Este modelo de vivienda 2 o para apartamentos ees mucho mejor que el modelo que se implemento en la primera parte de este informe) Sin embargo, hay una variable que no parece tener una influencia significativa en el precio. Aunque el modelo es considerablemente sólido, aún queda un porcentaje considerable de la variación en el precio de la vivienda que no está explicada. Esto sugiere que hay otros factores que podrían contribuir a la variabilidad del precio y que no están siendo considerados en el modelo actual.
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).
par(mfrow=c(2,2))
plot(modelo1)
Respecto a la gráfica “Residuales vs Valores Ajustados” muestra que los residuales se distribuyen de manera aleatoria alrededor de la línea horizontal de cero, lo cual es un indicador de que la relación entre las variables predictoras y la respuesta puede ser adecuadamente capturada por un modelo lineal.
En el gráfico Q-Q, se observa que los residuos se ajustan levemente bien a una distribución normal en la parte central, indicando que los residuos en esa región son aproximadamente normales. Sin embargo, en las colas, especialmente en la derecha, los residuos se desvían de la línea, sugiriendo la presencia de valores atípicos o extremos. Esta discrepancia en las colas podría indicar un posible sesgo en los datos, donde los valores extremos no se modelan adecuadamente con una distribución normal, posiblemente debido a la influencia de factores no considerados en el modelo de precios de las viviendas.En general no se puede decir con certeza que se ajusten a una distribución normal.
En el grafico Scale-Location se observa una tendencia creciente leve en la dispersión de los residuos a medida que aumentan los valores ajustados, lo que podría sugerir la presencia de heterocedasticidad, una violación del supuesto de homocedasticidad. La línea roja, que representa la relación entre los residuos estandarizados y los valores ajustados, tiene una leve pendiente positiva, indicando que los residuos más grandes tienden a ocurrir en valores ajustados más altos. Además, se identifican valores atípicos, que están notablemente alejados del resto, sugiriendo que ciertos valores no se ajustan bien al modelo.
resmod = modelo1$residuals
shapiro.test(resmod)
##
## Shapiro-Wilk normality test
##
## data: resmod
## W = 0.79118, p-value < 2.2e-16
dwtest(modelo1)
##
## Durbin-Watson test
##
## data: modelo1
## DW = 1.5333, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
El p-valor resultante es de 2.2e-16, lo que sigfnifica que es menor al nivel de significancia (0.05), es decir se rechaza la hipotesis, los errores no son independientes.
gqtest(modelo1)
##
## Goldfeld-Quandt test
##
## data: modelo1
## GQ = 0.9513, df1 = 1185, df2 = 1184, p-value = 0.8048
## alternative hypothesis: variance increases from segment 1 to 2
El p-valor resultante es de 0.8048, lo que sigfnifica que es mayor al nivel de significancia (0.05), es decir que acepta la hipotesis, la varianza de los errores es constante.
Es recomendable evaluar la eliminación de la variable habitaciones, ya que puede no ser relevantes para el análisis y podrían simplificar el modelo sin perder precisión en las predicciones. Además, la transformación logarítmica de algunas variables podría mejorar la distribución de los datos y la relación lineal con la variable objetivo. Es importante identificar y abordar los valores atípicos que podrían influir significativamente en los resultados del análisis, ya que estos pueden distorsionar las estimaciones y afectar la interpretación de los resultados.
Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
| Características | Vivienda 2 |
|---|---|
| Tipo | Apartamento |
| Área construida | 300 |
| Parqueaderos | 3 |
| Baños | 3 |
| Habitaciones | 5 |
| Estrato | 5 o 6 |
| Zona | Sur |
| Crédito preaprobado | 850 millones |
predict(modelo1,list(areaconst = 300,parqueaderos = 3, banios = 3,
habitaciones = 5, estrato = 5))
## 1
## 675.0247
predict(modelo1,list(areaconst = 300,parqueaderos = 3, banios = 3,
habitaciones = 5, estrato = 6))
## 1
## 735.9218
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.
baseapartamento1=subset(base2, areaconst>=300 & preciom<=850 & habitaciones>=5 & estrato>=5 & parqueaderos>=3 & banios >= 3)
baseapartamento1 = head(baseapartamento1,5)
baseapartamento1
## zona estrato preciom areaconst parqueaderos banios habitaciones
## 7182 Zona Sur 5 730 573 3 8 5
## 7512 Zona Sur 5 670 300 3 5 6
## tipo barrio longitud latitud
## 7182 Apartamento guadalupe -76.548 3.408
## 7512 Apartamento seminario -76.550 3.409
leaflet() %>% addCircleMarkers(lng=baseapartamento1$longitud,lat=baseapartamento1$latitud,radius= 5,label = baseapartamento1$preciom) %>% addTiles()