1. Problema

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:

Imagen 1
Imagen 1

Ayude a María a responder la solicitud, mediante técnicas modelación que usted conoce. Ella requiere le envíe un informe ejecutivo donde analice los dos casos y sus recomendaciones (Informe). Como soporte del informe debe anexar las estimaciones, validaciones y comparación de modelos requeridos (Anexos) .

2 Realizar cargue de datos

##install.packages("devtools") # solo la primera vez
#devtools::install_github("dgonxalex80/paqueteMODELOS", force =TRUE)
library(paqueteMODELOS)
## Loading required package: boot
## Loading required package: broom
## Loading required package: GGally
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## Loading required package: gridExtra
## Loading required package: knitr
## Loading required package: summarytools
data("vivienda")
head(vivienda)

realizamos una copia de a base para el trabajo de campo

vivienda_copy <- vivienda
#ruta <- "E:/FABIAN/1-javeriana_cali/Semestre 2/2_estadistica/Actividad_1/vivienda.csv"
# Cargar el archivo CSV
#vivienda2 <- read.csv(ruta)
#head(vivienda2)

2.1 Resumen de estadísticas descriptivas de las columnas

library(knitr)

info_columnas <- data.frame(
  ID = seq_along(colnames(vivienda)),
  Tipo_Formato = sapply(vivienda, class),
  Cantidad_Diferentes = sapply(vivienda, function(col) length(unique(col))),
  Cantidad_NA = sapply(vivienda, function(col) sum(is.na(col))),
  Cantidad_Null = sapply(vivienda, function(col) sum(is.null(col)))
)

# Agregar una nueva columna que muestre la cantidad de registros con valor 0 en cada columna
info_columnas$Cantidad_Cero = sapply(vivienda, function(col) sum(col == 0, na.rm = TRUE))

# Imprimir información de las columnas
kable(info_columnas, format = "markdown")
ID Tipo_Formato Cantidad_Diferentes Cantidad_NA Cantidad_Null Cantidad_Cero
id 1 numeric 8320 3 0 0
zona 2 character 6 3 0 0
piso 3 character 13 2638 0 0
estrato 4 numeric 5 3 0 0
preciom 5 numeric 540 2 0 0
areaconst 6 numeric 653 3 0 0
parqueaderos 7 numeric 11 1605 0 0
banios 8 numeric 12 3 0 45
habitaciones 9 numeric 12 3 0 66
tipo 10 character 3 3 0 0
barrio 11 character 437 3 0 0
longitud 12 numeric 2929 3 0 0
latitud 13 numeric 3680 3 0 0
cantidad_registros <- nrow(vivienda)
print(cantidad_registros)
## [1] 8322

RESULTADOS : Características de las variables y datos faltantes:

  • Se identifica que el dataframe cuenta con información de 8.320 viviendas medidas en 12 variables: zona, piso, estrato, preciom, areaconst, parqueaderos, banios, habitaciones, tipo, barrio, longitud y latitud.

  • En en analisis de datos faltantes en varias columnas identifica la presencia de registros con marca de NA en la columnas Piso con 2638 registros y parqueaderos en 1605 registros

  • Se presenta que en la variable habitaciones hay 66 registros que estan en 0 los cuales no aplican para el reporte

  • En en analisis de datos faltantes en varias columnas identifica la presencia de registros con NA En 3 filas los cuales no son necesarios para el analisis

2.2 Elimianr registros inconsistemntes areaconst =NA, habitaciones = 0

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:gridExtra':
## 
##     combine
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Crear una nueva versión de la base de datos sin los registros a eliminar
vivienda <- vivienda %>%
  filter(!(is.na(areaconst) | habitaciones == 0))
info_columnas <- data.frame(
  ID = seq_along(colnames(vivienda)),
  Tipo_Formato = sapply(vivienda, class),
  Cantidad_Diferentes = sapply(vivienda, function(col) length(unique(col))),
  Cantidad_NA = sapply(vivienda, function(col) sum(is.na(col))),
  Cantidad_Null = sapply(vivienda, function(col) sum(is.null(col)))
)

# Agregar una nueva columna que muestre la cantidad de registros con valor 0 en cada columna
info_columnas$Cantidad_Cero = sapply(vivienda, function(col) sum(col == 0, na.rm = TRUE))

# Imprimir información de las columnas
kable(info_columnas, format = "markdown")
ID Tipo_Formato Cantidad_Diferentes Cantidad_NA Cantidad_Null Cantidad_Cero
id 1 numeric 8253 0 0 0
zona 2 character 5 0 0 0
piso 3 character 13 2597 0 0
estrato 4 numeric 4 0 0 0
preciom 5 numeric 539 0 0 0
areaconst 6 numeric 648 0 0 0
parqueaderos 7 numeric 11 1559 0 0
banios 8 numeric 11 0 0 10
habitaciones 9 numeric 10 0 0 0
tipo 10 character 2 0 0 0
barrio 11 character 433 0 0 0
longitud 12 numeric 2911 0 0 0
latitud 13 numeric 3654 0 0 0
cantidad_registros <- nrow(vivienda)
print(cantidad_registros)
## [1] 8253

RESULTADOS : Características de las variables y datos faltantes:

  • Se identifica que el dataframe cuenta con información de 8253 viviendas con inofrmacion que aplica para el ejercicio datos con coherencia

3.1 Se toman BASE_1: casa = norte

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?).

base_1 <- vivienda %>%
  filter(zona == "Zona Norte" & tipo == "Casa")
knitr::kable(head(base_1, 3), caption = "Base1 Norte")
Base1 Norte
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
1209 Zona Norte 02 5 320 150 2 4 6 Casa acopi -76.51341 3.47968
1592 Zona Norte 02 5 780 380 2 3 3 Casa acopi -76.51674 3.48721
4057 Zona Norte 02 6 750 445 NA 7 6 Casa acopi -76.52950 3.38527
##install.packages("leaflet")
library(leaflet)

# Crear un mapa
mapa <- leaflet(data = base_1) %>%
  addTiles()  # Agregar capa base (puedes personalizarla)

# Agregar marcadores (puntos) al mapa
mapa <- mapa %>%
  addMarkers(
    lng = ~longitud,  # Columna con longitud
    lat = ~latitud,   # Columna con latitud
    label = ~id,      # Etiqueta para los marcadores (puedes personalizarla)
    popup = ~paste("Tipo: ", tipo, "<br>Barrio: ", barrio)  # Información adicional en el popup
  )

# Mostrar el mapa
mapa
library(leaflet)#
library(leaflet.extras)

# Crear un mapa
mapa_calor <- leaflet(data = base_1) %>%
  addTiles()  #


mapa_calor <- mapa_calor %>%
  addHeatmap(
    lng = ~longitud,  
    lat = ~latitud,   
    radius = 15       
  )


mapa_calor
library(leaflet)


mapa <- leaflet(data = base_1) %>%
  addTiles()  


colores <- colorFactor(
  palette = c("blue", "green", "orange", "red"),  # Colores disponibles
  domain = base_1$preciom  # Columna "preciom" para asignar colores
)


mapa <- mapa %>%
  addCircleMarkers(
    lng = ~longitud,  # Columna con longitud
    lat = ~latitud,   # Columna con latitud
    radius = 5,       # Tamaño de los marcadores
    color = ~colores(preciom),  # Asignar colores basados en "preciom"
    fillOpacity = 0.6,  # Opacidad de relleno
    popup = ~paste("Tipo: ", tipo, "<br>Barrio: ", barrio, "<br>Precio: $", preciom)  # Información en el popup
  )


mapa <- mapa %>%
  addLegend(
    position = "bottomright",
    colors = c("blue", "green", "orange", "red"),  # Colores disponibles
    labels = c("0-100", "101-200", "201-300", "301+"),
    title = "Precio (Millones de pesos)"
  )

# Mostrar el mapa
mapa

RESULTADOS : Analisis grafico

Se presentan registros que se presnetan en zonas difetenes a la la “Zona Norte” lo cual puede ser por Coordenadas geográficas incorrectas, la zona mal clasificada o cohordenadas mal descritas geograficamente.

3.2 Analisis Exploratorio

Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio de las casas) 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.

library(plotly)
## 
## 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
scatter_precio_area <- plot_ly(data = base_1, 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 = base_1, x = ~estrato, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "Precio vs. Estrato")


scatter_precio_banios <- plot_ly(data = base_1, 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 = base_1, x = ~habitaciones, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "Precio vs. Numero de Habitaciones")


matriz_correlacion <- cor(base_1[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
heatmap_correlacion
#install.packages("GGally")

library(dplyr)
library(GGally)


variables_interes <- base_1 %>%
  select(preciom, areaconst, estrato, banios, habitaciones, parqueaderos)

# Suprimir las advertencias durante la generación del gráfico
suppressWarnings({
  # Crear el gráfico de pares
  pair_plot <- ggpairs(variables_interes)
})

# Mostrar el gráfico de pares
print(pair_plot)
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 270 rows containing missing values

## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 270 rows containing missing values

## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 270 rows containing missing values

## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 270 rows containing missing values

## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 270 rows containing missing values
## Warning: Removed 270 rows containing missing values (`geom_point()`).
## Removed 270 rows containing missing values (`geom_point()`).
## Removed 270 rows containing missing values (`geom_point()`).
## Removed 270 rows containing missing values (`geom_point()`).
## Removed 270 rows containing missing values (`geom_point()`).
## Warning: Removed 270 rows containing non-finite values (`stat_density()`).

RESULTADOS : Analisis grafico

Interpretemos los resultados de los gráficos y la matriz de correlación en el análisis exploratorio de datos (EDA) que realizamos:

-Precio vs. Área Construida: El gráfico de dispersión muestra una tendencia positiva, lo que sugiere que a medida que aumenta el área construida, tiende a aumentar el precio de las vivienda a diferencia de 2 puntos : EL PRIMERO con areas de 1188 con un valor de 650Millones y EL SEGUNDO con un area de 1440 presenta un valor 370 millones lo cual se ve relacioando por el estrato o es un dato desviado. tiene una correlación de 0.732 con preciom. Esto indica una correlación positiva fuerte entre el precio y el área construida.

-Precio vs. Estrato: El gráfico de dispersión muestra una dispersión de puntos en diferentes estratos, No se observa una tendencia clara. Esto indica que la relación entre el estrato y el precio puede ser más compleja y que otros factores pueden influir en el precio , tiene una correlación de 0.619 con preciom. Esto también indica una correlación positiva, aunque un poco más débil que en el caso del área construida.

-Precio vs. Número de Baños: El gráfico de dispersión muestra una ligera tendencia positiva, lo que sugiere que a medida que aumenta el número de baños, tiende a aumentar el precio de las viviendas.Con una correlación positiva entre el precio y el número de baños, tiene una correlación de 0.552 con preciom. Esto indica una correlación positiva moderada entre el número de baños y el precio.

-Precio vs. Número de Habitaciones: El gráfico de dispersión muestra una dispersión de puntos en diferentes números de habitaciones, pero no se observa una tendencia clara. Tiene una correlación de 0.377 con preciom. Esto indica una correlación positiva, pero más débil que las anteriores. A medida que el número de habitaciones aumenta, el precio tiende a aumentar, pero la relación es menos fuerte.

-Precio vs. Número de Parqueaderos:tiene una correlación de 0.414 con precio. Esto indica una correlación positiva moderada entre el número de parqueaderos y el precio. A medida que el número de parqueaderos aumenta, el precio tiende a aumentar.

Matriz de Correlación:

La matriz de correlación muestra los coeficientes de correlación entre las variables numéricas. Observamos que: El precio tiene una correlación positiva moderada con el área construida y estrato principalmente.

3.3 Modelo de Regresion lineal

Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, numero de cuartos, numero de parqueaderos,numero 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)

# Estimar el modelo de regresión lineal múltiple
modelo <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = base_1)

# Resumen del modelo
summary(modelo)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = base_1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -783.25  -78.11  -15.78   48.08  979.35 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -240.66853   45.04002  -5.343 1.49e-07 ***
## areaconst       0.67543    0.05319  12.699  < 2e-16 ***
## estrato        81.20468    9.87951   8.220 2.49e-15 ***
## habitaciones    8.02546    5.79739   1.384   0.1670    
## parqueaderos   24.40463    5.92440   4.119 4.57e-05 ***
## banios         18.25750    7.56265   2.414   0.0162 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 155.5 on 426 degrees of freedom
##   (270 observations deleted due to missingness)
## Multiple R-squared:  0.6041, Adjusted R-squared:  0.5995 
## F-statistic:   130 on 5 and 426 DF,  p-value: < 2.2e-16

Residuals (Residuos):

Los residuos representan las diferencias entre los valores observados y los valores predichos por el modelo. La estadística descriptiva de los residuos muestra que la mayoría de los residuos están cerca o debajo del cero, lo que sugiere que el modelo está haciendo un buen trabajo al explicar la variabilidad en el precio. Los residuos tienen un mínimo de -783.25 y un máximo de 979.35, lo que indica cierta variabilidad en la diferencia entre los valores observados y predichos.

Coefficients (Coeficientes):

Los coeficientes representan la relación entre las variables independientes y la variable dependiente (precio) en el modelo. El intercepto (Intercept) tiene un valor estimado de -240.67. Esto significa que, cuando todas las demás variables son cero, el precio esperado de la vivienda sería -240.67. Sin embargo, este valor no tiene una interpretación realista en este contexto. Para las variables predictoras: El coeficiente para “areaconst” es 0.67543, lo que significa que un aumento de una unidad en el área construida se asocia, en promedio, con un aumento de 0.67543 en el precio, manteniendo todas las demás variables constantes. El coeficiente para “estrato” es 81.20468, lo que sugiere que un aumento en el estrato se asocia, en promedio, con un aumento de $81.20 en el precio, manteniendo todas las demás variables constantes. El coeficiente para “parqueaderos” es 24.40463, lo que indica que un aumento en el número de parqueaderos se asocia, en promedio, con un aumento de $24.40 en el precio, manteniendo todas las demás variables constantes. El coeficiente para “banios” es 18.25750, lo que sugiere que un aumento en el número de baños se asocia, en promedio, con un aumento de $18.26 en el precio, manteniendo todas las demás variables constantes. La variable “habitaciones” tiene un coeficiente de 8.02546, pero no es estadísticamente significativa (p-valor > 0.05), lo que sugiere que el número de habitaciones no tiene un efecto significativo en el precio en este modelo. Residual standard error (Error estándar de los residuos):

El error estándar de los residuos es una medida de la dispersión de los residuos alrededor de la línea de regresión. En este caso, tiene un valor de 155.5, lo que indica la dispersión promedio de las observaciones alrededor de la línea de regresión. Multiple R-squared (R-cuadrado múltiple):

El coeficiente R^2 es 0.6041, lo que significa que aproximadamente el 60.41% de la variabilidad en el precio se explica por las variables independientes incluidas en el modelo. Esto indica que el modelo tiene un buen poder explicativo, ya que una proporción significativa de la variabilidad en el precio se puede explicar mediante las variables predictoras. Adjusted R-squared (R-cuadrado ajustado):

El R-cuadrado ajustado tiene en cuenta el número de variables en el modelo y penaliza la inclusión de variables irrelevantes. En este caso, el R-cuadrado ajustado es 0.5995, lo que sugiere que el modelo ajustado también tiene un buen poder explicativo. F-statistic (Estadística F):

La estadística F evalúa la significancia global del modelo. El valor de la estadística F es 130, y el p-valor asociado es prácticamente cero, lo que indica que el modelo en su conjunto es estadísticamente significativo. En resumen, el modelo de regresión lineal múltiple muestra que las variables “área construida”, “estrato”, “parqueaderos” y “baños” son estadísticamente significativas para predecir el precio de las viviendas. El modelo explica aproximadamente el 60.41% de la variabilidad en el precio. Sin embargo, la variable “número de habitaciones” no es estadísticamente significativa en este contexto.

3.4 Realice la validación de supuestos

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)

3.4.1 Linealidad

# Gráfico de residuos vs. valores ajustados
plot(modelo, which = 1)

En este gráfico, se evalúa si los residuos tienen una distribución aleatoria en relación con los valores ajustados.

Si los puntos siguen un patrón no aleatorio (como una curva o una forma de embudo), esto podría indicar una violación de la suposición de linealidad. Podría ser necesario considerar transformaciones de variables.

Se puede observar que los residuos se distribuyen alrededor del cero, lo cual indica que la distribucion no es normal

3.4.2 Residuos vs. Variables Independientes (Linealidad):

# Gráfico de residuos vs. variables independientes
plot(modelo, which = 2)

# Histograma de los residuos
hist(resid(modelo), main = "Histograma de Residuos")

# Gráfico Q-Q de los residuos
qqnorm(resid(modelo))
qqline(resid(modelo))

shapiro.test(modelo$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo$residuals
## W = 0.85285, p-value < 2.2e-16

Prueba de Normalidad de Shapiro-Wilk:

Valor de W (estadístico de prueba): 0.85285 Valor p (p-value): < 2.2e-16 (prácticamente cero) Interpretación:

El valor p obtenido en la prueba de Shapiro-Wilk es extremadamente pequeño (< 2.2e-16), lo que indica una fuerte evidencia en contra de la hipótesis nula de que los residuos siguen una distribución normal. En otras palabras, los residuos no se distribuyen de manera normal según los resultados de esta prueba. Implicaciones:

La violación de la suposición de normalidad de los residuos sugiere que el modelo de regresión lineal múltiple podría no ser completamente apropiado para estos datos. Es importante tener en cuenta que, aunque los residuos no sigan una distribución normal, aún es posible que el modelo sea útil para hacer predicciones. Sin embargo, las interpretaciones de los coeficientes y las pruebas de hipótesis basadas en la suposición de normalidad pueden no ser confiables.

3.4.3 Homocedasticidad)

# Gráfico de residuos vs. variables independientes
plot(modelo, which = 3)

Este gráfico evalúa si la dispersión de los residuos es constante en todos los niveles de los valores ajustados.

Los puntos destan distribuidos aleatoriamente alrededor de la línea horizontal podría indicar una violación de la suposición de homocedasticidad, lo que significa que la variabilidad de los errores no es constante

Prueba Breusch-Pagan (Homocedasticidad)

library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(modelo)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo
## BP = 79.318, df = 5, p-value = 1.165e-15

Se identifica que la prueba (BP) es un valor numérico que representa la magnitud del estadístico de Breusch-Pagan. Significado: Cuanto mayor sea el valor de BP, mayor será la evidencia en contra de la homocedasticidad. En este caso, el valor de 79.318 es significativamente alto, lo que sugiere fuertemente la presencia de heterocedasticidad en el modelo.

El Valor p: 1.165e-15 (un valor extremadamente pequeño): indica que es extremadamente improbable que hayamos observado estos resultados si asumimos que la varianza de los errores es constante (homocedasticidad). Un valor p tan pequeño refuerza aún más la evidencia en contra de la homocedasticidad. .

3.4.4 Prueba de Durbin-Watson (Autocorrelación de Residuos)

library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:boot':
## 
##     logit
durbinWatsonTest(modelo)
##  lag Autocorrelation D-W Statistic p-value
##    1       0.1165725      1.763079   0.012
##  Alternative hypothesis: rho != 0

La hipótesis nula (H0) en la prueba de Durbin-Watson es que no hay autocorrelación en los residuos (ρ = 0), es decir, los residuos son independientes entre sí. La hipótesis alternativa (H1) es que hay autocorrelación en los residuos (ρ ≠ 0).

