ultima_version_taller_3

Author

Juan Manuel Arias

Librerías

Loading required package: zoo

Attaching package: 'zoo'
The following objects are masked from 'package:base':

    as.Date, as.Date.numeric

Attaching package: 'dplyr'
The following object is masked from 'package:MASS':

    select
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
Loading required package: carData

Attaching package: 'car'
The following object is masked from 'package:dplyr':

    recode

Attaching package: 'olsrr'
The following object is masked from 'package:MASS':

    cement
The following object is masked from 'package:datasets':

    rivers

Attaching package: 'lmridge'
The following object is masked from 'package:car':

    vif
Loading required package: Matrix
Loaded glmnet 4.1-7
Loading required package: lattice
Classes and Methods for R developed in the
Political Science Computational Laboratory
Department of Political Science
Stanford University
Simon Jackman
hurdle and zeroinfl functions by Achim Zeileis

Attaching package: 'MLmetrics'
The following objects are masked from 'package:caret':

    MAE, RMSE
The following object is masked from 'package:base':

    Recall

Punto 1

  1. La base de datos baseball.csv contiene informacio ́n del salario y medidas del rendimiento de 128 jugadores de b ́eisbol de las Grandes Ligas de los EEUU en las temporadas de 1991 y 1992. Las variables observadas fueron:

salary: salario (en miles de d ́olares) - variable respuesta -. batting: Promedio de bateo. OBP: Porcentaje en base - la frecuencia con la que un bateador llega a la base. runs: Nu ́mero de carreras. hits: Nu ́meros de aciertos al bate. doubles: Nu ́mero de dobles. tripes: Nu ́mero de triples. homeruns: Nu ́mero de jonrones. RBI: Nu ́mero de carreras impulsadas. walks: Nu ́mero de base por bolas. strikeouts: Nu ́mero de ponches (strike-outs). stolenbases: Nu ́mero de bases robadas. errors: Nu ́mero de errores. names: Nombre del jugador. 2. Se quiere un modelo que prediga el sueldo del jugador con base a su rendimiento. Divida la muestra en dos partes de forma aleatoria: una para estimar el modelo - entrenamiento - (100 observaciones) y otra para hacer una evaluacio ́n del modelo ajustado - validaci ́on - (28 observaciones). Con la sub-muestra de entrenamiento: (10pt) Ajuste un modelo de regresi ́on considerando la variable salary como respuesta y todas las dem ́as como covariables (excepto names, obviamente). Si es necesario, utilice transformaciones. Comente los resultados m ́as relevantes. (10pt) Realice un proceso de selecci ́on de variables comparando todos los mod- elos posibles. Proponga al menos tres modelos diferentes. Compare estos modelos con el modelo completo. Comente los resultados m ́as relevantes. *K(10pt) A partir de los modelos propuestos (y el modelo completo) haga predic- ciones para los jugadores de la sub-muestra de validacio ́n. Compare los mod- elos usando el error cuadrado medio de prediccio ́n

Datos a utilizar:

# Importar el archivo CSV
datos_baseball <- read.csv("baseball.csv")
datos_baseball<-datos_baseball[,-14]
attach(datos_baseball)

División de los datos en entrenamiento y validación

set.seed(1)

# Seleccionar datos aleatorios para el conjunto de entrenamiento
datos_aleatorios <- sample(1:nrow(datos_baseball), 100, replace = FALSE)
datos_entrenamiento <- datos_baseball[datos_aleatorios, ]
# Seleccionar datos restantes para el conjunto de validación
datos_validacion <- datos_baseball[-datos_aleatorios, ]
# Mostrar la cantidad de filas en los conjuntos de entrenamiento y validación
nrow(datos_entrenamiento)
[1] 100
nrow(datos_validacion)
[1] 32
attach(datos_entrenamiento)
The following objects are masked from datos_baseball:

    batting, dooubles, errors, hits, homeruns, OBP, RBI, runs, salary,
    stolenbases, strikeouts, tripes, walks
# crear un data frame 
mitad1_datos_entrenamiento=data.frame(datos_entrenamiento$salary,datos_entrenamiento$batting,datos_entrenamiento$OBP,datos_entrenamiento$runs,datos_entrenamiento$hits,datos_entrenamiento$dooubles,datos_entrenamiento$tripes)
#
pairs(mitad1_datos_entrenamiento)

