0. Lectura de Datos e instalación de paquetes
library(readr)
datos <- read_csv("dataset_pc2_cony.csv")
#View(datos)
PREGUNTA 1
División del conjunto de datos en entrenamiento y prueba
library(rsample)
set.seed(2026)
split_obj = initial_split(datos, prop = 0.80)
train = training(split_obj)
test = testing(split_obj)
train |> nrow()
## [1] 160
test |> nrow()
## [1] 40
dividir los datos para train y test
Creación del modelo inicial de regresión lineal
modelo = lm(y ~ x1 + x2 + x3 + x4 + x5 + x_bin + x_cat, data = train)
modelo |> summary()
##
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x_bin + x_cat, data = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -45.997 -4.263 -1.158 3.189 37.677
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 66.3870 1.3028 50.959 < 2e-16 ***
## x1 6.2413 0.5123 12.184 < 2e-16 ***
## x2 -0.5175 0.6465 -0.801 0.4247
## x3 -1.1203 0.8394 -1.335 0.1840
## x4 -1.0408 0.6646 -1.566 0.1195
## x5 -0.1787 0.7844 -0.228 0.8201
## x_bin 0.2308 1.5327 0.151 0.8805
## x_catB 3.8064 1.7118 2.224 0.0277 *
## x_catC 9.1538 2.0221 4.527 1.21e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.468 on 151 degrees of freedom
## Multiple R-squared: 0.5684, Adjusted R-squared: 0.5455
## F-statistic: 24.86 on 8 and 151 DF, p-value: < 2.2e-16
Notar los p valores altos, primer indicio de que algo anda mal
PREGUNTA 2
Detección de leverages
modelo |> model.matrix() -> X
X %*% solve(t(X) %*% X) %*% t(X) -> H
train |> nrow() -> n
modelo |> coef() |> length() -> k
as.vector(which(diag(H) > 2*k/n)) -> leverages
library(olsrr)
modelo |> plot(which=5)
Gráfico de residuales vs leverage, línea gris distancia de cook
leverages
## [1] 25 30 61 111 124 134 147
Vector con las observaciones que son Leverage en el modelo
Detección de valores atípicos
library(MASS)
as.vector(which((modelo |> studres() |> abs()) > 2)) -> outliers
Calcula los residuales estudentizados y rerifica aquellos cuyo valor absoluto es mauyor a 2. De ser así esa observación sería outlier
modelo |> ols_plot_resid_stud()
Gráfico de valores atípicos (valores fuera del margen rojo)
modelo |> ols_plot_resid_lev()
outliers
## [1] 30 34 60 61 67 94 125 129 158
Detección de DFFITS
Observaciones que de ser retiradas ocasionan un gran cambio en y estimado
modelo |> coef() |> length() -> k
train |> nrow() -> n
(abs(modelo |> dffits())) -> dffits
as.vector(which(dffits >= 2*sqrt(k/n))) -> inf_dffits
modelo |> ols_plot_dffits()
Las que salen de la línea roja son las de mayor DDFITS
inf_dffits
## [1] 30 34 60 61 67 94 124 125 129 158
vector de valores DFFITS
ALTO LEVERAGE, ATÍPICAS, DFFITS
lista <- list(leverages,
outliers,
inf_dffits)
inter <- Reduce(intersect, lista)
inter
## [1] 30 61
Remoción de los valores leverage, atípicos e influyentes
train2 <- train[-c(inter),]
Borramos el valor inter
Creación de un nuevo modelo
modelo2 = lm(y ~ x1 + x2 + x3 + x4 + x5, data = train2)
modelo2
##
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4 + x5, data = train2)
##
## Coefficients:
## (Intercept) x1 x2 x3 x4 x5
## 69.36559 7.35071 0.06710 -1.13041 -1.32390 -0.05455
Comparación de los reportes del modelo original y el nuevo
modelo |> summary()
##
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x_bin + x_cat, data = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -45.997 -4.263 -1.158 3.189 37.677
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 66.3870 1.3028 50.959 < 2e-16 ***
## x1 6.2413 0.5123 12.184 < 2e-16 ***
## x2 -0.5175 0.6465 -0.801 0.4247
## x3 -1.1203 0.8394 -1.335 0.1840
## x4 -1.0408 0.6646 -1.566 0.1195
## x5 -0.1787 0.7844 -0.228 0.8201
## x_bin 0.2308 1.5327 0.151 0.8805
## x_catB 3.8064 1.7118 2.224 0.0277 *
## x_catC 9.1538 2.0221 4.527 1.21e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.468 on 151 degrees of freedom
## Multiple R-squared: 0.5684, Adjusted R-squared: 0.5455
## F-statistic: 24.86 on 8 and 151 DF, p-value: < 2.2e-16
modelo2 |> summary()
##
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4 + x5, data = train2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -47.879 -4.547 -1.076 4.041 38.026
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 69.36559 0.75263 92.165 <2e-16 ***
## x1 7.35071 0.54842 13.403 <2e-16 ***
## x2 0.06710 0.63489 0.106 0.9160
## x3 -1.13041 0.81868 -1.381 0.1694
## x4 -1.32390 0.65973 -2.007 0.0466 *
## x5 -0.05455 0.77040 -0.071 0.9436
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.3 on 152 degrees of freedom
## Multiple R-squared: 0.5695, Adjusted R-squared: 0.5553
## F-statistic: 40.21 on 5 and 152 DF, p-value: < 2.2e-16
PREGUNTA 3
Mejor modelo según R2 predictivo
library(olsrr)
library(dplyr)
ols_step_all_possible(modelo2)$result |> data.frame() -> resultados
resultados |>
select(n,predrsq,predictors) |>
arrange(-predrsq) |>
head()
## n predrsq predictors
## 1 3 0.5445686 x1 x3 x4
## 2 2 0.5433652 x1 x4
## 3 2 0.5433387 x1 x3
## 4 1 0.5426774 x1
## 5 4 0.5400513 x1 x2 x3 x4
## 6 3 0.5394267 x1 x2 x3
Selección de variables según AIC
resultados |>
select(n,aic,predictors) |>
arrange(aic) |>
head()
## n aic predictors
## 1 2 1156.955 x1 x4
## 2 3 1156.957 x1 x3 x4
## 3 1 1158.859 x1
## 4 3 1158.909 x1 x2 x4
## 5 4 1158.944 x1 x2 x3 x4
## 6 4 1158.951 x1 x3 x4 x5
MODELO RESULTANTE X1, X4
PREGUNTA 4:
Selección del modelo según mejores subconjuntos
modelo2 |> ols_step_best_subset()
## Best Subsets Regression
## -----------------------------
## Model Index Predictors
## -----------------------------
## 1 x1
## 2 x1 x4
## 3 x1 x3 x4
## 4 x1 x2 x3 x4
## 5 x1 x2 x3 x4 x5
## -----------------------------
##
## Subsets Regression Summary
## --------------------------------------------------------------------------------------------------------------------------------------
## Adj. Pred
## Model R-Square R-Square R-Square C(p) AIC SBIC SBC MSEP FPE HSP APC
## --------------------------------------------------------------------------------------------------------------------------------------
## 1 0.5531 0.5502 0.5427 3.8026 1158.8586 710.4790 1168.0463 13822.1982 88.5895 0.5644 0.4584
## 2 0.5640 0.5583 0.5434 1.9520 1156.9554 708.7272 1169.2058 13572.4892 87.5291 0.5578 0.4529
## 3 0.5694 0.5611 0.5446 2.0166 1156.9565 708.8837 1172.2695 13489.4557 87.5303 0.5580 0.4529
## 4 0.5695 0.5582 0.5401 4.0050 1158.9444 710.9511 1177.3200 13577.1643 88.6395 0.5653 0.4587
## 5 0.5695 0.5553 0.5346 6.0000 1160.9392 713.0252 1182.3774 13666.6286 89.7670 0.5727 0.4645
## --------------------------------------------------------------------------------------------------------------------------------------
## AIC: Akaike Information Criteria
## SBIC: Sawa's Bayesian Information Criteria
## SBC: Schwarz Bayesian Criteria
## MSEP: Estimated error of prediction, assuming multivariate normality
## FPE: Final Prediction Error
## HSP: Hocking's Sp
## APC: Amemiya Prediction Criteria
Reporta los mejores modelos 1 variable, de 2 variables, de 3 variables, etc.
Vemos quién tiene mejores indicadores 1. R cuadrado predictivo + alto: todos similares 2. Cp de mallows + bajo: modelo 2 (x1,x4) 3. AIC + bajo: modelo 2 (x1, x4) 5. SBIC + bajo: modelo 2 (x1, x4) 6. SBC + bajo: modelo 1 (x1)
Selección del mejor modelo según stepwise selection
Este método agrega y quita variables, pero en este caso sólo aumenta, por lo que es lo mismo que el método forward
modelo2 |> ols_step_both_p()
##
##
## Stepwise Summary
## ---------------------------------------------------------------------------
## Step Variable AIC SBC SBIC R2 Adj. R2
## ---------------------------------------------------------------------------
## 0 Base Model 1284.101 1290.226 834.000 0.00000 0.00000
## 1 x1 (+) 1158.859 1168.046 710.479 0.55306 0.55019
## 2 x4 (+) 1156.955 1169.206 708.727 0.56396 0.55834
## ---------------------------------------------------------------------------
##
## Final Model Output
## ------------------
##
## Model Summary
## ----------------------------------------------------------------
## R 0.751 RMSE 9.180
## R-Squared 0.564 MSE 84.267
## Adj. R-Squared 0.558 Coef. Var 13.253
## Pred R-Squared 0.543 AIC 1156.955
## MAE 6.149 SBC 1169.206
## ----------------------------------------------------------------
## RMSE: Root Mean Square Error
## MSE: Mean Square Error
## MAE: Mean Absolute Error
## AIC: Akaike Information Criteria
## SBC: Schwarz Bayesian Criteria
##
## ANOVA
## -----------------------------------------------------------------------
## Sum of
## Squares DF Mean Square F Sig.
## -----------------------------------------------------------------------
## Regression 17220.510 2 8610.255 100.238 0.0000
## Residual 13314.216 155 85.898
## Total 30534.726 157
## -----------------------------------------------------------------------
##
## Parameter Estimates
## ----------------------------------------------------------------------------------------
## model Beta Std. Error Std. Beta t Sig lower upper
## ----------------------------------------------------------------------------------------
## (Intercept) 69.460 0.740 93.857 0.000 67.998 70.921
## x1 7.366 0.525 0.744 14.023 0.000 6.328 8.403
## x4 -1.271 0.646 -0.104 -1.969 0.051 -2.547 0.004
## ----------------------------------------------------------------------------------------
modelo2 |> ols_step_both_aic()
##
##
## Stepwise Summary
## ---------------------------------------------------------------------------
## Step Variable AIC SBC SBIC R2 Adj. R2
## ---------------------------------------------------------------------------
## 0 Base Model 1284.101 1290.226 834.000 0.00000 0.00000
## 1 x1 (+) 1158.859 1168.046 710.479 0.55306 0.55019
## 2 x4 (+) 1156.955 1169.206 708.727 0.56396 0.55834
## ---------------------------------------------------------------------------
##
## Final Model Output
## ------------------
##
## Model Summary
## ----------------------------------------------------------------
## R 0.751 RMSE 9.180
## R-Squared 0.564 MSE 84.267
## Adj. R-Squared 0.558 Coef. Var 13.253
## Pred R-Squared 0.543 AIC 1156.955
## MAE 6.149 SBC 1169.206
## ----------------------------------------------------------------
## RMSE: Root Mean Square Error
## MSE: Mean Square Error
## MAE: Mean Absolute Error
## AIC: Akaike Information Criteria
## SBC: Schwarz Bayesian Criteria
##
## ANOVA
## -----------------------------------------------------------------------
## Sum of
## Squares DF Mean Square F Sig.
## -----------------------------------------------------------------------
## Regression 17220.510 2 8610.255 100.238 0.0000
## Residual 13314.216 155 85.898
## Total 30534.726 157
## -----------------------------------------------------------------------
##
## Parameter Estimates
## ----------------------------------------------------------------------------------------
## model Beta Std. Error Std. Beta t Sig lower upper
## ----------------------------------------------------------------------------------------
## (Intercept) 69.460 0.740 93.857 0.000 67.998 70.921
## x1 7.366 0.525 0.744 14.023 0.000 6.328 8.403
## x4 -1.271 0.646 -0.104 -1.969 0.051 -2.547 0.004
## ----------------------------------------------------------------------------------------
Nos va indicando que nuestro modelo resultante es X1 Y x4
PREGUNTA 5:
Modelo resultante f(X1, X4)
Construcción de nuevo modelo
modelo3 = lm(y ~ x1 + x4, data = train2)
modelo3 |> coef()
## (Intercept) x1 x4
## 69.459532 7.365619 -1.271411
Escribimos la ecuación del modelo resultante:
\[ \widehat{Y} = 69.46 + 7.3656x_{1} - 1.2714x_{4}\]
y = precio de venta (miles USD)
x1 = tamaño del inmueble (en m²)
x2 = antigüedad (en años)
x3 = densidad de servicios
x4 = índice de ruido
x5 = accesibilidad vial
x6 = zona (urbano, suburbano, rural)
x7 = tiene cochera (1 = sí, 0 = no)
Interpretamos Coeficientes Estimados
𝛽0 = 69.46 no tiene interpretación porque el área no puede ser de 0 𝑚2
𝛽1 = 7.3656: por cada metro cuadrado adicional que tenga el inmueble, el precio promedio de venta aumenta en 7.3656 miles de dólares, manteniendo constante las demás variables.
𝛽4 = -1.2714: por cada índice ruido que aumenta se asocia con una disminución promedio de -1.2714 miles de dólares, manteniendo constantes las demás variables.