# Cargar librerías necesarias
#install.packages("tidyverse")
#install.packages("sandwich")
library(readxl)
library(tidyverse)
library(ggplot2)
library(corrplot)
library(lmtest)
library(sandwich)

# Leer los datos (Asumiendo que el archivo está en el directorio de trabajo)
data <- read_excel("Vivienda.xlsx")

# Resumen estadístico de los datos
summary(data)
##      Precio           Tamaño       Número de habitaciones Número de Baños
##  Min.   : 52113   Min.   : 52.93   Min.   :1.00           Min.   :1.000  
##  1st Qu.:178006   1st Qu.:106.01   1st Qu.:2.00           1st Qu.:1.000  
##  Median :305295   Median :173.48   Median :3.00           Median :2.000  
##  Mean   :279626   Mean   :174.18   Mean   :3.14           Mean   :2.053  
##  3rd Qu.:370244   3rd Qu.:238.99   3rd Qu.:4.00           3rd Qu.:3.000  
##  Max.   :499481   Max.   :297.58   Max.   :5.00           Max.   :3.000  
##      Zona           Número Niveles  Tipo de Vivienda   Costo de Materiales
##  Length:150         Min.   :1.000   Length:150         Min.   :20044      
##  Class :character   1st Qu.:1.000   Class :character   1st Qu.:43112      
##  Mode  :character   Median :2.000   Mode  :character   Median :58101      
##                     Mean   :2.067                      Mean   :60937      
##                     3rd Qu.:3.000                      3rd Qu.:82314      
##                     Max.   :3.000                      Max.   :99351      
##  Costo de Mano de Obra
##  Min.   :10403        
##  1st Qu.:19215        
##  Median :29327        
##  Mean   :29486        
##  3rd Qu.:39454        
##  Max.   :49992
# Visualización de la distribución de precios por zona y tipo de vivienda
ggplot(data, aes(x = Zona, y = Precio, fill = `Tipo de Vivienda`)) +
  geom_boxplot() +
  labs(title = "Distribución de Precios por Zona y Tipo de Vivienda", x = "Zona", y = "Precio") +
  theme_minimal()

# Relación entre tamaño y precio
ggplot(data, aes(x = Tamaño, y = Precio)) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = "lm", se = TRUE, color = "blue") +
  labs(title = "Relación entre Tamaño y Precio de las Propiedades", x = "Tamaño (m²)", y = "Precio") +
  theme_light()

# Asegurarse de que los nombres de columna son correctos
data_selected <- data %>% 
  select(Precio, Tamaño, `Número de habitaciones`, `Número de Baños`, `Número Niveles`, `Costo de Materiales`, `Costo de Mano de Obra`)

# Correlación entre las variables seleccionadas
correlation_matrix <- cor(data_selected)

# Generar la matriz de correlación visual con etiquetas de valores
corrplot(correlation_matrix, method = "number", type = "upper", order = "hclust", 
         tl.col = "black", tl.srt = 45, addCoef.col = "blue")

# Modelo de regresión lineal para predecir el precio
modelo <- lm(Precio ~ Tamaño + `Número de habitaciones` + `Número de Baños` + Zona + `Número Niveles` + `Tipo de Vivienda` + `Costo de Materiales` + `Costo de Mano de Obra`, data = data)
summary(modelo)
## 
## Call:
## lm(formula = Precio ~ Tamaño + `Número de habitaciones` + `Número de Baños` + 
##     Zona + `Número Niveles` + `Tipo de Vivienda` + `Costo de Materiales` + 
##     `Costo de Mano de Obra`, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -236989 -103117    6510   98314  229552 
## 
## Coefficients:
##                                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                   2.978e+05  6.636e+04   4.489 1.49e-05 ***
## Tamaño                       -6.714e+01  1.399e+02  -0.480   0.6320    
## `Número de habitaciones`     -1.510e+03  7.799e+03  -0.194   0.8467    
## `Número de Baños`             7.500e+03  1.302e+04   0.576   0.5656    
## ZonaUrbana                   -4.640e+04  2.094e+04  -2.216   0.0283 *  
## `Número Niveles`              2.419e+04  1.374e+04   1.760   0.0806 .  
## `Tipo de Vivienda`Media Alta -3.325e+04  3.006e+04  -1.106   0.2705    
## `Tipo de Vivienda`Media Baja -4.214e+04  2.841e+04  -1.483   0.1403    
## `Tipo de Vivienda`Popular    -3.885e+04  2.886e+04  -1.346   0.1805    
## `Costo de Materiales`        -2.932e-01  4.622e-01  -0.634   0.5269    
## `Costo de Mano de Obra`      -3.700e-02  9.107e-01  -0.041   0.9676    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 125400 on 139 degrees of freedom
## Multiple R-squared:  0.07994,    Adjusted R-squared:  0.01375 
## F-statistic: 1.208 on 10 and 139 DF,  p-value: 0.2912

