Aidez-moi à ajuster cette régression multiple non linéaire qui a défié tous les efforts précédents

9

EDIT: Depuis que j'ai fait ce post, j'ai suivi un post supplémentaire ici .

Résumé du texte ci-dessous: Je travaille sur un modèle et j'ai essayé la régression linéaire, les transformations de Box Cox et GAM mais je n'ai pas fait beaucoup de progrès

En utilisant R, je travaille actuellement sur un modèle pour prédire le succès des joueurs de baseball des ligues mineures au niveau des ligues majeures (MLB). La variable dépendante, la carrière offensive gagne au-dessus du remplacement (oWAR), est un indicateur du succès au niveau MLB et est mesurée comme la somme des contributions offensives pour chaque jeu auquel le joueur participe au cours de sa carrière (détails ici - http : //www.fangraphs.com/library/misc/war/). Les variables indépendantes sont des variables offensives de ligue mineure pour les statistiques qui sont considérées comme d'importants prédicteurs de réussite au niveau de la ligue majeure, y compris l'âge (les joueurs ayant plus de succès à un âge plus jeune ont tendance à être de meilleures perspectives), le taux de retrait [SOPct ], le taux de marche [BBrate] et la production ajustée (une mesure globale de la production offensive). De plus, comme il existe plusieurs niveaux des ligues mineures, j'ai inclus des variables factices pour le niveau de jeu des ligues mineures (Double A, High A, Low A, Rookie et Short Season with Triple A [le plus haut niveau avant les ligues majeures] comme variable de référence]). Remarque: j'ai redimensionné WAR pour qu'il devienne une variable allant de 0 à 1.

Le nuage de points variable est le suivant:

nuage de points

Pour référence, la variable dépendante, oWAR, a le tracé suivant:

parcelle variable dépendante

J'ai commencé avec une régression linéaire oWAR = B1zAge + B2zSOPct + B3zBBPct + B4zAdjProd + B5DoubleA + B6HighA + B7LowA + B8Rookie + B9ShortSeasonet obtenu les graphiques de diagnostic suivants:

linearRegressionDiagnostics

Il y a des problèmes évidents avec un manque d'impartialité des résidus et un manque de variation aléatoire. De plus, les résidus ne sont pas normaux. Les résultats de la régression sont présentés ci-dessous:

linearRegressionResults

En suivant les conseils d'un fil précédent , j'ai essayé une transformation Box-Cox sans succès. Ensuite, j'ai essayé un GAM avec un lien de journal et j'ai reçu ces tracés:

splines

Original diagnosticChecksGAM

Nouveau tracé de diagnostic GAMDiag

Il semble que les splines aient aidé à ajuster les données, mais les tracés de diagnostic montrent toujours un mauvais ajustement. EDIT: Je pensais que je regardais les valeurs résiduelles vs ajustées à l'origine mais je me trompais. Le tracé qui était à l'origine affiché est marqué comme Original (ci-dessus) et le tracé que j'ai téléchargé par la suite est marqué comme Nouveau tracé de diagnostic (également ci-dessus)

GAMResults

Le du modèle a augmentéR2

mais les résultats produits par la commande gam.check(myregression, k.rep = 1000)ne sont pas si prometteurs.

GAMResults2

Quelqu'un peut-il suggérer une prochaine étape pour ce modèle? Je suis heureux de fournir toute autre information qui, selon vous, pourrait être utile pour comprendre les progrès que j'ai réalisés jusqu'à présent. Merci pour toute l'aide que vous pouvez apporter.

zgall1
la source
2
J'ai trouvé le code dans cette excellente introduction sur GAM dans R - www3.nd.edu/~mclark19/learn/GAMS.pdf Le code: library (car) scatterplotMatrix (mydata [, c (1,1: 8)], pch = 19, cex = .5, reg.line = F, lwd.smooth = 1.25, spread = F, ellipse = T, col = c ('gray60', '# 2957FF', '# FF8000'), col.axis = 'gray50')
zgall1
1
Pouvez-vous partager votre ensemble de données? Aussi, +1 pour cette matrice de nuage de points. C'est excellent.
Zach
1
C'est dommage, cela ressemble à un ensemble de données intéressant. Ma suggestion serait d'essayer d'autres algorithmes d'apprentissage automatique, par exemple une forêt aléatoire.
Zach
2
Les forêts aléatoires sont basées sur des arbres de décision. Consultez le package randomForest dans R et la page wikipedia de forêt aléatoire: en.wikipedia.org/wiki/Random_forest
Zach
2
"La variable dépendante ... est mesurée comme la somme des contributions offensives pour chaque jeu auquel le joueur participe au cours de sa carrière." Cela me saute aux yeux. Un sérieux facteur de confusion est ici depuis combien de temps un joueur joue, à la fois en ce que [un] temps de jeu plus long signifie plus de temps pour "collecter" oWAR [b] de meilleurs joueurs joueront probablement pendant de plus longues périodes.
Affine

Réponses:

6

lrmrmsOuirmsormOuiβOuiOui

Frank Harrell
la source
1
Par niveaux, voulez-vous dire regrouper la variable Y dans 100-200 compartiments? Si oui, existe-t-il une méthode préférée pour choisir la taille du bac? Doivent-ils être de taille égale?
zgall1
1
Faites le binning temporairement sauf si nous avons la solution continue. Vous pouvez regrouper en 100 centiles, par exemplerequire(Hmisc); cut2(y, g=100, levels.mean=TRUE)
Frank Harrell
Lorsque vous dites qu'une nouvelle version de rmssera bientôt disponible, avez-vous une idée de quand cela pourrait être?
zgall1
Si vous utilisez Linux, je peux vous le donner maintenant, sinon attendez 2 semaines.
Frank Harrell
Je n'utilise pas Linux donc je suppose que je vais devoir attendre. Veuillez me faire savoir quand il sera disponible.
zgall1
1

Je pense que retravailler la variable dépendante et le modèle peut être fructueux ici. En regardant vos résidus de la lm(), il semble que le problème majeur soit avec les joueurs avec une GUERRE de carrière élevée (que vous avez définie comme la somme de toutes les GUERRES). Notez que votre WAR le plus élevé prévu (mis à l'échelle) est de 0,15 sur un maximum de 1! Je pense qu'il y a deux choses avec cette variable dépendante qui aggravent ce problème:

  • Les joueurs qui jouent simplement plus longtemps ont plus de temps pour collecter WAR
  • Les bons joueurs auront tendance à rester plus longtemps et auront ainsi la possibilité d'avoir plus de temps pour collecter WAR

Cependant, dans le contexte de la prédiction, y compris le temps joué explicitement comme un contrôle (de quelque manière que ce soit, comme poids ou comme dénominateur dans le calcul de la carrière moyenne en carrière) est contre-productif (je soupçonne également que son effet serait également non linéaire). Je suggère donc de modéliser le temps un peu moins explicitement dans un modèle mixte utilisant lme4ou nlme.

j=mjeje

sWUNERjej=α+σje2+<autres trucs>+εjej

Avec lme4, cela ressemblerait à quelque chose
lmer(sWAR ~ <other stuff> + (1|Player), data=mydata)

sWUNER

Affine
la source
Je ne suis pas sûr de bien comprendre. Si la variable dépendante est la guerre saisonnière, quelles sont les variables indépendantes? Une ligne de statistiques de ligue mineure identique pour chaque joueur? Sommes-nous en train de dire que la ligne A des statistiques des ligues mineures peut conduire à la guerre B, C, D et E des ligues majeures?
zgall1
De plus, depuis la publication de ce modèle, j'ai suivi un article supplémentaire que vous pouvez consulter ici: stats.stackexchange.com/questions/61711/…
zgall1