# Calcular la matriz de correlación
cor(mitad1_datos_entrenamiento)
                             datos_entrenamiento.salary
datos_entrenamiento.salary                    1.0000000
datos_entrenamiento.batting                   0.4136783
datos_entrenamiento.OBP                       0.3777788
datos_entrenamiento.runs                      0.6859982
datos_entrenamiento.hits                      0.6452561
datos_entrenamiento.dooubles                  0.5872832
datos_entrenamiento.tripes                    0.1580018
                             datos_entrenamiento.batting
datos_entrenamiento.salary                     0.4136783
datos_entrenamiento.batting                    1.0000000
datos_entrenamiento.OBP                        0.7319815
datos_entrenamiento.runs                       0.5782514
datos_entrenamiento.hits                       0.7214408
datos_entrenamiento.dooubles                   0.5512843
datos_entrenamiento.tripes                     0.3059972
                             datos_entrenamiento.OBP datos_entrenamiento.runs
datos_entrenamiento.salary                 0.3777788                0.6859982
datos_entrenamiento.batting                0.7319815                0.5782514
datos_entrenamiento.OBP                    1.0000000                0.6035893
datos_entrenamiento.runs                   0.6035893                1.0000000
datos_entrenamiento.hits                   0.4849843                0.8736676
datos_entrenamiento.dooubles               0.3446466                0.7415263
datos_entrenamiento.tripes                 0.1932866                0.3815204
                             datos_entrenamiento.hits
datos_entrenamiento.salary                  0.6452561
datos_entrenamiento.batting                 0.7214408
datos_entrenamiento.OBP                     0.4849843
datos_entrenamiento.runs                    0.8736676
datos_entrenamiento.hits                    1.0000000
datos_entrenamiento.dooubles                0.8321962
datos_entrenamiento.tripes                  0.3432410
                             datos_entrenamiento.dooubles
datos_entrenamiento.salary                      0.5872832
datos_entrenamiento.batting                     0.5512843
datos_entrenamiento.OBP                         0.3446466
datos_entrenamiento.runs                        0.7415263
datos_entrenamiento.hits                        0.8321962
datos_entrenamiento.dooubles                    1.0000000
datos_entrenamiento.tripes                      0.2106851
                             datos_entrenamiento.tripes
datos_entrenamiento.salary                    0.1580018
datos_entrenamiento.batting                   0.3059972
datos_entrenamiento.OBP                       0.1932866
datos_entrenamiento.runs                      0.3815204
datos_entrenamiento.hits                      0.3432410
datos_entrenamiento.dooubles                  0.2106851
datos_entrenamiento.tripes                    1.0000000
mitad2_datos_entrenamiento=data.frame(datos_entrenamiento$salary,datos_entrenamiento$homeruns,datos_entrenamiento$RBI,datos_entrenamiento$walks,datos_entrenamiento$strikeouts,datos_entrenamiento$stolenbases,datos_entrenamiento$errors)
pairs(mitad2_datos_entrenamiento)

cor(mitad2_datos_entrenamiento)
                                datos_entrenamiento.salary
datos_entrenamiento.salary                      1.00000000
datos_entrenamiento.homeruns                    0.63641959
datos_entrenamiento.RBI                         0.69939929
datos_entrenamiento.walks                       0.50409163
datos_entrenamiento.strikeouts                  0.46974803
datos_entrenamiento.stolenbases                 0.20353346
datos_entrenamiento.errors                      0.09347357
                                datos_entrenamiento.homeruns
datos_entrenamiento.salary                       0.636419592
datos_entrenamiento.homeruns                     1.000000000
datos_entrenamiento.RBI                          0.897600640
datos_entrenamiento.walks                        0.468804143
datos_entrenamiento.strikeouts                   0.721407109
datos_entrenamiento.stolenbases                  0.002121256
datos_entrenamiento.errors                       0.175628075
                                datos_entrenamiento.RBI
datos_entrenamiento.salary                   0.69939929
datos_entrenamiento.homeruns                 0.89760064
datos_entrenamiento.RBI                      1.00000000
datos_entrenamiento.walks                    0.52346739
datos_entrenamiento.strikeouts               0.62926060
datos_entrenamiento.stolenbases             -0.00518212
datos_entrenamiento.errors                   0.23053522
                                datos_entrenamiento.walks