Análisis e iterpretación de los resultados de modelo de regresión lineal múltiple

Resumen de Residuos

Min y Max: Los residuos mínimos y máximos (los errores de predicción) son -236,989 y 229,552 respectivamente, indicando la magnitud de los errores de predicción más extremos.

1Q y 3Q (Cuartiles): El primer cuartil de los residuos está en -103,117 y el tercer cuartil en 98,314, lo que sugiere una distribución asimétrica de los errores donde los errores negativos tienden a ser más extremos que los positivos.

Median: La mediana de los residuos es de 6,510, lo cual está muy cerca de cero, indicando que el modelo, en términos generales, no está sesgado hacia predicciones sistemáticamente altas o bajas.

Coeficientes del Modelo

(Intercepto) 2.978e+05: El precio base de las propiedades cuando todas las otras variables son cero es aproximadamente 297,800.

Variables significativas: ZonaUrbana -4.640e+04: Las propiedades en zonas urbanas tienden a tener un precio aproximadamente 46,400 más bajo que en zonas rurales, con una significancia estadística (p-value = 0.0283).

Variables no significativas: Las demás variables incluidas no tienen un efecto estadísticamente significativo sobre el precio, dado que sus valores p son mayores que 0.05. Esto incluye tamaño, número de habitaciones, número de baños, número de niveles, tipo de vivienda, y los costos de materiales y de mano de obra.

Estadísticas del Modelo

Error estándar residual (RSE): 125,400, lo que indica el promedio de los tamaños de los errores de predicción del modelo.

R-squared (R²): 0.07994, lo que sugiere que solo aproximadamente el 7.99% de la variabilidad en el precio de las propiedades es explicada por el modelo. Esto es bastante bajo, lo que indica que el modelo no explica bien la variabilidad en el precio de las propiedades.

Adjusted R-squared: 0.01375, ajustado por el número de predictores en el modelo, es incluso más bajo, lo que sugiere un modelo poco efectivo con los predictores actuales.

F-statistic: El valor F de 1.208 y su p-value de 0.2912 indican que el modelo, en conjunto, no es estadísticamente significativo. Esto significa que las variables utilizadas no proporcionan un buen ajuste conjunto para explicar el precio de las propiedades.

En Conclusión

El modelo actual no parece ser muy efectivo para predecir el precio de las propiedades basándose en las variables incluidas. La baja R², el p-value alto del F-statistic, y los p-values altos de la mayoría de las variables predictoras sugieren que podrían ser necesarias otras variables y/o revisar la modelación para mejorar la explicación del precio de las propiedades. Podría ser útil incluir otras características de las propiedades, considerar interacciones entre variables, o revisar si hay no linealidades en las relaciones que no han sido capturadas por el modelo lineal actual.

# Verificar supuestos del modelo: Homocedasticidad y autocorrelación
bptest(modelo) # Prueba de Breusch-Pagan para homocedasticidad
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo
## BP = 12.849, df = 10, p-value = 0.2322
dwtest(modelo) # Durbin-Watson para autocorrelación
## 
##  Durbin-Watson test
## 
## data:  modelo
## DW = 2.1418, p-value = 0.8203
## alternative hypothesis: true autocorrelation is greater than 0

La salida de “bptest(modelo)” proporciona los resultados de la prueba de Breusch-Pagan para evaluar la homocedasticidad de los residuos en un modelo de regresión. La homocedasticidad es una suposición importante en los modelos de regresión lineal que establece que la varianza de los errores del modelo es constante en todos los niveles de las variables predictoras.

Descripción de la Prueba de Breusch-Pagan

El test de Breusch-Pagan evalúa la hipótesis nula de que los errores en el modelo de regresión son homocedásticos, es decir, que tienen varianzas constantes.

Resultados de la Prueba

BP = 12.849: Este es el estadístico de la prueba de Breusch-Pagan, que sigue una distribución chi-cuadrado. Cuanto mayor sea el valor, más fuerte es la evidencia contra la homocedasticidad.