En tu caso, el valor p (p-value) es 0.018, lo que significa que el valor p es menor que el nivel de significancia típico de 0.05. Por lo tanto, puedes rechazar la hipótesis nula (H0) y concluir que hay evidencia de autocorrelación en los residuos.

Esto sugiere que los residuos del modelo no son completamente independientes y que existe alguna forma de autocorrelación serial en los datos de residuos. La autocorrelación serial puede indicar que el modelo no captura completamente todas las relaciones en los datos o que quedan patrones por explorar.

En resumen, los resultados de la prueba de Durbin-Watson sugieren la presencia de autocorrelación en los residuos del modelo. Esto puede tener implicaciones en la interpretación de los resultados del modelo y podría requerir una revisión adicional del modelo o la inclusión de variables adicionales para capturar la autocorrelación.

3.4.5 Realizar analisis No multicolinealidad

# Calcular la matriz de correlación
matriz_correlacion <- cor(base_1[, c("areaconst", "estrato", "banios", "habitaciones", "parqueaderos")])

# Mostrar la matriz de correlación
print(matriz_correlacion)
##              areaconst    estrato    banios habitaciones parqueaderos
## areaconst    1.0000000 0.46909127 0.4960313   0.45004752           NA
## estrato      0.4690913 1.00000000 0.4199519   0.09920308           NA
## banios       0.4960313 0.41995187 1.0000000   0.59784069           NA
## habitaciones 0.4500475 0.09920308 0.5978407   1.00000000           NA
## parqueaderos        NA         NA        NA           NA            1

En resumen, la matriz de correlación proporciona información sobre las relaciones lineales entre las variables independientes. Las correlaciones moderadas o fuertes pueden indicar multicolinealidad, lo que debe tenerse en cuenta al interpretar los resultados del modelo de regresión.

# Calcular el VIF para cada variable independiente
library(car)
vif(modelo)
##    areaconst      estrato habitaciones parqueaderos       banios 
##     1.472886     1.311895     1.699501     1.235979     1.946822

Los resultados del Factor de Inflación de la Varianza (VIF)

El VIF es una medida que evalúa cuánto aumenta la varianza de los coeficientes de regresión debido a la multicolinealidad entre una variable independiente y las otras variables independientes en el modelo. Cuanto mayor sea el VIF para una variable, mayor será la multicolinealidad en esa variable.

En este caso, todos los VIF son relativamente bajos, todos están por debajo de 2.0. Esto sugiere que la multicolinealidad no es un problema grave en el modelo. En general, se considera que los valores de VIF menores a 5 o 10 indican que la multicolinealidad no es un problema significativo.

Dado que los VIF son bajos para todas las variables independientes en tu modelo, no hay evidencia sólida de multicolinealidad problemática en el conjunto de datos. Esto es una buena señal, ya que indica que las variables independientes están relativamente bien comportadas en términos de correlación entre sí.

En este caso, los VIF sugieren que la multicolinealidad no es un problema significativo, pero siempre es útil considerar el contexto del problema y los resultados del modelo en su totalidad

# Calcular la tolerancia para cada variable independiente
tolerance <- 1 / vif(modelo)
tolerance
##    areaconst      estrato habitaciones parqueaderos       banios 
##    0.6789394    0.7622559    0.5884081    0.8090753    0.5136576

TOLERANCIA-

La tolerancia es el inverso del Factor de Inflación de la Varianza (VIF) y se utiliza para evaluar la multicolinealidad en un modelo de regresión. Una tolerancia baja (cercana a 0) indica una alta multicolinealidad, mientras que una tolerancia alta (cercana a 1) indica una baja multicolinealidad.

En este caso, todos los valores de tolerancia son relativamente altos, todos están por encima de 0.5. Esto sugiere que la multicolinealidad no es un problema grave en el modelo. Los valores de tolerancia cercanos a 1 indican que las variables independientes no están altamente correlacionadas entre sí.

Al igual que con el VIF, la tolerancia es una medida que respalda la conclusión de que la multicolinealidad no es un problema significativo en el conjunto de datos. Los valores de tolerancia por encima de 0.5 generalmente se consideran aceptables en términos de multicolinealidad.

En resumen, los valores de tolerancia que has obtenido sugieren que las variables independientes en tu modelo no están altamente correlacionadas entre sí, lo que es una buena noticia para la interpretación y la estabilidad del modelo de regresión.

3.5 Predecir el precio de viviendaprimera solicitud.

Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.

Se realiza Prueba para identificar la aplicacion del modelo

# Crear un nuevo marco de datos con los valores de la nueva solicitud
solicitud_2 <- data.frame( 
  areaconst = c(250,250),    
  estrato = c(3,5),         
  habitaciones =c(3,3),    
  parqueaderos =c(1,1) ,    
  banios = c(2,2)

  )


predicciones <- predict(modelo, newdata = solicitud_2)
solicitud_2$prediccion_precio <- predicciones

# Mostrar el marco de datos con las características y las predicciones
print(solicitud_2)
##   areaconst estrato habitaciones parqueaderos banios prediccion_precio
## 1       250       3            3            1      2          256.7980
## 2       250       5            3            1      2          419.2073

La prediccion del modelo indica que el valor aproximado de la vivienda de la solicitud 2 se encuentra entre 256 y 419 millones de pesos.

3.6 Predecir el precio de vivienda con 350 Millones

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.

pos <- which(base_1$estrato>=4 & base_1$areaconst>= 200 & base_1$parqueaderos>=1 & base_1$banios>=2 & base_1$habitaciones>=4 & base_1$estrato>=4 & base_1$estrato<=5 & base_1$preciom<=350 )
Ofertas_casas <- base_1[pos,]
Ofertas_casas_5 = Ofertas_casas[order(Ofertas_casas$areaconst, decreasing = TRUE), ]
ofertac5 <- head(Ofertas_casas_5, 5)
knitr::kable(head(Ofertas_casas_5, 5), caption = "5 Ofertas que cumple las caracterisiticas, discriminada por area construida en m2.")
5 Ofertas que cumple las caracterisiticas, discriminada por area construida en m2.
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
3101 Zona Norte 02 5 340 355 2 5 8 Casa san vicente -76.52377 3.46384
5031 Zona Norte 03 4 350 350 1 4 5 Casa salomia -76.53464 3.44987
1943 Zona Norte NA 5 350 346 1 2 4 Casa vipasa -76.51847 3.47503
4209 Zona Norte 02 5 350 300 3 5 6 Casa el bosque -76.53010 3.48577
3352 Zona Norte NA 4 335 300 3 4 4 Casa el bosque -76.52600 3.43400
##install.packages("leaflet")
library(leaflet)