datos_entrenamiento.salary                      0.5040916
datos_entrenamiento.homeruns                    0.4688041
datos_entrenamiento.RBI                         0.5234674
datos_entrenamiento.walks                       1.0000000
datos_entrenamiento.strikeouts                  0.5337602
datos_entrenamiento.stolenbases                 0.3297183
datos_entrenamiento.errors                      0.1199691
                                datos_entrenamiento.strikeouts
datos_entrenamiento.salary                           0.4697480
datos_entrenamiento.homeruns                         0.7214071
datos_entrenamiento.RBI                              0.6292606
datos_entrenamiento.walks                            0.5337602
datos_entrenamiento.strikeouts                       1.0000000
datos_entrenamiento.stolenbases                      0.1520566
datos_entrenamiento.errors                           0.1330487
                                datos_entrenamiento.stolenbases
datos_entrenamiento.salary                          0.203533456
datos_entrenamiento.homeruns                        0.002121256
datos_entrenamiento.RBI                            -0.005182120
datos_entrenamiento.walks                           0.329718330
datos_entrenamiento.strikeouts                      0.152056566
datos_entrenamiento.stolenbases                     1.000000000
datos_entrenamiento.errors                          0.095744428
                                datos_entrenamiento.errors
datos_entrenamiento.salary                      0.09347357
datos_entrenamiento.homeruns                    0.17562807
datos_entrenamiento.RBI                         0.23053522
datos_entrenamiento.walks                       0.11996909
datos_entrenamiento.strikeouts                  0.13304872
datos_entrenamiento.stolenbases                 0.09574443
datos_entrenamiento.errors                      1.00000000

Ajuste del modelo

\[Salary_i=β_0+batting_iβ_1+OBP_iβ_2+runs_iβ_3+hits_iβ_4+dooubles_iβ_5 +tripes_iβ_6\]\[+homeruns_iβ_7+RBI_iβ_8+walks_iβ_9+strikeouts_iβ_10+stolenbases_iβ_11+errors_iβ_12+ϵ_i\]

modelo_completo=lm(salary~.,data = datos_entrenamiento)
summary(modelo_completo)

Call:
lm(formula = salary ~ ., data = datos_entrenamiento)

Residuals:
     Min       1Q   Median       3Q      Max 
-1921.64  -531.25   -60.05   491.41  2675.65 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)
(Intercept)  -142.8460  1281.2624  -0.111    0.911
batting      5812.2171 11636.7768   0.499    0.619
OBP         -2770.8349  9890.1776  -0.280    0.780
runs            4.3917    15.3532   0.286    0.776
hits            1.0016     8.5998   0.116    0.908
dooubles        3.7813    17.2939   0.219    0.827
tripes        -15.4985    49.7727  -0.311    0.756
homeruns       17.3848    28.1126   0.618    0.538
RBI            15.7052    11.3231   1.387    0.169
walks           6.9320    14.6473   0.473    0.637
strikeouts     -0.1812     4.9638  -0.036    0.971
stolenbases    12.8036    12.0740   1.060    0.292
errors        -21.4075    16.7176  -1.281    0.204

Residual standard error: 882.4 on 87 degrees of freedom
Multiple R-squared:  0.563, Adjusted R-squared:  0.5027 
F-statistic:  9.34 on 12 and 87 DF,  p-value: 2.57e-11

La tabla de coeficientes muestra el valor estimado de cada coeficiente de regresión, su error estándar, su valor t y el valor p correspondiente. La columna “Estimate” indica la magnitud de la contribución de cada variable al salario. Por ejemplo, se observa que la variable “batting” tiene un coeficiente positivo y grande, lo que sugiere que cuanto mejor sea el rendimiento de bateo de un jugador, mayor será su salario. En cambio, la variable “errors” tiene un coeficiente negativo y grande, lo que sugiere que los jugadores que cometen más errores tienen un salario más bajo.

El valor de R-cuadrado múltiple (R²) indica que el modelo explica el 56,3% de la variabilidad en los salarios. El valor p global de F indica que al menos una de las variables independientes es significativa en la explicación del salario.

Ya que el modelo no es muy preciso, realizamos un análisis de supuestos.

# Crea una matriz de 1 fila y 3 columnas para los gráficos
par(mfrow=c(1,3))

# Obtiene los residuos estudentizados y los valores ajustados
res.stud.baseball_completo = studres(modelo_completo)
mod.fit.baseball_completo = modelo_completo$fitted.values

