# Cargamos las librerías necesarias
library(readxl)
library(GGally)
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(dplyr)
## 
## 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
# Cargar el archivo especificando el rango de celdas y los tipos de columna
BienesyCasas1 <- read_excel("BienesyCasas1.xlsx", 
                            range = "A1:F100",
                            col_types = c("numeric", "numeric", "numeric", "numeric", "text", "text"))

# Visualización de correlaciones
ggpairs(BienesyCasas1[, 1:4])

# Modelo de regresión inicial
modelo_inicial <- lm(y ~ ., data = BienesyCasas1)
summary(modelo_inicial)
## 
## Call:
## lm(formula = y ~ ., data = BienesyCasas1)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -14660  -4197   1308   4161  16174 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.134e+05  5.470e+03  39.018  < 2e-16 ***
## x1          3.482e+01  3.631e+00   9.590  1.5e-15 ***
## x2          1.531e+02  1.958e+03   0.078  0.93784    
## x3          8.616e+02  3.208e+02   2.685  0.00858 ** 
## x41         1.650e+04  1.581e+03  10.440  < 2e-16 ***
## x51         1.751e+03  1.704e+03   1.028  0.30678    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6572 on 93 degrees of freedom
## Multiple R-squared:  0.7697, Adjusted R-squared:  0.7573 
## F-statistic: 62.16 on 5 and 93 DF,  p-value: < 2.2e-16
# Análisis de residuales del modelo inicial
residuales_iniciales <- modelo_inicial$residuals
summary(residuales_iniciales)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -14660   -4197    1308       0    4161   16174
# Ajuste de un modelo modificado excluyendo variables poco significativas
modelo_modificado <- lm(y ~ x1 + x3 + x4, data = BienesyCasas1)
summary(modelo_modificado)
## 
## Call:
## lm(formula = y ~ x1 + x3 + x4, data = BienesyCasas1)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -13490  -4597   1323   3699  17295 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.133e+05  5.275e+03  40.429  < 2e-16 ***
## x1          3.522e+01  2.541e+00  13.863  < 2e-16 ***
## x3          9.234e+02  3.133e+02   2.948  0.00403 ** 
## x41         1.596e+04  1.472e+03  10.841  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6540 on 95 degrees of freedom
## Multiple R-squared:  0.7671, Adjusted R-squared:  0.7597 
## F-statistic: 104.3 on 3 and 95 DF,  p-value: < 2.2e-16
# Evaluación de residuos del modelo modificado
residuales_modificado <- modelo_modificado$residuals
summary(residuales_modificado)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -13490   -4597    1323       0    3699   17295
# Pruebas para supuestos del modelo
shapiro.test(residuales_modificado)  # Prueba de normalidad
## 
##  Shapiro-Wilk normality test
## 
## data:  residuales_modificado
## W = 0.96594, p-value = 0.0115
gqtest(modelo_modificado)           # Prueba de homocedasticidad
## 
##  Goldfeld-Quandt test
## 
## data:  modelo_modificado
## GQ = 1.079, df1 = 46, df2 = 45, p-value = 0.3998
## alternative hypothesis: variance increases from segment 1 to 2
dwtest(modelo_modificado)           # Prueba de autocorrelación
## 
##  Durbin-Watson test
## 
## data:  modelo_modificado
## DW = 1.946, p-value = 0.2167
## alternative hypothesis: true autocorrelation is greater than 0
# Visualización de diagnóstico para el modelo modificado
par(mfrow = c(2, 2))
plot(modelo_modificado)

# Predicción y evaluación de precios de casas específicas
casas_nuevas <- data.frame(x1 = c(2190, 1848), 
                           x3 = c(4, 9), 
                           x4 = as.factor(c("1", "0")))

# Ajusta la predicción multiplicando por 1000 para convertir a pesos si necesario
resultados_prediccion <- predict(modelo_modificado, newdata = casas_nuevas, interval = "confidence") * 1000

# Mostrar los resultados de predicción
print(resultados_prediccion)
##         fit       lwr       upr
## 1 310053682 306680559 313426805
## 2 286660747 284713359 288608135
# Resultados de predicción para las casas específicas

Explicación: