Hitters

Dades baseball

Descripció

Dades de les principals lligues de beisbol de les temporades 1986 i 1987.

Format

Un data frame amb 322 observacions de jugadors de les principals lligues sobre les 20 variables següents.

  1. AtBat: Número de vegades al bat en 1986
  2. Hits: Número de bateades en 1986
  3. HmRun: Número de home runs en 1986
  4. Runs Número de carreres en 1986
  5. RBI: Número de carreres batejades en 1986
  6. Walks: Número de walks en 1986
  7. Years: Número d'anys en les lligues principals
  8. CAtBat: Número de vegades al bat durant la seva carrera
  9. CHits: Número de bateades durant la seva carrera
  10. CHmRun: Número de home runs durant la seva carrera
  11. CRuns: Número de carreres durant la seva carrera
  12. CRBI: Número de carreres batudes durant la seva carrera
  13. CWalks: Número de walks durant la seva carrera
  14. League: Factor amb nivells A i N que indica la lliga del jugador a finals del 1986
  15. Division: Factor amb nivells E i W que indica la divisió del jugador a finals del 1986
  16. PutOuts: Número de put outs en 1986
  17. Assists: Número de assistències en 1986
  18. Errors: Número de errors en 1986
  19. Salary: Salari anual en milers d dolars en la primera jornada inaugural de l'any 1987
  20. NewLeague: Factor amb nivells A i N que indica la lliga del jugador a principis del 1987

Font

Aquest conjunt de dades s’ha extret de la biblioteca StatLib que es manté a la Universitat Carnegie Mellon. Això forma part de les dades que es van utilitzar a la sessió de pòsters de la secció de gràfics ASA de 1988. Les dades salarials eren originàriament de Sports Illustrated, el 20 d’abril de 1987. Les estadístiques de 1986 i de carrera es van obtenir a partir de la ‘Baseball Encyclopedia Update 1987’ publicat per Collier Books, Macmillan Publishing Company, Nova York.

Referències

James, G., Witten, D., Hastie, T. i Tibshirani, R. (2013) An Introduction to Statistical Learning with applications in R, www.StatLearning.com, Springer-Verlag, Nova York.

Objectiu

Predir el salari d'un jugador de beisbol amb les variables de la base de dades.

Comencem descarregant el paquet ISLR que inclou el conjunt de dades Hitters.

Abans de tot, hem de veure si falten valors d'alguna variable per tal d'ometre aquestes dades buides.

Utilitzarem la funció is.na() que indica les observacions buides i la funció sum() que ens dona el nombre d'elements que falten.

Com hi ha jugadors que no tenen la dada del Salary (variable aleatòria resposta), utilitzarem la funció na.omit() per eliminar les files on falti aquest valor.

Mínims quadrats ordinaris (MQO)

A continuació apliquem el mètode de regressió lineal de Mínims Quadrats Ordinaris (MQO), on Salary serà la variable aleatòria resposta, i totes les altres formaran la matriu X de predictors.

Abans de donar aquest model per bo, ens hem d'assegurar que els predictors no presenten un problema de multicol·linealitat. Primer vegem la matriu de correlacions de forma númerica i de forma gràfica:

Veiem que alguns coeficients de correlació són bastant propers a 1, el que indica que hi ha relacions entre els predictors.

Calcularem el FIV, funció que es troba al paquet car:

Com podem observar, hi ha diversos valors del FIV que superen el valor 1, per tant reafirmem que tenim un gran problema de multicol·linealitat.

Per últim calculem el número de condició:

Com podem veure, el número de condició és molt elevat.

Com que la restricció del ridge/lasso/Elastic Net tracta tots els coeficients per igual, normalment té sentit que tots els elements de X estiguin en les mateixes unitats. Si no, sense cap pèrdua de generalitat, centralitzarem i estandarditzarem els predictors per tal que cadascuna de les columnes de X tingui mitjana 0 i variància 1.

Ridge

Arribem a la conclusió que com hi ha multicol·linealitat entre les variables del model no podem aplicar MQO. Per tant, utilitzarem la regressió Ridge per estimar els coeficients del model.

Preparem les dades en forma de matriu per poder utilitzar la funció glmnet, un paquet que inclou les regressions Ridge, Lasso i Elastic Net que farem servir.

Primer definim un ventall de possible valors de $\lambda$:

Per obtenir el camí de solucions dels coeficients en funció de $\lambda$ apliquem la funció glmnet() a les dades utilitzant que:

alpha=0 correspon a la regressió Ridge

alpha=1 correspon a la regressió Lasso

Ara utilitzem la funció plotper realitzar el gràfic que ens permet veure l'estimació dels coeficientes del model ajustat respecte a:

  1. La norma L1
  2. El log($\lambda$)
  3. El percentatge de desviació explicada

Per a calcular el valor de $\lambda$ òptim, primer hem d'establir una "llavor aleatòria" perquè els resultats obtinguts puguin ser reproduïbles.