# Gráfico de linealidad
plot(mod.fit.baseball_completo, res.stud.baseball_completo,
     ylab = 'Residuos estudentizados',
     xlab = 'Valores ajustados',
     main = 'Gráfico de linealidad')
abline(h = 0, lty = 2) # Agrega una línea horizontal en cero
lines(lowess(res.stud.baseball_completo ~ mod.fit.baseball_completo), col = 'red')

# Gráfico de homocedasticidad
plot(mod.fit.baseball_completo, abs(res.stud.baseball_completo),
     ylab = '|Residuos estudentizados|',
     xlab = 'Valores ajustados',
     main = 'Gráfico de homocedasticidad')
lines(lowess(abs(res.stud.baseball_completo) ~ mod.fit.baseball_completo), col = 'red')

# Gráfico de normalidad
car::qqPlot(modelo_completo,
            xlab = 'Cuantiles teóricos',
            ylab = 'Residuos estudentizados',
            main = 'Gráfico de normalidad',
            distribution = 'norm',
            col = 'red',
            id = FALSE,
            ylim = c(-5,5)) # Limita el rango de los valores en el eje y

bptest(modelo_completo,~batting+OBP+runs+hits+dooubles+tripes+homeruns+RBI+walks+strikeouts+stolenbases+errors+I(batting^2)+I(OBP^2)+I(runs^2)+I(hits^2)+I(dooubles^2)+I(tripes^2)+I(homeruns^2)+I(RBI^2)+I(walks^2)+I(strikeouts^2)+I(stolenbases^2)+I(errors^2),data = datos_entrenamiento)

    studentized Breusch-Pagan test

data:  modelo_completo
BP = 38.587, df = 24, p-value = 0.03016

El resultado del studentized Breusch-Pagan test indica que la hipótesis nula de homocedasticidad es rechazada al nivel de significancia del 0.05, lo que sugiere que existe evidencia de heterocedasticidad en el modelo.

ad.test(res.stud.baseball_completo)

    Anderson-Darling normality test

data:  res.stud.baseball_completo
A = 0.36613, p-value = 0.4279

El resultado del test de normalidad Anderson-Darling sugiere que no hay suficiente evidencia para rechazar la hipótesis nula de que los residuos siguen una distribución normal. El valor p es de 0.4279, lo que indica que la probabilidad de obtener un estadístico de prueba tan extremo como el que se observa en la muestra es relativamente alta si los datos provienen de una distribución normal. Por lo tanto, no hay suficiente evidencia para rechazar la hipótesis nula de normalidad de los residuos.

Ya que el modelo no tiene una homocedasticidad, entonces recurrimos a una transformación para corregir esto.

modelo_completo_transformado=lm(sqrt(salary)~.,data = datos_entrenamiento)
summary(modelo_completo_transformado)

Call:
lm(formula = sqrt(salary) ~ ., data = datos_entrenamiento)

Residuals:
     Min       1Q   Median       3Q      Max 
-20.9117  -7.1513  -0.2382   6.3328  22.3891 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)
(Intercept)  23.61431   14.29238   1.652    0.102
batting      78.37534  129.80731   0.604    0.548
OBP         -59.98713  110.32413  -0.544    0.588
runs          0.10879    0.17126   0.635    0.527
hits          0.03721    0.09593   0.388    0.699
dooubles     -0.03730    0.19291  -0.193    0.847
tripes       -0.36988    0.55521  -0.666    0.507
homeruns      0.25215    0.31359   0.804    0.424
RBI           0.12745    0.12631   1.009    0.316
walks         0.08218    0.16339   0.503    0.616
strikeouts   -0.01266    0.05537  -0.229    0.820
stolenbases   0.10878    0.13468   0.808    0.421
errors       -0.29693    0.18648  -1.592    0.115

Residual standard error: 9.843 on 87 degrees of freedom
Multiple R-squared:  0.5817,    Adjusted R-squared:  0.524 
F-statistic: 10.08 on 12 and 87 DF,  p-value: 4.471e-12

La mayoría de las variables no son significativas (no tienen un valor p significativo), lo que sugiere que no tienen un impacto estadísticamente significativo en la variable respuesta. El modelo general tiene un valor F significativo, lo que indica que al menos una de las variables explicativas tiene un impacto significativo en la variable respuesta. El coeficiente de determinación ajustado indica que este modelo explica alrededor del 52,4% de la variabilidad observada en la variable respuesta.

