Análisis de Regresión


Unidades 5,6,7


Admin K

2026-02-06

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.