# Crear un mapa
mapa5 <- leaflet(data = ofertac5) %>%
  addTiles()  # Agregar capa base (puedes personalizarla)

# Agregar marcadores (puntos) al mapa
mapa5 <- mapa5 %>%
  addMarkers(
    lng = ~longitud,  # Columna con longitud
    lat = ~latitud,   # Columna con latitud
    label = ~id,      # Etiqueta para los marcadores (puedes personalizarla)
    popup = ~paste("Tipo: ", tipo, "<br>Barrio: ", barrio)  # Información adicional en el popup
  )

# Mostrar el mapa
mapa5

Estas ofertas potenciales cumplen con los criterios de búsqueda y tienen un precio igual o inferior a 350 millones de pesos. También puedes visualizar estas ofertas en un mapa para una mejor comprensión de su ubicación geográfica y otras características.

Acontinuacion se presentan los beneficios de cada oferta :

La “mejor” oferta depende de las prioridades y necesidades específicas de la empresa o del comprador. Si el presupuesto es una consideración principal y se desea mantener el precio por debajo de 350 millones de pesos, entonces la Oferta 5 podría ser atractiva. Por otro lado, si se busca una vivienda con un mayor número de habitaciones y baños, la Oferta 1 podría ser la preferida debido a sus 8 habitaciones y 5 baños.

Oferta 5 (ID 3352): Beneficio principal: Precio asequible.

Esta oferta tiene el precio más bajo, lo que la hace atractiva si el presupuesto es una preocupación principal. Además, tiene un área construida razonable, estrato 4 y suficientes habitaciones y baños para una familia.

Oferta 3 (ID 1943): Aunque tiene un precio de 350 millones, ofrece un área construida de 346 m² y se encuentra en el estrato 5. Aunque tiene menos habitaciones y baños, su estrato más alto podría ser un factor atractivo.

Oferta 2 (ID 5031):Esta oferta también tiene un precio de 350 millones y un área construida de 350 m². Tiene un estrato 4 y un número razonable de habitaciones y baños.

Oferta 4 (ID 4209):Aunque tiene un precio de 350 millones, ofrece un área construida de 300 m² y se encuentra en el estrato 5. Tiene un número razonable de habitaciones y baños, lo que la hace atractiva.

Oferta 1 (ID 3101): Aunque tiene la mayor área construida y el mayor número de habitaciones y baños, también tiene el precio más alto de 340 millones. Esto podría ser una opción si el espacio es una prioridad y el presupuesto lo permite.

Beneficios:

Oferta 5 (ID 3352): Beneficio principal: Precio asequible. Oferta 3 (ID 1943): Beneficio principal: Estrato 5. Oferta 2 (ID 5031): Beneficio principal: Área construida razonable. Oferta 4 (ID 4209): Beneficio principal: Estrato 5 y espacio adecuado. Oferta 1 (ID 3101): Beneficio principal: Espacio generoso.

En última instancia, la elección de la mejor oferta dependerá de los criterios y preferencias individuales, incluyendo el presupuesto, el espacio requerido y otras consideraciones específicas. Se recomienda evaluar detenidamente cada oferta en función de estos factores antes de tomar una decisión.


4 Predecir el precio de vivienda Realice los pasos del 1 al 6. Para la segunda solicitud que tiene un crédito pre-aprobado por valor de $850 millones.

base_2 <- vivienda %>%
  filter(zona == "Zona Sur" & tipo == "Apartamento")
knitr::kable(head(base_2, 3), caption = "Base_2 Sur")
Base_2 Sur
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
5098 Zona Sur 05 4 290 96 1 2 3 Apartamento acopi -76.53464 3.44987
698 Zona Sur 02 3 78 40 1 1 2 Apartamento aguablanca -76.50100 3.40000
8199 Zona Sur NA 6 875 194 2 5 3 Apartamento aguacatal -76.55700 3.45900
##install.packages("leaflet")
library(leaflet)


mapaT2 <- leaflet(data = base_2) %>%
  addTiles()  
mapaT2 <- mapaT2 %>%
  addMarkers(
    lng = ~longitud,  
    lat = ~latitud,   
    label = ~id,      
    popup = ~paste("Tipo: ", tipo, "<br>Barrio: ", barrio) 
  )

mapaT2
library(leaflet)#
library(leaflet.extras)

# Crear un mapa
mapa_calorT2 <- leaflet(data = base_2) %>%
  addTiles()  


mapa_calorT2 <- mapa_calorT2 %>%
  addHeatmap(
    lng = ~longitud,  
    lat = ~latitud,  
    radius = 15     
  )

mapa_calorT2
library(leaflet)


mapat2 <- leaflet(data = base_2) %>%
  addTiles()  


colores <- colorFactor(
  palette = c("blue", "green", "orange", "red"),  
  domain = base_1$preciom  
)


mapat2 <- mapat2 %>%
  addCircleMarkers(
    lng = ~longitud,  
    lat = ~latitud,   
    radius = 5,       
    color = ~colores(preciom),  
    fillOpacity = 0.6,  
    popup = ~paste("Tipo: ", tipo, "<br>Barrio: ", barrio, "<br>Precio: $", preciom)  
  )
## Warning in colores(preciom): Some values were outside the color scale and will
## be treated as NA

## Warning in colores(preciom): Some values were outside the color scale and will
## be treated as NA
mapat2 <- mapat2 %>%
  addLegend(
    position = "bottomright",
    colors = c("blue", "green", "orange", "red"),  # Colores disponibles
    labels = c("0-100", "101-200", "201-300", "301+"),
    title = "Precio (Millones de pesos)"
  )

# Mostrar el mapa
mapat2

RESULTADOS : Analisis grafico

Se presentan registros en zonas difetenes a la “Zona SUr” lo cual puede ser por Coordenadas geográficas incorrectas, o una mala clasificacion o cohordenadas mal descritas geograficamente.

4.2 Analisis Exploratorio

Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio del apartamento) 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.

library(plotly)


scatter_precio_areaT2 <- plot_ly(data = base_2, x = ~areaconst, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "2 Precio vs. Área Construida")


scatter_precio_estratoT2 <- plot_ly(data = base_2, x = ~estrato, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "2 Precio vs. Estrato")


scatter_precio_baniosT2 <- plot_ly(data = base_2, x = ~banios, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "2 Precio vs. Número de Baños")


scatter_precio_habitacionesT2 <- plot_ly(data = base_2, x = ~habitaciones, y = ~preciom, text = ~zona, mode = "markers", type = "scatter", marker = list(size = 10), name = "2 Precio vs. Numero de Habitaciones")


matriz_correlacionT2 <- cor(base_2[c("preciom", "areaconst", "estrato", "banios", "habitaciones")])


heatmap_correlacionT2 <- plot_ly(z = matriz_correlacionT2, x = colnames(matriz_correlacion), y = colnames(matriz_correlacion), type = "heatmap", name = "2 Matriz de Correlación")


subplot_graficosT2 <- subplot(
  scatter_precio_areaT2, scatter_precio_estratoT2, scatter_precio_baniosT2, scatter_precio_habitacionesT2,
  nrows = 2, margin = 0.05
)

# Mostrar los gráficos interactivos
subplot_graficosT2
heatmap_correlacionT2
#install.packages("GGally")

library(dplyr)
library(GGally)


variables_interes_2 <- base_2 %>%
  select(preciom, areaconst, estrato, banios, habitaciones, parqueaderos)

suppressWarnings({
 
  pair_plot_2 <- ggpairs(variables_interes_2)
})

# Mostrar el gráfico de pares
print(pair_plot_2)
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 404 rows containing missing values

## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 404 rows containing missing values

## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 404 rows containing missing values

## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 404 rows containing missing values

## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 404 rows containing missing values
## Warning: Removed 404 rows containing missing values (`geom_point()`).
## Removed 404 rows containing missing values (`geom_point()`).
## Removed 404 rows containing missing values (`geom_point()`).
## Removed 404 rows containing missing values (`geom_point()`).
## Removed 404 rows containing missing values (`geom_point()`).
## Warning: Removed 404 rows containing non-finite values (`stat_density()`).

RESULTADOS : Analisis grafico APARTAMENTOS

Interpretemos los resultados de los gráficos y la matriz de correlación en el análisis exploratorio de datos (EDA) que realizamos:

-Precio vs. Área Construida: El gráfico de dispersión muestra una tendencia positiva, lo que sugiere que a medida que aumenta el área construida, tiende a aumentar el precio de las vivienda a diferencia de 2 puntos : EL PRIMERO con areas de 605 con un valor de 170 Millones Y EL segundo con un area de 932 presenta un valor 299 millones lo cual se ve relacioando por el estrato o es un dato desviado. tiene una correlación de 0.757 con preciom. Esto indica una correlación positiva fuerte entre el precio y el área construida.

-Precio vs. Número de Baños: El gráfico de dispersión muestra una ligera tendencia positiva, lo que sugiere que a medida que aumenta el número de baños, tiende a aumentar el precio de las viviendas.Con una correlación positiva entre el precio y el número de baños, tiene una correlación de 0.726 con preciom. Esto indica una correlación positiva moderada entre el número de baños y el precio.

-Precio vs. Número de Habitaciones: El gráfico de dispersión muestra una dispersión de puntos en diferentes números de habitaciones, pero no se observa una tendencia clara. Tiene una correlación de 0.702 con preciom. Esto indica una correlación positiva, muy fuerte

-Precio vs. Estrato: El gráfico de dispersión muestra una dispersión de puntos en diferentes estratos, No se observa una tendencia clara Y SE PRESENTA UN PUNTO DESVIADO DE ESTRATO 5 con un precio de 1250 millones cuando el maximo de estrato 5 es de 830 millones . Esto indica que la relación entre el estrato y el precio puede ser más compleja y que otros factores pueden influir en el precio , tiene una correlación de 0.673 con preciom. Esto también indica una correlación positiva, aunque un poco más débil que en el caso del área construida.

-Precio vs. Número de Parqueaderos:tiene una correlación de 0.414 con precio. Esto indica una correlación positiva moderada entre el número de parqueaderos y el precio. A medida que el número de parqueaderos aumenta, el precio tiende a aumentar.

Matriz de Correlación:

La matriz de correlación muestra los coeficientes de correlación entre las variables numéricas. Observamos que: El precio tiene una correlación positiva moderada con el área construida , baños y habitaciones principalmente.

4.3 Modelo de Regresion lineal APARTAMENTOS

Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, numero de cuartos, numero de parqueaderos,numero 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)

modelo2 <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = base_2)

# Resumen del modelo
summary(modelo2)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = base_2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1095.63   -42.49    -1.25    40.97   922.58 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -255.85169   15.95956 -16.031  < 2e-16 ***
## areaconst       1.29109    0.05415  23.842  < 2e-16 ***
## estrato        60.27082    3.09689  19.462  < 2e-16 ***
## habitaciones  -26.58471    4.03631  -6.586 5.53e-11 ***
## parqueaderos   75.72992    4.19324  18.060  < 2e-16 ***
## banios         49.94971    3.46080  14.433  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 98.02 on 2369 degrees of freedom
##   (404 observations deleted due to missingness)
## Multiple R-squared:  0.7477, Adjusted R-squared:  0.7471 
## F-statistic:  1404 on 5 and 2369 DF,  p-value: < 2.2e-16

El modelo2 de regresión lineal múltiple que has ajustado parece ser estadísticamente significativo y tiene un coeficiente de determinación (R-cuadrado) bastante alto, lo que sugiere que es capaz de explicar una parte significativa de la variabilidad en el precio de los apartamentos.

4.4 Realice la validación de supuestos

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)

Coeficientes de Regresión:

El coeficiente para areaconst es positivo (1.29109), lo que sugiere que, manteniendo todas las demás variables constantes, un aumento en el área construida está asociado con un aumento en el precio de los apartamentos. El coeficiente para estrato es positivo (60.27082), lo que indica que un estrato más alto se asocia con un precio de vivienda más alto. El coeficiente para habitaciones es negativo (-26.58471), lo que sugiere que un mayor número de habitaciones está asociado con un precio de vivienda más bajo. El coeficiente para parqueaderos es positivo (75.72992), lo que indica que un mayor número de parqueaderos se asocia con un precio de vivienda más alto. El coeficiente para banios es positivo (49.94971), lo que sugiere que un mayor número de baños está asociado con un precio de vivienda más alto. Significancia Estadística:

Todos los coeficientes son estadísticamente significativos (p-value < 0.001), lo que indica que hay evidencia suficiente para afirmar que estas variables tienen un impacto en el precio de la vivienda.

R-cuadrado:

El R-cuadrado ajustado es 0.7471, lo que significa que el modelo es capaz de explicar aproximadamente el 74.71% de la variabilidad en el precio de la vivienda. Esto sugiere un buen ajuste del modelo. Residuos:

