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:
Pour référence, la variable dépendante, oWAR, a le tracé suivant:
J'ai commencé avec une régression linéaire oWAR = B1zAge + B2zSOPct + B3zBBPct + B4zAdjProd + B5DoubleA + B6HighA + B7LowA + B8Rookie + B9ShortSeason
et obtenu les graphiques de diagnostic suivants:
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:
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:
Original
Nouveau tracé de diagnostic
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)
Le du modèle a augmenté
mais les résultats produits par la commande gam.check(myregression, k.rep = 1000)
ne sont pas si prometteurs.
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.
Réponses:
lrm
rms
rms
orm
la source
require(Hmisc); cut2(y, g=100, levels.mean=TRUE)
rms
sera bientôt disponible, avez-vous une idée de quand cela pourrait être?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: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
lme4
ounlme
.Avec
lme4
, cela ressemblerait à quelque choselmer(sWAR ~ <other stuff> + (1|Player), data=mydata)
la source