par(mfrow=c(1,3))

# Calculamos los residuos estudentizados y los valores ajustados del modelo
res.stud.baseball_completo_transformado <- studres(modelo_completo_transformado)
mod.fit.baseball_completo_transformado <- modelo_completo_transformado$fitted.values

# Gráfico de linealidad
plot(mod.fit.baseball_completo_transformado, res.stud.baseball_completo_transformado, 
     ylab = 'Residuos estudentizados',
     xlab = 'Valores ajustados',
     main = 'Linealidad')
abline(h = 0, lty = 2)
lines(lowess(res.stud.baseball_completo_transformado ~ mod.fit.baseball_completo_transformado), col = 'red')

# Gráfico de homocedasticidad
plot(mod.fit.baseball_completo_transformado, abs(res.stud.baseball_completo_transformado), 
     ylab = '|Residuos estudentizados|',
     xlab = 'Valores ajustados',
     main = 'Homocedasticidad')
lines(lowess(abs(res.stud.baseball_completo_transformado) ~ mod.fit.baseball_completo_transformado), col = 'red')

# Gráfico de normalidad
car::qqPlot(modelo_completo_transformado, xlab = 'Cuantiles teóricos',
            ylab = 'Residuos estudentizados',
            main = 'Gráfico de normalidad',
            distribution = 'norm',
            col = 'red',
            id = FALSE)

bptest(modelo_completo_transformado,~batting+OBP+runs+hits+dooubles+tripes+homeruns+RBI+walks+strikeouts+stolenbases+errors+I(batting^2)+I(OBP^2)+I(runs^2)+I(hits^2)+I(dooubles^2)+I(tripes^2)+I(homeruns^2)+I(RBI^2)+I(walks^2)+I(strikeouts^2)+I(stolenbases^2)+I(errors^2),data = datos_entrenamiento)

    studentized Breusch-Pagan test

data:  modelo_completo_transformado
BP = 28.406, df = 24, p-value = 0.2433

En este caso, el valor p obtenido es de 0.2433, lo que sugiere que no hay suficiente evidencia estadística para rechazar la hipótesis nula de homocedasticidad. Por lo tanto, se puede concluir que el modelo parece ser adecuado para representar la relación entre las variables predictoras y la variable de respuesta.

ad.test(res.stud.baseball_completo_transformado)

    Anderson-Darling normality test

data:  res.stud.baseball_completo_transformado
A = 0.27151, p-value = 0.6657

El resultado del test de normalidad Anderson-Darling muestra un valor de A=0.27151 y un p-valor de 0.6657. Esto indica que no hay suficiente evidencia para rechazar la hipótesis nula de que los residuos estandarizados del modelo siguen una distribución normal. Por lo tanto, se puede asumir que los residuos se distribuyen normalmente.

Ahora, aunque se ajusta la homocedasticidad del modelo, puede presentar un problema de multicolinealidad de las variables, entonces hacemos un análisis para verificar esto.

car::vif(modelo_completo_transformado)
    batting         OBP        runs        hits    dooubles      tripes 
  17.717078   16.843580   22.153333   18.481402    4.032356    1.664189 
   homeruns         RBI       walks  strikeouts stolenbases      errors 
  11.453236   14.070871   14.593344    3.365905    2.556619    1.155366 
AIC(modelo_completo_transformado)
[1] 755.2118

En este resultado podemos ver que el modelo presenta problemas de multicolinealidad con las variables las cuales presentan un valor mayor a 10, esto podría presentar un problema al momento de realizar los cálculos, entonces realizamos una regresión Ridge para solucionar esto.

par(mfrow=c(1,2))
modelo_ridge <- lm.ridge(sqrt(salary)~., data=datos_entrenamiento, lambda=seq(0, 3, 0.01))

plot(modelo_ridge, xlab="Log(lambda)", ylab="Coefficients", main="Ridge Trace")

plot(modelo_ridge, xlab="Predictors", ylab="Coefficients", main="Coefficient Profiles")

Aquí se usaron dos gráficos en una sola ventana para visualizar el resultado: el primero es una representación de la evolución de los coeficientes en función del parámetro de regularización (llamado “Ridge trace”), y el segundo muestra los perfiles de los coeficientes para cada predictor en función de los valores de lambda.