Los residuos tienen una distribución aproximadamente simétrica alrededor de cero, lo que sugiere que el modelo no tiene problemas de linealidad o heterocedasticidad evidente.

Sin embargo, sería útil realizar un análisis más detallado de los residuos para verificar la linealidad, la homocedasticidad y la normalidad. Observaciones Eliminadas:

En general, el modelo parece ser bastante sólido y capaz de predecir el precio de las viviendas en función de las variables seleccionadas. Sin embargo, siempre es importante recordar que un alto R-cuadrado no garantiza que el modelo sea útil para la predicción en situaciones futuras.

4.4.1 Linealidad

# Gráfico de residuos vs. valores ajustados
plot(modelo2, which = 1)

En este gráfico, se evalúa si los residuos tienen una distribución aleatoria en relación con los valores ajustados.

Si los puntos siguen un patrón no aleatorio (como una curva o una forma de embudo), esto podría indicar una violación de la suposición de linealidad. Podría ser necesario considerar transformaciones de variables.

Se puede observar que los residuos se distribuyen alrededor del cero, lo cual indica que la distribucion no es normal

4.4.2 Residuos vs. Variables Independientes (Linealidad):

# Gráfico de residuos vs. variables independientes
plot(modelo2, which = 2)

# Histograma de los residuos
hist(resid(modelo2), main = "Histograma de Residuos")

# Gráfico Q-Q de los residuos
qqnorm(resid(modelo2))
qqline(resid(modelo2))

shapiro.test(modelo2$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo2$residuals
## W = 0.79121, p-value < 2.2e-16

Prueba de Normalidad de Shapiro-Wilk:

El resultado del test de Shapiro-Wilk que realizaste en los residuos del modelo (modelo2$residuals) indica que los residuos no siguen una distribución normal. Esto se evidencia por el p-value extremadamente pequeño (p-value < 2.2e-16), que está por debajo del nivel de significancia típicamente

Hay evidencia para para rechazar la hipótesis nula de que los residuos siguen una distribución normal.

La falta de normalidad en los residuos puede tener implicaciones en la validez de algunas pruebas estadísticas y suposiciones de los modelos lineales, como los intervalos de confianza y los valores p. 

Es posible que se deba considerar la posibilidad de utilizar métodos de regresión robusta o transformaciones en los datos si la falta de normalidad en los residuos afecta significativamente la interpretación del modelo o la precisión de las predicciones.

4.4.3 Homocedasticidad)

# Gráfico de residuos vs. variables independientes
plot(modelo2, which = 3)

Los puntos estan distribuidos aleatoriamente alrededor de la línea horizontal podría indicar una violación de la suposición de homocedasticidad, lo que significa que la variabilidad de los errores no es constante

Prueba Breusch-Pagan (Homocedasticidad)

library(lmtest)
bptest(modelo2)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo2
## BP = 764.22, df = 5, p-value < 2.2e-16

La estadística de la prueba (BP) es un valor numérico que representa la magnitud del estadístico de Breusch-Pagan. Significado: Cuanto mayor sea el valor de BP, mayor será la evidencia en contra de la homocedasticidad. En este caso, el valor de 764.22 es muy alto, lo que sugiere fuertemente la presencia de heterocedasticidad en el modelo.

El Valor p: < 2.2e-1 (un valor pequeño pero no extremadamente pequeño): indica que es extremadamente improbable que hayamos observado estos resultados si asumimos que la varianza de los errores es constante (homocedasticidad). Un valor p tan pequeño refuerza aún más la evidencia en contra de la homocedasticidad.

4.4.4 Prueba de Durbin-Watson (Autocorrelación de Residuos)

library(car)
durbinWatsonTest(modelo2)
##  lag Autocorrelation D-W Statistic p-value
##    1       0.2291788      1.537891       0
##  Alternative hypothesis: rho != 0

Los resultados de la prueba Durbin-Watson indican la presencia de autocorrelación positiva en los residuos de tu modelo. Esto significa que las observaciones adyacentes en tu modelo de regresión están correlacionadas entre sí.

El estadístico D-W es una medida de la autocorrelación de primer orden. Toma valores entre 0 y 4. Cuanto más cerca esté del valor 2, menos autocorrelación de primer orden se asume. En este caso, el valor de D-W es menor que 2, lo que sugiere la presencia de autocorrelación positiva.

4.4.5 Realizar analisis No multicolinealidad

# Calcular la matriz de correlación
matriz_correlacion2 <- cor(base_2[, c("areaconst", "estrato", "banios", "habitaciones", "parqueaderos")])

# Mostrar la matriz de correlación
print(matriz_correlacion2)
##              areaconst   estrato    banios habitaciones parqueaderos
## areaconst    1.0000000 0.4819146 0.6691072    0.4532852           NA
## estrato      0.4819146 1.0000000 0.5685981    0.2137254           NA
## banios       0.6691072 0.5685981 1.0000000    0.5165090           NA
## habitaciones 0.4532852 0.2137254 0.5165090    1.0000000           NA
## parqueaderos        NA        NA        NA           NA            1

En resumen, la matriz de correlación proporciona información sobre las relaciones lineales entre las variables independientes. Las correlaciones moderadas o fuertes pueden indicar multicolinealidad.

# Calcular el VIF para cada variable independiente
library(car)
vif(modelo2)
##    areaconst      estrato habitaciones parqueaderos       banios 
##     2.064997     1.554021     1.444125     1.813306     2.605630

Aquí está la interpretación de los resultados:

areaconst: VIF = 2.065:Significa que el “areaconst” sugiere que esta variable no está fuertemente correlacionada con las otras variables independientes en el modelo. Un VIF cercano a 1 indica que no hay una alta multicolinealidad. estrato: VIF = 1.554

Significado: El VIF de 1.554 para “estrato” sugiere que esta variable no está fuertemente correlacionada con las otras variables independientes en el modelo.

habitaciones: El VIF de 1.444 para “habitaciones” indica que esta variable tampoco está fuertemente correlacionada con las otras variables independientes en el modelo.

parqueaderos: El VIF de 1.813 para “parqueaderos” sugiere que esta variable no está fuertemente correlacionada con las otras variables independientes en el modelo

banios: VIF = El VIF de 2.606 para “banios” indica que esta variable tiene una correlación moderada con las otras variables independientes en el modelo, pero no es lo suficientemente alta como para ser una preocupación seria de multicolinealidad.

En general, los VIF son relativamente bajos para todas las variables en tu modelo, lo que sugiere que no hay una multicolinealidad significativa entre las variables independientes.

