CARGA DE LA DATA

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")

PUNTO1: Se hara el filtro para casa y zona norte y se hara un mapa

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.

PUNTO2: Se hara el filtro para casa y zona norte y se hara un mapa

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:

Precio - Área construida:

# 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.

Precio - Estrato:

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.

Precio - Número de baños

# 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.

Precio - Número de habitaciones:

# 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.

Precio - Número de parqueaderos:

# 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.

Punto 3: 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 ) )

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.

Punto 5:

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.

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 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

Punto 7

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

Punto 2

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  
## 

Precio - Área construida:

# 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.

Precio - Estrato:

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.

Precio - Número de baños

# 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.

Precio - Número de habitaciones:

# 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.

Precio - Número de parqueaderos:

# 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

Punto 3: 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 ) )

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.

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(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.

PUNTO 5

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