lambda<-lm.ridge(sqrt(salary)~.,data=datos_entrenamiento)
k<-lambda[["kHKB"]]
k
[1] 18.43537
modelo_ridge<-lmridge(sqrt(salary)~.,data=datos_entrenamiento,K=1.26565)
modelo_ridge
Call:
lmridge.default(formula = sqrt(salary) ~ ., data = datos_entrenamiento, 
    K = 1.26565)

  Intercept     batting         OBP        runs        hits    dooubles 
   16.85862    25.36933    11.29676     0.05575     0.03288     0.11145 
     tripes    homeruns         RBI       walks  strikeouts stolenbases 
   -0.01051     0.15542     0.06042     0.03656     0.02646     0.04145 
     errors 
   -0.06334 
summary(modelo_ridge)

Call:
lmridge.default(formula = sqrt(salary) ~ ., data = datos_entrenamiento, 
    K = 1.26565)


Coefficients: for Ridge parameter K= 1.26565 
              Estimate Estimate (Sc) StdErr (Sc) t-value (Sc) Pr(>|t|)    
Intercept      16.8586    -4931.2135    468.0076     -10.5366   <2e-16 ***
batting        25.3693        8.0971      3.2811       2.4678   0.0154 *  
OBP            11.2968        4.1364      3.3690       1.2278   0.2225    
runs            0.0558       15.0821      2.1431       7.0375   <2e-16 ***
hits            0.0329       14.5045      2.6462       5.4812   <2e-16 ***
dooubles        0.1114       11.4186      3.4195       3.3393   0.0012 ** 
tripes         -0.0105       -0.2404      4.1772      -0.0576   0.9542    
homeruns        0.1554       16.5096      3.1148       5.3004   <2e-16 ***
RBI             0.0604       17.6610      2.6687       6.6177   <2e-16 ***
walks           0.0366        8.4132      3.3886       2.4828   0.0148 *  
strikeouts      0.0265        8.6294      3.5904       2.4035   0.0182 *  
stolenbases     0.0414        4.8439      4.0611       1.1928   0.2359    
errors         -0.0633       -3.5934      4.3207      -0.8317   0.4077    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Ridge Summary
        R2     adj-R2   DF ridge          F        AIC        BIC 
  0.361000   0.281100   3.589850   9.948588 460.335310 930.204499 
Ridge minimum MSE= 2616.078 at K= 1.26565 
P-value for F-test ( 3.58985 , 94.61574 ) = 2.297675e-06 
-------------------------------------------------------------------

El modelo sugiere que las variables más importantes para predecir el salario son batting, runs, hits, homeruns y RBI. El modelo tiene un R-cuadrado ajustado de 0.281 y un MSE mínimo de 2616.078.

vif(modelo_ridge)
          batting     OBP    runs    hits dooubles  tripes homeruns     RBI
k=1.26565 0.10964 0.11559 0.04678 0.07132  0.11908 0.17771  0.09881 0.07253
            walks strikeouts stolenbases  errors
k=1.26565 0.11695    0.13128     0.16797 0.19012

Se observa que las variables con coeficientes más grandes en valor absoluto son: dobles, triples, bases robadas y errores, lo que sugiere que estas variables pueden tener un mayor impacto en la predicción de la variable respuesta. Por otro lado, las variables con coeficientes más pequeños en valor absoluto son: OBP, carreras impulsadas y boletos, lo que sugiere que estas variables pueden tener un impacto menor en la predicción de la variable respuesta.

Seleccionamos las siguientes variables más significativas para proponer el siguiente modelo: \[Salary_i=β_0+battings_iβ_1+runs_iβ_2+hits_iβ_3+dooubles_iβ_4\]\[+homeruns_iβ_5+RBIs_iβ_6+walks_iβ_7+strikeouts_iβ_8+ε_i\]

modelo_ridge_ajustado = lmridge(salary ~ batting+ runs+hits+dooubles+homeruns+RBI+walks+strikeouts,data = datos_entrenamiento) 
summary(modelo_ridge_ajustado)

Call:
lmridge.default(formula = salary ~ batting + runs + hits + dooubles + 
    homeruns + RBI + walks + strikeouts, data = datos_entrenamiento)


Coefficients: for Ridge parameter K= 0 
              Estimate Estimate (Sc) StdErr (Sc) t-value (Sc) Pr(>|t|)