Després apliquem la funció cv.glmnet() per obtenir el valor de $\lambda$ que minimitza l'error de predicció, mitjançant la validació encreuada.

Tornem a utilitzar la funció plot per veure gràficament els resultats de la validació encreuada. Podem veure dues marques:

  1. La blau marca el log($\lambda_{min}$) on $\lambda_{min}$ proporciona un error mitjà de la validació encreuada mínim.
  2. La negra marca 1se és el valor més gran de $\lambda$ de manera que es troba a 1 desviament estàndard de la $\lambda_{min}$

Finalment utilitzem la funció predict() per reajustar els coeficients utilitzant el valor de la $\lambda$ resultant de la validació encreuada.

Com podem veure, els coeficients han quedat restringits cap a zero i a canvi d'afegir biaix hem reduït la variància. Tanmateix cap dels coeficients és igual a zero, ja que la regressió Ridge no fa selecció de variables.

Lasso

Repetim el mateix procediment, però en aquest cas, estimant el model mitjançant la regressió Lasso.

Tornem a definim un ventall de possible valors de $\lambda$:

Per obtenir el camí de solucions dels coeficients en funció de $\lambda$ apliquem la funció glmnet() a les dades utilitzant que alpha=1 correspon a la regressió Lasso.

Ara utilitzem la funció plotper realitzar el gràfic que ens permet veure l'estimació dels coeficientes del model ajustat respecte a:

  1. La norma L1
  2. El log($\lambda$)
  3. El percentatge de desviació explicada

Per a calcular el valor de $\lambda$ òptim, tornem a establir la mateixa "llavor aleatòria" perquè els resultats obtinguts puguin ser reproduïbles.

Després apliquem la funció cv.glmnet() per obtenir el valor de $\lambda$ que minimitza l'error de predicció, mitjançant la validació encreuada.

Tornem a utilitzar la funció plot per veure gràficament els resultats de la validació encreuada. Podem veure dues marques:

  1. La blau marca el log($\lambda_{min}$) on $\lambda_{min}$ proporciona un error mitjà de la validació encreuada mínim.
  2. La negra marca 1se és el valor més gran de $\lambda$ de manera que es troba a 1 desviament estàndard de la $\lambda_{min}$

Finalment utilitzem la funció predict() per reajustar els coeficients utilitzant el valor de la $\lambda$ resultant de la validació encreuada.

Veiem que 6 dels coeficients de la regressió són exactament iguals a zero, per tant les variables asssociades no estaran en el model.

Hem comprobat que el lasso realitza selecció de variables.

Elastic Net

El procediment Elastic Net pren valors de alpha entre $0$ i $1$. Anem a veure com canvia el model per a alphes diferents.

Definim un ventall de possible valors de $\lambda$:

Per obtenir el camí de solucions dels coeficients en funció de $\lambda$ apliquem la funció glmnet() a les dades utilitzant:

alpha=0.001 alpha=0.3 alpha=0.5 alpha=0.999

Ara utilitzem la funció plotper realitzar el gràfic que ens permet veure l'estimació dels coeficientes del model ajustat per a les diferents alpha:

Com podem observar, la primera gràfica (alpha=0.001) és molt semblant al camí de les solucions que proporciona la regressió Ridge, ja que el coeficient alpha està molt a prop de 0. Per altra banda, l'última gràfica (alpha=0.999) és quasi idèntica al camí de les solucions que ens dona la regressió Lasso, perquè el coeficient alpha és quasi 1.

Tornem a establir la mateixa "llavor aleatòria" per a que els resultats obtinguts siguin reproduïbles.

Després apliquem la funció cv.glmnet() per obtenir el valor de $\lambda$ que minimitza l'error de predicció, mitjançant la validació encreuada, aplicada a cada model.

Tornem a utilitzar la funció plot per veure gràficament els resultats de la validació encreuada. Podem veure dues marques:

  1. La blau marca el log($\lambda_{min}$) on $\lambda_{min}$ proporciona un error mitjà de la validació encreuada mínim.
  2. La negra marca 1se és el valor més gran de $\lambda$ de manera que es troba a 1 desviament estàndard de la $\lambda_{min}$

Finalment utilitzem la funció predict() per reajustar els coeficients utilitzant el valor de la $\lambda$ resultant de la validació encreuada.

Similars als coeficients de la regressió lasso, amb alguns coeficients nuls, que resolen les limitacions del lasso.

Comparacions

A continuació podem veure els diferents gràfics que ens permeten veure l'estimació dels coeficients del model ajustat pels diferents alpha, incloent-hi les regressions Ridge i Lasso.

Finalment, podem comparar els coeficients obtinguts mitjançant la lambda que minimitza la mitjana de l'error per a la regressió Lasso.

Veiem que els coeficients provenents del ridge no presenten cap estimació nul·la, mentre que els coeficients de l'elastic net a mesura que s'aproximen a la regressió lasso, començen a tenir alguns coeficients iguals a zero.