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
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 CSVdatos_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 entrenamientodatos_aleatorios <-sample(1:nrow(datos_baseball), 100, replace =FALSE)datos_entrenamiento <- datos_baseball[datos_aleatorios, ]# Seleccionar datos restantes para el conjunto de validacióndatos_validacion <- datos_baseball[-datos_aleatorios, ]# Mostrar la cantidad de filas en los conjuntos de entrenamiento y validaciónnrow(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óncor(mitad1_datos_entrenamiento)
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áficospar(mfrow=c(1,3))# Obtiene los residuos estudentizados y los valores ajustadosres.stud.baseball_completo =studres(modelo_completo)mod.fit.baseball_completo = modelo_completo$fitted.values# Gráfico de linealidadplot(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 cerolines(lowess(res.stud.baseball_completo ~ mod.fit.baseball_completo), col ='red')# Gráfico de homocedasticidadplot(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 normalidadcar::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
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.
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 modelores.stud.baseball_completo_transformado <-studres(modelo_completo_transformado)mod.fit.baseball_completo_transformado <- modelo_completo_transformado$fitted.values# Gráfico de linealidadplot(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 homocedasticidadplot(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 normalidadcar::qqPlot(modelo_completo_transformado, xlab ='Cuantiles teóricos',ylab ='Residuos estudentizados',main ='Gráfico de normalidad',distribution ='norm',col ='red',id =FALSE)
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.
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.
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.
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.
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\]
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.
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.
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.