Intercept  -2.4976e+02   -4.7023e+05  4.5229e+05      -1.0397   0.3012
batting     2.5114e+03    8.0156e+02  1.5503e+03       0.5170   0.6064
runs        1.3101e+01    3.5438e+03  2.8976e+03       1.2230   0.2245
hits        2.1760e-01    9.5992e+01  3.1175e+03       0.0308   0.9755
dooubles    3.2294e+00    3.3088e+02  1.6616e+03       0.1991   0.8426
homeruns    1.6331e+01    1.7347e+03  2.6753e+03       0.6484   0.5184
RBI         1.2288e+01    3.5920e+03  3.0250e+03       1.1874   0.2382
walks       1.9867e+00    4.5721e+02  1.5682e+03       0.2916   0.7713
strikeouts -1.2980e-01   -4.2314e+01  1.5655e+03      -0.0270   0.9785

Ridge Summary
        R2     adj-R2   DF ridge          F        AIC        BIC 
   0.54990    0.51560    8.00005   14.04735 1361.55961 1842.91812 
Ridge minimum MSE= 44496941 at K= 0 
P-value for F-test ( 8.00005 , 91.99988 ) = 3.657247e-13 
-------------------------------------------------------------------

Los resultados del modelo indican que el parámetro de regularización Ridge (K) se estableció en 0, lo que significa que no se aplicó ninguna penalización por complejidad del modelo.

El modelo tuvo un coeficiente de determinación (R2) de 0,5499, lo que indica que aproximadamente el 55% de la variabilidad en el salario de los jugadores puede explicarse por las variables incluidas en el modelo. El valor de F para el modelo fue significativo (p <0,05), lo que indica que el modelo es significativamente mejor que un modelo que solo incluye la intercepción. El valor de AIC fue de 1361,56, lo que sugiere que el modelo tiene un buen ajuste.

Seleccion de variables

selecmod=ols_step_best_subset(modelo_completo_transformado)
selecmod
                                       Best Subsets Regression                                       
-----------------------------------------------------------------------------------------------------
Model Index    Predictors
-----------------------------------------------------------------------------------------------------
     1         runs                                                                                   
     2         runs RBI                                                                               
     3         runs RBI errors                                                                        
     4         runs tripes RBI errors                                                                 
     5         runs hits homeruns RBI errors                                                          
     6         runs hits tripes RBI stolenbases errors                                                
     7         runs hits tripes homeruns RBI stolenbases errors                                       
     8         batting runs hits tripes homeruns RBI stolenbases errors                               
     9         batting OBP runs tripes homeruns RBI walks stolenbases errors                          
    10         batting OBP runs hits tripes homeruns RBI walks stolenbases errors                     
    11         batting OBP runs hits tripes homeruns RBI walks strikeouts stolenbases errors          
    12         batting OBP runs hits dooubles tripes homeruns RBI walks strikeouts stolenbases errors 
-----------------------------------------------------------------------------------------------------

                                                      Subsets Regression Summary                                                      
--------------------------------------------------------------------------------------------------------------------------------------
                       Adj.        Pred                                                                                                
Model    R-Square    R-Square    R-Square     C(p)        AIC         SBIC        SBC          MSEP         FPE        HSP       APC  
--------------------------------------------------------------------------------------------------------------------------------------
  1        0.4927      0.4875      0.4717     9.5098    752.5014    468.4993    760.3169    10430.7516    106.3932    1.0753    0.5280 
  2        0.5593      0.5503      0.5327    -2.3456    740.4235    457.1655    750.8441     9155.3833     94.2900    0.9536    0.4679 
  3        0.5676      0.5541      0.5298    -2.0707    740.5234    457.6065    753.5492     9077.6245     94.3866    0.9553    0.4684 
  4        0.5709      0.5529      0.5247    -0.7569    741.7575    459.1460    757.3885     9104.1967     95.5625    0.9682    0.4742 
  5        0.5736      0.5509      0.5121     0.6860    743.1312    460.8418    761.3674     9144.6430     96.8903    0.9829    0.4808 
  6        0.5767      0.5494      0.5061     2.0426    744.4031    462.4799    765.2445     9176.9818     98.1389    0.9969    0.4870 
  7        0.5790      0.5470      0.4929     3.5640    745.8580    464.3023    769.3045     9227.3895     99.5884    1.0133    0.4942 
  8        0.5799      0.5429       0.484     5.3832    747.6513    466.4208    773.7030     9310.6515    101.4052    1.0337    0.5032 
  9        0.5808      0.5389      0.4758     7.1823    749.4211    468.5306    778.0780     9393.6177    103.2347    1.0545    0.5123 
 10        0.5813      0.5343      0.4606     9.0822    751.3062    470.7380    782.5683     9489.4545    105.2227    1.0772    0.5222 
 11        0.5815      0.5292      0.4421    11.0374    753.2548    472.9971    787.1220     9593.5920    107.3219    1.1014    0.5326 
 12        0.5817      0.5240      0.4276    13.0000    755.2118    475.2645    791.6842     9700.9759    109.4777    1.1265    0.5433 
