#Instalamos librerías
library(Lahman) #esta es la librería de beis
## Warning: package 'Lahman' was built under R version 4.5.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.2
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(Lahman)
library(dplyr)
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.5.3
## Cargando paquete requerido: zoo
## Warning: package 'zoo' was built under R version 4.5.3
## 
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(car)
## Warning: package 'car' was built under R version 4.5.3
## Cargando paquete requerido: carData
## Warning: package 'carData' was built under R version 4.5.3
## 
## Adjuntando el paquete: 'carData'
## The following object is masked from 'package:Lahman':
## 
##     Salaries
## 
## Adjuntando el paquete: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
#install.packages("Lahman")

Analizamos solo la temp del 2023 y solo jugdores con 50 o más turnos al bate (AB) para asegurar que los datos sean representativos. Calculamos las variables dependientes OBP y SLG, y luego estimamos dos modelos de regresión lineal: uno para OBP y otro para SLG.

#Preparamos el dataset
data_modelos <- Batting %>%
  filter(yearID == 2023, AB > 50) %>%
  mutate(
    X1B = H - X2B - X3B - HR,
    OBP = (H + BB + HBP) / (AB + BB + HBP + SF),
    SLG = (X1B + 2*X2B + 3*X3B + 4*HR) / AB
  ) %>%
  filter(!is.na(OBP), !is.na(SLG)) # Limpieza

Aquí hacemos la función del modelo lineal, en el modelo uno queremos saber qué tanto peso tienen las Bases por Bolas (BB), los Golpes recibidos (HBP) y los Hits (H) en la capacidad de un jugador para embasarse. Es un análisis de descomposición de la métrica. En el modelo 2, busca cuantificar el impacto marginal que tienen los dobles (X2B), triples (X3B) y cuadrangulares (HR) sobre el poder total del bateador.

# Estimación
modelo1 <- lm(OBP ~ BB + HBP + H, data = data_modelos)
modelo2 <- lm(SLG ~ X2B + X3B + HR, data = data_modelos)

summary(modelo1)
## 
## Call:
## lm(formula = OBP ~ BB + HBP + H, data = data_modelos)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.149881 -0.019685 -0.002167  0.019675  0.129209 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.713e-01  2.645e-03 102.549   <2e-16 ***
## BB          9.538e-04  1.086e-04   8.783   <2e-16 ***
## HBP         1.403e-03  4.278e-04   3.281   0.0011 ** 
## H           7.389e-05  5.231e-05   1.413   0.1583    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.03463 on 552 degrees of freedom
## Multiple R-squared:  0.3811, Adjusted R-squared:  0.3777 
## F-statistic: 113.3 on 3 and 552 DF,  p-value: < 2.2e-16
summary(modelo2)
## 
## Call:
## lm(formula = SLG ~ X2B + X3B + HR, data = data_modelos)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.245066 -0.034201 -0.005499  0.029817  0.291133 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.3205380  0.0041672  76.920   <2e-16 ***
## X2B         0.0004386  0.0003635   1.207   0.2281    
## X3B         0.0026260  0.0015763   1.666   0.0963 .  
## HR          0.0058219  0.0003716  15.665   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.05715 on 552 degrees of freedom
## Multiple R-squared:  0.535,  Adjusted R-squared:  0.5325 
## F-statistic: 211.7 on 3 and 552 DF,  p-value: < 2.2e-16

En el modelo de OBP tenemos una r ajustada de .38 por lo que el modelo explica el 38% de la variabilidad en OBP, lo cual es un resultado moderado. En el modelo de SLG, la r ajustada es de .53, lo que indica que el modelo explica el 53% de la variabilidad en SLG por lo que es mas sólido que el otro. En ambos las variables elegidas explican el comportmiento de la varible dependiente.

Para ver si es una regresión valida primero vemos el gráfico, hacemos el test de Breusch pagan y el de shapiro, el vif detecta multicolinealidad.

#Homocedasticidad
plot(modelo1, which = 1) #Si la línea roja es horizontal, es bueno.

plot(modelo2, which = 1)

bptest(modelo1) # Si p-value > 0.05, hay homocedasticidad
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo1
## BP = 47.305, df = 3, p-value = 2.993e-10
bptest(modelo2)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo2
## BP = 34.278, df = 3, p-value = 1.731e-07

Al realizar la verificación de supuestos para ambos modelos, se observó que la línea roja en los gráficos de Residuals vs Fitted no es completamente horizontal, concluyendo que existe evidencia de heterocedasticidad en ambos modelos, el test de Breusch-Pagan confirma esta observación.

#normalidad
qqPlot(modelo1)

## [1] 152 267
qqPlot(modelo2)

## [1]  96 152
shapiro.test(residuals(modelo1)) # Si p-value > 0.05, los residuos son normales.
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo1)
## W = 0.97924, p-value = 4.219e-07
shapiro.test(residuals(modelo2))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo2)
## W = 0.96556, p-value = 3.914e-10

Estos resultados indican que los residuos no se distribuyen de forma normal. Esto puede afectar la validez de las pruebas de significancia y los intervalos de confianza.

#multicolinealidad
vif(modelo1)
##       BB      HBP        H 
## 2.674384 1.379615 3.027158
vif(modelo2) # Si los valores son menores a 5, no hay problemas graves de multicolinealidad.
##      X2B      X3B       HR 
## 2.473545 1.277580 2.168077

En ambos modelos, los valores de VIF son menores a 5, lo que indica que no hay problemas graves de multicolinealidad entre las variables independientes. Esto sugiere que las variables seleccionadas para cada modelo no están altamente correlacionadas entre sí, lo que es favorable para la estabilidad y la interpretación de los coeficientes de regresión.