# Calcular la tolerancia para cada variable independiente
tolerance <- 1 / vif(modelo2)
tolerance
##    areaconst      estrato habitaciones parqueaderos       banios 
##    0.4842621    0.6434919    0.6924608    0.5514790    0.3837843

TOLERANCIA-

En general, los valores de tolerancia son relativamente altos para todas las variables, lo que indica que no hay una multicolinealidad significativa en el modelo

4.5 Predecir el precio de vivienda pRIMERA SOLICITUD

Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.

Se realiza Prueba para identificar la aplicacion del modelo2 APARTAMENTOS

# Crear un nuevo marco de datos con los valores de la nueva solicitud
solicitud_t2 <- data.frame( 
  areaconst = c(250,250),    
  estrato = c(3,5),         
  habitaciones =c(3,3),    
  parqueaderos =c(1,1) ,    
  banios = c(2,2)

  )


predicciones2 <- predict(modelo2, newdata = solicitud_2)
solicitud_t2$prediccion_precio <- predicciones2

# Mostrar el marco de datos con las características y las predicciones
print(solicitud_t2)
##   areaconst estrato habitaciones parqueaderos banios prediccion_precio
## 1       250       3            3            1      2          343.6092
## 2       250       5            3            1      2          464.1509

La prediccion del modelo indica que el valor aproximado de la vivienda de la solicitud 2 se encuentra entre 343 y 469 millones de pesos.

4.6 Predecir el precio de vivienda CON 850 millones

Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de APARTAMENTOS. 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 15 ofertas potenciales que debe discutir.

pos <- which(base_2$estrato>=4 & base_1$areaconst>= 200 & base_1$parqueaderos>=1 & base_1$banios>=2 & base_1$habitaciones>=4 & base_1$estrato>=4 & 
               base_2$estrato<=5 & base_1$preciom<=850 )
## Warning in base_2$estrato >= 4 & base_1$areaconst >= 200: longitud de objeto
## mayor no es múltiplo de la longitud de uno menor
## Warning in base_2$estrato >= 4 & base_1$areaconst >= 200 & base_1$parqueaderos
## >= : longitud de objeto mayor no es múltiplo de la longitud de uno menor
## Warning in base_2$estrato >= 4 & base_1$areaconst >= 200 & base_1$parqueaderos
## >= : longitud de objeto mayor no es múltiplo de la longitud de uno menor
## Warning in base_2$estrato >= 4 & base_1$areaconst >= 200 & base_1$parqueaderos
## >= : longitud de objeto mayor no es múltiplo de la longitud de uno menor
## Warning in base_2$estrato >= 4 & base_1$areaconst >= 200 & base_1$parqueaderos
## >= : longitud de objeto mayor no es múltiplo de la longitud de uno menor
## Warning in base_2$estrato >= 4 & base_1$areaconst >= 200 & base_1$parqueaderos
## >= : longitud de objeto mayor no es múltiplo de la longitud de uno menor
Ofertas_casas2<- base_2[pos,]
Ofertas_casas_15_2 = Ofertas_casas2[order(Ofertas_casas2$areaconst, decreasing = TRUE), ]
ofertac15 <- head(Ofertas_casas_15_2, 15)
knitr::kable(head(Ofertas_casas_15_2, 15), caption = "5 Ofertas que cumple las caracterisiticas, discriminada por area construida en m2.")
5 Ofertas que cumple las caracterisiticas, discriminada por area construida en m2.
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
6121 Zona Sur 07 5 299 932.00 1 3 3 Apartamento valle del lili -76.54087 3.37348
4855 Zona Sur 02 4 390 300.00 NA 5 6 Apartamento colseguros -76.53339 3.43221
7512 Zona Sur NA 5 670 300.00 3 5 6 Apartamento seminario -76.55000 3.40900
8113 Zona Sur 02 5 410 295.55 2 4 4 Apartamento cuarto de legua -76.55527 3.40750
5306 Zona Sur 12 5 650 275.00 2 5 5 Apartamento ciudadela pasoancho -76.53569 3.38597
6175 Zona Sur 05 5 350 270.00 3 3 4 Apartamento capri -76.54100 3.39200
8036 Zona Sur NA 5 530 256.00 3 5 5 Apartamento seminario -76.55408 3.40748
6073 Zona Sur 10 5 1250 251.00 4 5 4 Apartamento multicentro -76.54038 3.37900
5528 Zona Sur 12 5 650 249.00 2 4 4 Apartamento ciudadela pasoancho -76.53700 3.38600
4815 Zona Sur 04 5 480 249.00 1 5 4 Apartamento el ingenio ii -76.53300 3.38300
8112 Zona Sur 02 5 420 220.00 2 5 5 Apartamento cuarto de legua -76.55527 3.40750
7578 Zona Sur 01 5 321 217.04 1 4 5 Apartamento cuarto de legua -76.55066 3.40862
5382 Zona Sur 01 5 420 200.00 2 4 3 Apartamento el limonar -76.53611 3.45774
6137 Zona Sur 04 5 450 195.00 1 2 4 Apartamento multicentro -76.54098 3.38259
4970 Zona Sur 04 4 420 193.00 2 4 3 Apartamento el ingenio -76.53403 3.38139
##install.packages("leaflet")
library(leaflet)


mapaTT2 <- leaflet(data = ofertac15) %>%
  addTiles()  


mapaTT2 <- mapaTT2 %>%
  addMarkers(
    lng = ~longitud,  #
    lat = ~latitud,   
    label = ~id,      
    popup = ~paste("Tipo: ", tipo, "<br>Barrio: ", barrio) 
  )


mapaT2

Estas ofertas potenciales cumplen con los criterios de búsqueda y tienen un precio igual o inferior a 830 millones de pesos.Pero los resistros son muy dispersos para ser tomar adecuadamente una eleccion

Aquí está una evaluación de las tres primeras ofertas:

Oferta 1 (ID: 6121) La primera oferta tiene un precio razonable, un buen número de habitaciones y baños, pero el área construida es considerablemente mayor que las otras dos ofertas.

Oferta 2 (ID: 4855): La segunda oferta tiene un precio más alto y ofrece un mayor número de habitaciones y baños. Sin embargo, la falta de información sobre los parqueaderos podría ser un factor a considerar.

Oferta 3 (ID: 7512): La tercera oferta tiene el precio más alto, pero también ofrece un área construida y comodidades excepcionales, como 3 parqueaderos y 5 baños. La ubicación en el barrio Seminario es otra ventaja. la tercera oferta podría ser la más atractiva debido a su alta calidad y comodidades. Sin embargo, la elección final dependerá de tus preferencias personales, presupuesto y necesidades específicas.