--------------------------------------------------------------------------------------------------------------------------------------
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 

debido a su simplicidad y la interpretación de los resultados, el modelo 3 podría ser una buena opción, ya que tiene un buen ajuste y es el más simple de todos. Por otro lado, si se busca maximizar la capacidad predictiva, se va a considerar modelos más complejos como el 10 o el 11, que incluyen más predictores y tienen un ajuste ligeramente mejor que los modelos más simples.

modelo_3<-lm(salary~runs + RBI + errors ,data = datos_entrenamiento)
modelo_6<-lm(salary~runs + hits + tripes + RBI + stolenbases + errors ,data = datos_entrenamiento)
summary(modelo_3)

Call:
lm(formula = salary ~ runs + RBI + errors, data = datos_entrenamiento)

Residuals:
     Min       1Q   Median       3Q      Max 
-1837.68  -561.21   -90.16   467.42  2443.83 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  326.226    216.574   1.506 0.135273    
runs          17.092      4.837   3.534 0.000632 ***
RBI           18.587      4.504   4.127 7.83e-05 ***
errors       -18.142     15.417  -1.177 0.242214    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 850.3 on 96 degrees of freedom
Multiple R-squared:  0.5523,    Adjusted R-squared:  0.5383 
F-statistic: 39.47 on 3 and 96 DF,  p-value: < 2.2e-16
summary(modelo_6)

Call:
lm(formula = salary ~ runs + hits + tripes + RBI + stolenbases + 
    errors, data = datos_entrenamiento)

Residuals:
    Min      1Q  Median      3Q     Max 
-1803.7  -507.9   -87.3   446.7  2675.5 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  308.314    244.930   1.259  0.21126   
runs          11.624      9.121   1.274  0.20570   
hits           1.992      4.427   0.450  0.65377   
tripes       -29.325     42.778  -0.686  0.49472   
RBI           20.545      6.075   3.382  0.00105 **
stolenbases   10.331     10.911   0.947  0.34619   
errors       -21.016     15.968  -1.316  0.19136   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 857.9 on 93 degrees of freedom
Multiple R-squared:  0.5584,    Adjusted R-squared:  0.5299 
F-statistic:  19.6 on 6 and 93 DF,  p-value: 1.153e-14
car::vif(modelo_3)
    runs      RBI   errors 
2.367898 2.397340 1.058247 
car::vif(modelo_6)
       runs        hits      tripes         RBI stolenbases      errors 
   8.271846    5.181836    1.300552    4.284905    2.208744    1.115130 

Estos modelos son los que mejor ajustan los resultados y no presentan sus predictores altamente correlacionados, con lo cual podemos afirmar que las predicciones de estos modelos serán correctas, además de que sus valores de AIC, como de SBIC no son tan altos como sí lo son los de los otros modelos.

###Comparación de los modelos

Modelos Número de covariables \(R^2 ajustado\) AIC
modelo_completo_transformado 12 0.524 755.2118
modelo_ridge_ajustado 8 0.51560 1361.55961
modelo_3 3 0.5383 740.5234
modelo_6 6 0.5299 744.4031

Después de ajustar varios modelos que cumplen con los supuestos, se observa que el R cuadrado varía poco entre ellos. Sin embargo, los modelos 3 y 6 presentan el R cuadrado ajustado más alto y también el menor AIC. Por lo tanto se concluye que los modelos 3 y 6 son los que mejor explican la variable de respuesta “salary” para los jugadores de béisbol en relación con las variables de rendimiento evaluadas. Las variables “runs” y “RBI” resultaron ser significativas para el salario de los jugadores, siendo estas las que más influyen en el resultado.