df = 10: Grados de libertad de la prueba, que en este caso corresponde al número de variables predictoras incluidas en el modelo. p-value = 0.2322: El valor p de la prueba.

Interpretación

Valor P mayor que 0.05: El valor p de la prueba es 0.2322, lo que es mayor que el umbral común de 0.05 para significancia estadística. Esto significa que no hay suficiente evidencia estadística para rechazar la hipótesis nula de homocedasticidad. En otras palabras, no se puede afirmar que exista heterocedasticidad significativa en los residuos del modelo basado en esta prueba.

Implicaciones

Aceptación de la Hipótesis Nula: Al aceptar la hipótesis nula, estamos concluyendo que, basado en esta prueba, los residuos del modelo parecen ser homocedásticos. Esto es una buena noticia para la validez de los tests estadísticos realizados en el modelo, como los tests de significancia de los coeficientes, ya que estos asumen homocedasticidad de los errores.

Modelo Apropiado para Inferencias: El cumplimiento de esta suposición permite afirmar con mayor confianza que las inferencias estadísticas realizadas a partir del modelo (como intervalos de confianza y pruebas de significancia) son válidas.

Consideraciones Adicionales

A pesar del resultado favorable de la prueba de Breusch-Pagan, siempre es recomendable realizar un análisis visual de los residuos (como gráficos de residuos vs valores ajustados) para verificar de manera adicional la homocedasticidad y otras suposiciones importantes de los modelos de regresión. Además, podría ser útil realizar otras pruebas para suposiciones clave, como la normalidad de los residuos, para tener una comprensión más completa de la adecuación del modelo.

La salida de “dwtest(modelo)” corresponde a los resultados del test de Durbin-Watson, que es una prueba estadística utilizada para detectar la presencia de autocorrelación (una relación entre valores separados de uno o más periodos de tiempo) en los residuos de un análisis de regresión. La autocorrelación puede ser un problema importante, especialmente en los datos temporales, ya que puede invalidar algunas de las suposiciones estadísticas sobre los cuales se basan los modelos de regresión lineal.

Descripción de Test de Durbin-Watson

El test de Durbin-Watson evalúa la hipótesis nula de que no hay autocorrelación de primer orden en los residuos del modelo. El estadístico DW varía entre 0 y 4, donde:

Un valor de DW cercano a 2 sugiere que no hay autocorrelación.

Un valor de DW significativamente menor que 2 indica autocorrelación positiva.

Un valor de DW significativamente mayor que 2 sugiere autocorrelación negativa.

Resultados del Test

DW = 2.1418: Este es el estadístico Durbin-Watson para tu odelo, que está muy cerca de 2, indicando una ausencia de autocorrelación significativa de los residuos.

p-value = 0.8203: El valor p asociado con el test es muy alto, lo que significa que no hay suficiente evidencia estadística para rechazar la hipótesis nula de no autocorrelación.

Interpretación

No Rechazo de la Hipótesis Nula: El valor p elevado y el estadístico DW cercano a 2 sugieren que no hay evidencia de autocorrelación en los residuos del modelo. Esto es positivo para el modelo de regresión, ya que la presencia de autocorrelación puede complicar el análisis y la interpretación de los resultados.

Validez de las Inferencias Estadísticas: La ausencia de autocorrelación implica que las inferencias basadas en el modelo (como pruebas de significancia de los coeficientes) son más fiables.

Implicaciones para el Modelo

Confianza en el Modelo: La falta de autocorrelación apoya la validez del modelo para los datos analizados, particularmente si los datos no son de series temporales donde la autocorrelación es más comúnmente una preocupación.

Análisis más Amplio: Aunque el test de Durbin-Watson sugiere que los residuos del modelo no tienen autocorrelación, es recomendable continuar evaluando otras suposiciones del modelo, como la normalidad de los residuos y la multicolinealidad entre las variables predictoras, para asegurar que el modelo es robusto.

En resumen, el resultado del test de Durbin-Watson es favorable y sugiere que el modelo que has ajustado es adecuado en términos de la suposición de no autocorrelación de los residuos. Esto fortalece la confianza en las estimaciones y pruebas estadísticas derivadas del modelo.

# Gráfico de residuales para verificar normalidad
ggplot(modelo, aes(.fitted, .resid)) +
  geom_point() +
  geom_smooth(se = FALSE, color = "red") +
  labs(title = "Gráfico de Residuales", x = "Valores Ajustados", y = "Residuales")