A CONTINUACION SE CARGA LA INFORMACION
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
vivienda<- read_excel("C:/Users/Mindlabs/Desktop/MAESTRIA_CIENCIA DE DATOS/Semestre_2/Modelos Estadísticos para la toma de decisiones/Actividad_2/vivienda.xlsx")
base1 <- subset(vivienda, tipo == "Casa" & zona == "Zona Norte")
#Mostrar los primeros tres registros
head(base1, 3)
## # A tibble: 3 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1209 Zona N… 02 5 320 150 2 4 6
## 2 1592 Zona N… 02 5 780 380 2 3 3
## 3 4057 Zona N… 02 6 750 445 NA 7 6
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
Crear un mapa con todos los puntos de las bases
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(magrittr)
## Warning: package 'magrittr' was built under R version 4.3.3
library(leaflet)
## Warning: package 'leaflet' was built under R version 4.3.3
mapa <- leaflet(data = base1) %>%
addTiles() %>%
addMarkers(lng = ~longitud, lat = ~latitud)
# Mostrar el mapa
mapa
Los puntos están concentrados en una región cerca de lo que parece ser la intersección entre la ciudad de Cali y municipios cercanos como Palmira y Candelaria en Colombia, sugiriendo que el fenómeno o los datos están fuertemente localizados en la zona Norte, si existen casa en zonas diferentes a la Norte puede que con el tiempo las limitaciones fueron cambiando o tambien una razon en la digitalizacion erronea.
se realiza 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.
summary(base1)
## id zona piso estrato
## Min. : 58.0 Length:722 Length:722 Min. :3.000
## 1st Qu.: 766.2 Class :character Class :character 1st Qu.:3.000
## Median :2257.0 Mode :character Mode :character Median :4.000
## Mean :2574.6 Mean :4.202
## 3rd Qu.:4225.0 3rd Qu.:5.000
## Max. :8319.0 Max. :6.000
##
## preciom areaconst parqueaderos banios
## Min. : 89.0 Min. : 30.0 Min. : 1.000 Min. : 0.000
## 1st Qu.: 261.2 1st Qu.: 140.0 1st Qu.: 1.000 1st Qu.: 2.000
## Median : 390.0 Median : 240.0 Median : 2.000 Median : 3.000
## Mean : 445.9 Mean : 264.9 Mean : 2.182 Mean : 3.555
## 3rd Qu.: 550.0 3rd Qu.: 336.8 3rd Qu.: 3.000 3rd Qu.: 4.000
## Max. :1940.0 Max. :1440.0 Max. :10.000 Max. :10.000
## NA's :287
## habitaciones tipo barrio longitud
## Min. : 0.000 Length:722 Length:722 Min. :-76.59
## 1st Qu.: 3.000 Class :character Class :character 1st Qu.:-76.53
## Median : 4.000 Mode :character Mode :character Median :-76.52
## Mean : 4.507 Mean :-76.52
## 3rd Qu.: 5.000 3rd Qu.:-76.50
## Max. :10.000 Max. :-76.47
##
## latitud
## Min. :3.333
## 1st Qu.:3.452
## Median :3.468
## Mean :3.460
## 3rd Qu.:3.482
## Max. :3.496
##
piso: Indica el número de piso de la propiedad, con valores que van desde 3 hasta 6. La mediana está en 4, lo que sugiere que la mayoría de las propiedades están ubicadas en pisos medios de edificios.
precio: Los precios van desde 89.0 hasta 1940.0, posiblemente en millones de la moneda local. El promedio es 445.9, lo que indica que hay algunas propiedades bastante caras que elevan el promedio sobre la mediana de 390.0.
Ahora se realizará el analisis de correlación entre las variables cuantitativas en función de la variable respuesta:
# Calcular la matriz de correlación
cor_pre_area <- cor.test(base1$preciom, base1$areaconst)
# Mostrar la matriz de correlación
print(cor_pre_area)
##
## Pearson's product-moment correlation
##
## data: base1$preciom and base1$areaconst
## t = 28.774, df = 720, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6954970 0.7635667
## sample estimates:
## cor
## 0.731348
# Calcular la matriz de correlación
cor_pre_area <- cor.test(base1$preciom, base1$areaconst)
# Mostrar la matriz de correlación
print(cor_pre_area)
##
## Pearson's product-moment correlation
##
## data: base1$preciom and base1$areaconst
## t = 28.774, df = 720, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6954970 0.7635667
## sample estimates:
## cor
## 0.731348
library(plotly)
## Warning: package 'plotly' was built under R version 4.3.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.3
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
plot_ly(data = base1, x = ~areaconst, y = ~preciom, type = "scatter", mode = "markers") %>%
layout(title = "Correlación entre Precio y Área Construida",
xaxis = list(title = "Área Construida"),
yaxis = list(title = "Precio de la Casa"))
Existe una correlación positiva entre el área construida y el precio de la casa. Esto significa que, en general, a medida que aumenta el área construida de una casa, también tiende a aumentar su precio. Sin embargo, la relación no parece ser perfectamente lineal y presenta cierta variabilidad. La mayoría de los puntos se concentran en un rango específico del gráfico, probablemente donde se encuentran las áreas construidas más comunes y los rangos de precios típicos para esas áreas. Esto podría indicar un mercado más activo o una mayor demanda en estas categorías específicas. No hay una agrupación clara que indique segmentos específicos dentro del mercado inmobiliario, pero sí hay una tendencia general ascendente.
cor_pre_estrato <- cor.test(base1$preciom, base1$estrato)
# Mostrar la matriz de correlación
print(cor_pre_estrato)
##
## Pearson's product-moment correlation
##
## data: base1$preciom and base1$estrato
## t = 20.783, df = 720, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.5646126 0.6560046
## sample estimates:
## cor
## 0.6123503
library(plotly)
title_clean <- gsub("\n", " ", "Correlación entre Precio y Estrato")
xaxis_title_clean <- gsub("\n", " ", "Estrato")
yaxis_title_clean <- gsub("\n", " ", "Precio de la Casa")
p <- plot_ly(data = base1, x = ~estrato, y = ~preciom, type = "scatter", mode = "markers") %>%
layout(
title = title_clean,
xaxis = list(title = xaxis_title_clean),
yaxis = list(title = yaxis_title_clean)
)
p
Parece haber una relación entre el estrato y el precio de la casa, con un aumento general del precio a medida que sube el estrato. Esto podría indicar que las casas en estratos más altos tienden a ser más caras, lo que es coherente con la expectativa de que los estratos más altos representan áreas más exclusivas o con mejor dotación de servicios y, por lo tanto, con propiedades de mayor valor.
Dentro de cada estrato, hay una amplia gama de precios, lo que indica una variabilidad en el tipo y tamaño de las casas, así como otros factores que afectan el precio, como la ubicación específica, la antigüedad de la casa, las características, entre otros.
# Calcular la matriz de correlación
cor_pre_banios <- cor.test(base1$preciom, base1$banios)
# Mostrar la matriz de correlación
print(cor_pre_banios)
##
## Pearson's product-moment correlation
##
## data: base1$preciom and base1$banios
## t = 16.479, df = 720, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.4682514 0.5743680
## sample estimates:
## cor
## 0.5233357
plot_ly(data = base1, x = ~banios, y = ~preciom, type = "scatter", mode = "markers", color = I("yellow")) %>%
layout(title = "Correlación entre Precio y Número de baños",
xaxis = list(title = "Número de baños"),
yaxis = list(title = "Precio de la Casa"))
Existe una tendencia que sugiere que las casas con más baños tienden a tener un precio más alto. Esto se muestra con la dispersión vertical más amplia en valores más altos a medida que aumenta el número de baños. Hay una gran variabilidad en los precios para casas con un número similar de baños. Por ejemplo, las casas con 2, 3, o 4 baños muestran una amplia gama de precios. Esta variabilidad sugiere que el número de baños es solo uno de varios factores que afectan el precio de una casa.
# Calcular la matriz de correlación
cor_pre_hab <- cor.test(base1$preciom, base1$habitaciones)
# Mostrar la matriz de correlación
print(cor_pre_hab)
##
## Pearson's product-moment correlation
##
## data: base1$preciom and base1$habitaciones
## t = 9.1487, df = 720, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.2557676 0.3865717
## sample estimates:
## cor
## 0.3227096
plot_ly(data = base1, x = ~habitaciones, y = ~preciom, type = "scatter", mode = "markers", color = I("red")) %>%
layout(title = "Correlación entre Precio y Número de habitaciones",
xaxis = list(title = "Número de habitaciones"),
yaxis = list(title = "Precio de la Casa"))
Parece haber una tendencia positiva donde el precio aumenta con el número de habitaciones. Esto es lo que uno esperaría, ya que generalmente las casas más grandes con más habitaciones suelen tener precios más altos.
Hay una amplia variabilidad en el precio dentro del mismo número de habitaciones. Por ejemplo, para casas con 4 habitaciones, hay una gama de precios desde muy bajos hasta muy altos. Esto sugiere que hay otros factores, además del número de habitaciones, que afectan el precio, como la ubicación, el tamaño de las habitaciones, la calidad de los acabados, las comodidades, etc.
# Calcular la matriz de correlación
cor_pre_par <- cor.test(base1$preciom, base1$parqueaderos)
# Mostrar la matriz de correlación
print(cor_pre_par)
##
## Pearson's product-moment correlation
##
## data: base1$preciom and base1$parqueaderos
## t = 9.3995, df = 433, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.3304309 0.4868393
## sample estimates:
## cor
## 0.411662
plot_ly(data = base1, x = ~parqueaderos, y = ~preciom, type = "scatter", mode = "markers", color = I("orange")) %>%
layout(title = "Correlación entre Precio y Parqueaderos",
xaxis = list(title = "Número de parqueaderos"),
yaxis = list(title = "Precio de la Casa"))
## Warning: Ignoring 287 observations
No hay una tendencia clara y definida que muestre que el precio aumenta con el número de parqueaderos. Aunque algunos puntos sugieren precios más altos con más parqueaderos, hay una considerable superposición de precios para casas con diferentes cantidades de parqueaderos.
Los datos están más concentrados en el rango de 1 a 4 parqueaderos, lo cual es típico, ya que la mayoría de las casas suelen ofrecer este número de espacios para estacionamiento.
modelo1=lm(preciom~ areaconst + estrato + habitaciones + parqueaderos + banios, base1)
summary(modelo1)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, 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 ***
## estrato 80.63495 9.82632 8.206 2.70e-15 ***
## habitaciones 7.64511 5.65873 1.351 0.177
## parqueaderos 24.00598 5.86889 4.090 5.14e-05 ***
## banios 18.89938 7.48800 2.524 0.012 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 155.1 on 429 degrees of freedom
## (287 observations deleted due to missingness)
## Multiple R-squared: 0.6041, Adjusted R-squared: 0.5995
## F-statistic: 130.9 on 5 and 429 DF, p-value: < 2.2e-16
Todas las variables independientes (área construida, estrato, número de habitaciones, número de parqueaderos y número de baños) son estadísticamente significativas al nivel de 0.05, como lo indican los valores de p. Esto significa que hay evidencia estadística para afirmar que estas variables tienen una asociación con el precio de la casa (variable dependiente).
Todos los coeficientes de las variables son positivos, lo que indica que hay una relación positiva entre cada variable independiente y el precio de la casa. Por ejemplo, un aumento en el área construida o en el número de parqueaderos está asociado con un aumento en el precio de la casa.
El modelo tiene un intercepto (constante) negativo de aproximadamente -238.10790. Esto sugiere que, cuando todas las variables independientes son cero, el precio de la casa tendría un valor negativo, lo cual no tiene una interpretación práctica. Esto puede ocurrir cuando las variables independientes no son realistas en tener un valor de cero (por ejemplo, no puedes tener una casa con cero metros cuadrados) o el modelo no es el adecuado para predecir precios para valores bajos de las variables independientes.
El R-cuadrado del modelo es de aproximadamente 0.6041, lo que indica que alrededor del 60.41% de la variabilidad en el precio de la casa puede ser explicada por las variables incluidas en el modelo.
El modelo es estadísticamente significativo en conjunto, como lo indica el valor de p muy bajo (< 2.2e-16) del test F.
Es importante señalar que aunque el modelo parece explicar una proporción significativa de la variabilidad en el precio de la casa, hay un 40% aproximadamente de la variabilidad que no se explica por el modelo. Podrían existir otras variables importantes que no se han incluido. Además, las cifras exactas de los coeficientes dependen de las unidades de medida de las variables independientes y de la variable dependiente, así como de la moneda que estés utilizando.
### Punto 4:
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).
shapiro.test(resid(modelo1))
##
## Shapiro-Wilk normality test
##
## data: resid(modelo1)
## W = 0.85246, p-value < 2.2e-16
como el p valor es inferior al 5 % los residuales no se distribuyen normal.
# Gráfico de residuos estandarizados vs. valores ajustados
plot(fitted(modelo1), rstandard(modelo1), ylab = "Residuos Estandarizados", xlab = "Valores Ajustados")
abline(h = 0, col = "red") # Línea horizontal en y = 0 para identificar patrones
los residuos deberían estar dispersos aleatoriamente alrededor de la línea horizontal en 0 sin ningún patrón discernible. En este gráfico, parece haber una dispersión bastante uniforme, lo que podría sugerir que la homocedasticidad no es una preocupación mayor para este modelo. Sin embargo, parece haber una ligera tendencia en los datos con residuos que aumentan ligeramente para valores ajustados más altos.
library(car)
## Warning: package 'car' was built under R version 4.3.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.3.3
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
ncvTest(modelo1)
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 352.7061, Df = 1, p = < 2.22e-16
El análisis revela que la dispersión de los residuos no es uniforme a través del espectro de valores predichos por el modelo, lo que indica que la varianza de los residuos no se mantiene constante en todos los niveles de las predicciones. Esta condición sugiere la presencia de heteroscedasticidad dentro del modelo. Para abordar esta situación, se pueden explorar diversas técnicas de mitigación, que incluyen la transformación de las variables, la aplicación de modelos de regresión alternativos, el ajuste de los residuos, la inclusión de variables de control y la transformación de la variable dependiente, entre otras posibles soluciones.
Finalmente, para la independencia de los errores se realiza la prueba de Durbin-Watson
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.3.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.3.3
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
dwtest(modelo1)
##
## Durbin-Watson test
##
## data: modelo1
## DW = 1.7615, p-value = 0.005472
## alternative hypothesis: true autocorrelation is greater than 0
El p-valor asociado con la prueba es de aproximadamente 0.055, que está justo por encima del umbral común de significancia estadística de 0.05. Esto significa que hay una evidencia marginalmente significativa para rechazar la hipótesis nula de que no hay autocorrelación en los residuos; en otras palabras, no puedes estar completamente seguro de que haya autocorrelación.
Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
soluc1 = data.frame(
areaconst = 200,
parqueaderos = 1,
estrato = c(4,5),
banios = 2,
habitaciones = 4
)
soluc1
## areaconst parqueaderos estrato banios habitaciones
## 1 200 1 4 2 4
## 2 200 1 5 2 4
predict(modelo1,soluc1)
## 1 2
## 312.1010 392.7359
Basado en el modelo de regresión lineal utilizado inicialmente, en el cual no se aplicaron ajustes, se puede determinar que los precios de las viviendas con un área construida de 200m cuadrados, 1 parqueadero, 4 habitaciones y 2 baños en estrato 4 es de 312 millones de pesos aproximdamente, mientras que en estrato 5 con las mismas caracteristicas es de 392 millones de pesos, lo que demuestra que el estrato tiene un peso significativo sobre el precio de la vivienda. Esto indica que el estrato es un factor significativo que influye en el precio de las propiedades.
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.
las 5 primera ofertas que aparecen deben ser las de mas opcion para discutir
# Filtrar base1 para seleccionar ofertas potenciales
ofertas1 <- filter(base1, areaconst >= 200, parqueaderos >= 1, banios >= 2, habitaciones >= 4, estrato == 4)
# Seleccionar las ofertas potenciales dentro del presupuesto máximo de 350 millones de pesos
ofertas1 <- ofertas1[ofertas1$preciom <= 350, ]
ofertas1
## # A tibble: 12 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4458 Zona … 02 4 315 270 2 4 4
## 2 3352 Zona … <NA> 4 335 300 3 4 4
## 3 937 Zona … 02 4 350 280 2 3 4
## 4 952 Zona … 02 4 330 275 2 3 5
## 5 1020 Zona … 02 4 230 250 2 3 5
## 6 1108 Zona … 02 4 330 260 1 3 4
## 7 1144 Zona … <NA> 4 320 200 2 4 4
## 8 7432 Zona … 01 4 260 280 2 4 6
## 9 5031 Zona … 03 4 350 350 1 4 5
## 10 2544 Zona … 01 4 340 264. 2 4 4
## 11 7470 Zona … 02 4 340 264 2 5 7
## 12 1822 Zona … <NA> 4 340 295 2 2 4
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
mapa_ofrt1 <- leaflet(ofertas1) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud, color = "red", radius = 4) %>%
addLabelOnlyMarkers(lng = ~longitud, lat = ~latitud, label = ~paste("ID:", id), labelOptions = labelOptions(noHide = TRUE))
mapa_ofrt1
base2 <- subset(vivienda, tipo == "Apartamento" & zona == "Zona Sur")
head(base2,3)
## # A tibble: 3 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 5098 Zona S… 05 4 290 96 1 2 3
## 2 698 Zona S… 02 3 78 40 1 1 2
## 3 8199 Zona S… <NA> 6 875 194 2 5 3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
se Crea un mapa
mapa <- leaflet(data = base2) %>%
addTiles() %>%
addMarkers(lng = ~longitud, lat = ~latitud)
# Mostrar el mapa
mapa
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.
Se realiza un análisis previo de la base que se encuentra filtrada por el tipo de vivienda “Apartamento” ubicados en la Zona Sur
summary(base2)
## id zona piso estrato
## Min. : 3 Length:2787 Length:2787 Min. :3.00
## 1st Qu.:2292 Class :character Class :character 1st Qu.:4.00
## Median :4004 Mode :character Mode :character Median :5.00
## Mean :4131 Mean :4.63
## 3rd Qu.:5876 3rd Qu.:5.00
## Max. :8302 Max. :6.00
##
## preciom areaconst parqueaderos banios
## Min. : 75.0 Min. : 40.00 Min. : 1.000 Min. :0.000
## 1st Qu.: 175.0 1st Qu.: 65.00 1st Qu.: 1.000 1st Qu.:2.000
## Median : 245.0 Median : 85.00 Median : 1.000 Median :2.000
## Mean : 297.3 Mean : 97.47 Mean : 1.415 Mean :2.488
## 3rd Qu.: 335.0 3rd Qu.:110.00 3rd Qu.: 2.000 3rd Qu.:3.000
## Max. :1750.0 Max. :932.00 Max. :10.000 Max. :8.000
## NA's :406
## habitaciones tipo barrio longitud
## Min. :0.000 Length:2787 Length:2787 Min. :-76.57
## 1st Qu.:3.000 Class :character Class :character 1st Qu.:-76.54
## Median :3.000 Mode :character Mode :character Median :-76.53
## Mean :2.966 Mean :-76.53
## 3rd Qu.:3.000 3rd Qu.:-76.52
## Max. :6.000 Max. :-76.46
##
## latitud
## Min. :3.334
## 1st Qu.:3.370
## Median :3.383
## Mean :3.390
## 3rd Qu.:3.406
## Max. :3.497
##
# Calcular la matriz de correlación
cor_pre_area <- cor.test(base2$preciom, base2$areaconst)
# Mostrar la matriz de correlación
print(cor_pre_area)
##
## Pearson's product-moment correlation
##
## data: base2$preciom and base2$areaconst
## t = 61.328, df = 2785, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7417418 0.7733594
## sample estimates:
## cor
## 0.7579955
library(plotly)
plot_ly(data = base2, x = ~areaconst, y = ~preciom, type = "scatter", mode = "markers") %>%
layout(title = "Correlación entre Precio y Área Construida",
xaxis = list(title = "Área Construida"),
yaxis = list(title = "Precio de la Casa"))
Parece haber una relación positiva entre el área construida y el precio de la casa. A medida que aumenta el área construida, el precio de la casa tiende a aumentar también, lo cual es una tendencia común en bienes raíces.
Hay una amplia variabilidad en el precio para casas con áreas construidas similares, lo que sugiere que otros factores además del área están influenciando el precio. Esto podría incluir la ubicación, la antigüedad de la propiedad, la calidad de los acabados y otros atributos del hogar.
cor_pre_estrato <- cor.test(base2$preciom, base2$estrato)
# Mostrar la matriz de correlación
print(cor_pre_estrato)
##
## Pearson's product-moment correlation
##
## data: base2$preciom and base2$estrato
## t = 47.98, df = 2785, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6518591 0.6925382
## sample estimates:
## cor
## 0.6727067
library(plotly)
title_clean <- gsub("\n", " ", "Correlación entre Precio y Estrato")
xaxis_title_clean <- gsub("\n", " ", "Estrato")
yaxis_title_clean <- gsub("\n", " ", "Precio de la Casa")
p <- plot_ly(data = base2, x = ~estrato, y = ~preciom, type = "scatter", mode = "markers") %>%
layout(
title = title_clean,
xaxis = list(title = xaxis_title_clean),
yaxis = list(title = yaxis_title_clean)
)
p
Parece haber una tendencia de que a medida que aumenta el estrato, también lo hace el rango de precios de las casas. Esto podría sugerir que las viviendas situadas en estratos más altos tienden a tener un precio mayor, lo que es coherente con la idea de que las áreas de estrato más alto suelen ser más exclusivas y costosas.
Existe una considerable dispersión de precios dentro de cada estrato, especialmente en los estratos más altos. Esto indica que, aunque el estrato puede ser un indicador del precio, hay una variabilidad significativa que podría explicarse por otros factores como la ubicación exacta, el tamaño de la propiedad, las comodidades o el estado del inmueble.
# Calcular la matriz de correlación
cor_pre_banios <- cor.test(base2$preciom, base2$banios)
# Mostrar la matriz de correlación
print(cor_pre_banios)
##
## Pearson's product-moment correlation
##
## data: base2$preciom and base2$banios
## t = 54.7, df = 2785, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7012801 0.7371036
## sample estimates:
## cor
## 0.7196705
plot_ly(data = base2, x = ~banios, y = ~preciom, type = "scatter", mode = "markers", color = I("yellow")) %>%
layout(title = "Correlación entre Precio y Número de baños",
xaxis = list(title = "Número de baños"),
yaxis = list(title = "Precio de la Casa"))
Al igual que con otras características de la vivienda, el número de baños no es el único factor que determina el precio. Incluso con un número similar de baños, los precios de las viviendas varían ampliamente, lo que sugiere la influencia de otros factores como ubicación, tamaño del inmueble, calidad de los acabados, entre otros.
# Calcular la matriz de correlación
cor_pre_hab <- cor.test(base2$preciom, base2$habitaciones)
# Mostrar la matriz de correlación
print(cor_pre_hab)
##
## Pearson's product-moment correlation
##
## data: base2$preciom and base2$habitaciones
## t = 18.559, df = 2785, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.2982991 0.3643944
## sample estimates:
## cor
## 0.3317538
plot_ly(data = base2, x = ~habitaciones, y = ~preciom, type = "scatter", mode = "markers", color = I("red")) %>%
layout(title = "Correlación entre Precio y Número de habitaciones",
xaxis = list(title = "Número de habitaciones"),
yaxis = list(title = "Precio de la Casa"))
Aunque podríamos esperar que más habitaciones se traduzcan en precios más altos, la relación no es claramente definida en el gráfico. Hay un rango de precios dentro de cada cantidad de habitaciones, lo que sugiere que el número de habitaciones es solo uno de los muchos factores que afectan el precio.
# Calcular la matriz de correlación
cor_pre_par <- cor.test(base2$preciom, base2$parqueaderos)
# Mostrar la matriz de correlación
print(cor_pre_par)
##
## Pearson's product-moment correlation
##
## data: base2$preciom and base2$parqueaderos
## t = 46.942, df = 2379, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6719868 0.7137277
## sample estimates:
## cor
## 0.6934386
plot_ly(data = base2, x = ~parqueaderos, y = ~preciom, type = "scatter", mode = "markers", color = I("orange")) %>%
layout(title = "Correlación entre Precio y Parqueaderos",
xaxis = list(title = "Número de parqueaderos"),
yaxis = list(title = "Precio de la Casa"))
## Warning: Ignoring 406 observations
modelo2=lm(preciom~ areaconst + estrato + habitaciones + parqueaderos + banios, base2)
summary(modelo2)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, 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 ***
## estrato 60.89709 3.08408 19.746 < 2e-16 ***
## habitaciones -24.83693 3.89229 -6.381 2.11e-10 ***
## parqueaderos 72.91468 3.95797 18.422 < 2e-16 ***
## banios 50.69675 3.39637 14.927 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 98.02 on 2375 degrees of freedom
## (406 observations deleted due to missingness)
## Multiple R-squared: 0.7485, Adjusted R-squared: 0.748
## F-statistic: 1414 on 5 and 2375 DF, p-value: < 2.2e-16
El R cuadrado múltiple es de 0.7485, lo cual indica que aproximadamente el 74.85% de la variabilidad del precio puede ser explicada por el modelo.
En general, el modelo parece ser significativo y podría ser un buen predictor del precio de las propiedades, aunque siempre se deben considerar otros factores como la posibilidad de variables omitidas, la validez de las suposiciones del modelo y la potencial multicolinealidad entre las variables independientes.
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).
shapiro.test(resid(modelo2))
##
## Shapiro-Wilk normality test
##
## data: resid(modelo2)
## W = 0.79118, p-value < 2.2e-16
Como el p valor de la prueba de normalidad es inferior al 5% se puede concluir que los residuales no se comportan de manera normal
# Gráfico de residuos estandarizados vs. valores ajustados
plot(fitted(modelo2), rstandard(modelo2), ylab = "Residuos Estandarizados", xlab = "Valores Ajustados")
abline(h = 0, col = "red") # Línea horizontal en y = 0 para identificar patrones
ncvTest(modelo2)
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 4517.411, Df = 1, p = < 2.22e-16
Los resultados y la representación visual indican que los residuos se dispersan de forma más amplia a medida que se incrementan los valores pronosticados por el modelo. Un valor alto en la prueba de Chi-cuadrado, específicamente de 4517.411, señala una heterocedasticidad en los errores del modelo; esto es, la variabilidad de los errores no se mantiene uniforme a través de todos los valores pronosticados. Para abordar esta heterocedasticidad, se pueden adoptar diferentes métodos, tales como transformar las variables involucradas, explorar modelos de regresión alternativos, hacer ajustes en los residuos, incluir variables de control, o modificar la variable dependiente. Estos ajustes buscan estabilizar la varianza de los errores y mejorar la precisión del modelo.
por ultima se hara la prueba de DW
# Prueba de Durbin-Watson
dwtest(modelo2)
##
## Durbin-Watson test
##
## data: modelo2
## DW = 1.5333, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
El estadístico de Durbin-Watson obtenido es de 1.5333, lo que implica la presencia de autocorrelación en los residuos del modelo; un valor de Durbin-Watson cercano a 2 apunta a una ausencia de autocorrelación. Así que, dado que el valor está por debajo de 2, hay indicios de una correlación positiva entre los residuos consecutivos. Esta autocorrelación positiva sugiere que los errores en las predicciones del modelo no son completamente independientes entre sí, sino que tienden a seguir un patrón predecible de una observación a la siguiente. Esto podría afectar la confiabilidad de las estimaciones del modelo, por lo que sería conveniente aplicar técnicas correctivas como introducir variables autorregresivas o realizar transformaciones de las variables existentes para mejorar la independencia de los errores.
Con el modelo identificado debe predecir el precio de la vivienda con las características de la segunda solicitud.
soluc2 = data.frame(
areaconst = 300,
parqueaderos = 3,
estrato = c(5,6),
banios = 3,
habitaciones = 5
)
soluc2
## areaconst parqueaderos estrato banios habitaciones
## 1 300 3 5 3 5
## 2 300 3 6 3 5
predict(modelo2,soluc2)
## 1 2
## 675.0247 735.9218
El análisis realizado mediante un modelo de regresión lineal simple, que no ha sido modificado o ajustado, sugiere que el valor de un apartamento situado en el sector sur, con 300 metros cuadrados de área construida, 3 lugares de estacionamiento, 5 dormitorios y 3 baños, en un barrio de estrato 5, rondaría los 675 millones de pesos. Por otro lado, un apartamento con idénticas características pero en un área de estrato 6 se estima en unos 736 millones de pesos. Esto refleja que el estrato socioeconómico ejerce una influencia considerable en el precio del inmueble.
##Punto 6:
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 850 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.
Teniendo en cuenta el valor del crédito preaprobado de $350 millones, se deduce que la vivienda debería estar en estrato 4.
# Filtrar la base2 para seleccionar ofertas potenciales
ofertas2 <- filter(base2, areaconst >= 300, parqueaderos >= 3, banios >= 3, habitaciones >= 5, estrato %in% c(5,6))
# Seleccionar las ofertas potenciales dentro del presupuesto máximo de 350 millones de pesos
ofertas2 <- ofertas2[ofertas2$preciom <= 850, ]
ofertas2
## # A tibble: 2 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 7182 Zona S… <NA> 5 730 573 3 8 5
## 2 7512 Zona S… <NA> 5 670 300 3 5 6
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
mapa_ofrt2 <- leaflet(ofertas2) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud, color = "blue", radius = 4) %>%
addLabelOnlyMarkers(lng = ~longitud, lat = ~latitud, label = ~paste("ID:", id), labelOptions = labelOptions(noHide = TRUE))
mapa_ofrt2
SE SUGIERE COMPRAR LAS CASA CON ID 7515 Y 7182