Ajude-me a ajustar essa regressão múltipla não linear que desafiou todos os esforços anteriores

9

EDIT: Desde que fiz este post, segui com um post adicional aqui .

Resumo do texto abaixo: Estou trabalhando em um modelo e tentei regressão linear, transformações de Box Cox e GAM, mas não progredi muito

Usando R, Eu estou trabalhando atualmente em um modelo para prever o sucesso de jogadores menores de beisebol da liga no nível principal da liga (MLB). A variável dependente, carreira ofensiva vence acima da substituição (oWAR), é um proxy para o sucesso no nível da MLB e é medida como a soma das contribuições ofensivas para cada jogada em que o jogador está envolvido ao longo de sua carreira (detalhes aqui - http : // : //www.fangraphs.com/library/misc/war/) As variáveis ​​independentes são variáveis ​​ofensivas da liga menor pontuadas em z para estatísticas que são consideradas preditores importantes de sucesso no nível da liga principal, incluindo idade (jogadores com mais sucesso em uma idade mais jovem tendem a ser melhores perspectivas), taxa de strike out [SOPct ], taxa de caminhada [BBrate] e produção ajustada (uma medida global da produção ofensiva). Além disso, como existem vários níveis das ligas menores, incluí variáveis ​​fictícias para o nível de jogo da liga menor (Duplo A, Alto A, Baixo A, Novato e Temporada Curta com Triplo A [o nível mais alto antes das principais ligas] como variável de referência]). Nota: redimensionei o WAR para ser uma variável que varia de 0 a 1.

O gráfico de dispersão variável é o seguinte:

gráfico de dispersão

Para referência, a variável dependente, oWAR, possui o seguinte gráfico:

gráfico de variável dependente

Comecei com uma regressão linear oWAR = B1zAge + B2zSOPct + B3zBBPct + B4zAdjProd + B5DoubleA + B6HighA + B7LowA + B8Rookie + B9ShortSeasone obtive os seguintes gráficos de diagnóstico:

linearRegressionDiagnostics

Existem problemas claros com a falta de imparcialidade dos resíduos e a falta de variação aleatória. Além disso, os resíduos não são normais. Os resultados da regressão são mostrados abaixo:

linearRegressionResults

Seguindo o conselho de um tópico anterior , tentei uma transformação Box-Cox sem sucesso. Em seguida, tentei um GAM com um link de log e recebi esses gráficos:

splines

Original diagnosticChecksGAM

Novo gráfico de diagnóstico GAMDiag

Parece que os splines ajudaram a ajustar os dados, mas os gráficos de diagnóstico ainda mostram um ajuste inadequado. Edição: Eu pensei que estava olhando para os valores residuais vs valores ajustados originalmente, mas eu estava incorreto. A plotagem que foi originalmente mostrada está marcada como Original (acima) e a plotagem que enviei posteriormente é marcada como Nova plotagem de diagnóstico (também acima)

GAMResults

O do modelo aumentouR2

mas os resultados produzidos pelo comando gam.check(myregression, k.rep = 1000)não são tão promissores.

GAMResults2

Alguém pode sugerir um próximo passo para este modelo? Fico feliz em fornecer qualquer outra informação que você considere útil para entender o progresso que fiz até agora. Obrigado por qualquer ajuda que você pode fornecer.

zgall1
fonte
2
Encontrei o código neste excelente iniciador no GAM em R - www3.nd.edu/~mclark19/learn/GAMS.pdf O código: library (car) scatterplotMatrix (mydata [, c (1,1: 8)], pch = 19, cex = 0,5, reg.line = F, lwd.smooth = 1,25, spread = F, elipse = T, col = c ('cinza60', '# 2957FF', '# FF8000'), col.axis = 'grey50')
zgall1
11
Você pode compartilhar seu conjunto de dados? Além disso, +1 para essa matriz de dispersão. É excelente.
Zach
11
Isso é muito ruim, parece um conjunto de dados interessante. Minha sugestão seria tentar outros algoritmos de aprendizado de máquina, por exemplo, uma floresta aleatória.
Zach
2
Florestas aleatórias são baseadas em árvores de decisão. Confira o pacote Floresta aleatória em R, e a página da Wikipedia Floresta aleatória: en.wikipedia.org/wiki/Random_forest
Zach
2
"A variável dependente ... é medida como a soma das contribuições ofensivas para cada jogada em que o jogador está envolvido ao longo de sua carreira." Isso pula para mim. Um fator de confusão sério aqui é quanto tempo um jogador está jogando, tanto que [um] tempo maior de jogo significa mais tempo para "coletar" oWAR [b] melhores jogadores provavelmente jogarão por períodos mais longos.
Afine

Respostas:

6

Muito bom trabalho. Penso que esta situação é candidata ao modelo logístico ordinal semiparamétrico de probabilidades proporcionais. A lrmfunção no rmspacote R se ajustará ao modelo. Por enquanto, você pode querer arredondar para ter apenas 100-200 níveis. Em breve, uma nova versão do será lançada com uma nova função que permite eficientemente milhares de interceptações no modelo, ou seja, permite que seja totalmente contínuo [atualização: apareceu em 2014]. O modelo de chances proporcionais s é invariável à forma como é transformado. Isso significa que os quantis também são invariantes. Quando você deseja uma média prevista, presume-se que esteja na escala de intervalo adequada.Y β Y YYrmsormYβYY

Frank Harrell
fonte
11
Por níveis, você quer dizer agrupar a variável Y em 100-200 baldes? Em caso afirmativo, existe algum método preferido para escolher o tamanho da bandeja? Eles devem ter o mesmo tamanho?
zgall1
11
Faça o escaneamento temporariamente, a menos que tenhamos a solução contínua. Você pode bin em 100 percentis, por exemplorequire(Hmisc); cut2(y, g=100, levels.mean=TRUE)
Frank Harrell
Quando você diz que uma nova versão rmsserá lançada em breve, você tem alguma idéia de quando isso pode acontecer?
zgall1
Se você usa o linux, posso oferecer agora, caso contrário, espere duas semanas.
31713 Frank15
Eu não uso Linux, então acho que vou ter que esperar. Informe-me quando estiver disponível.
zgall1
1

Eu acho que re-trabalhar a variável dependente e modelo pode ser proveitoso aqui. Olhando para os seus resíduos do lm(), parece que o principal problema está nos jogadores com um WAR de carreira alta (que você definiu como a soma de todos os WAR). Observe que o seu WAR mais alto previsto (em escala) é 0,15 de um máximo de 1! Eu acho que há duas coisas com essa variável dependente que estão exacerbando esse problema:

  • Jogadores que simplesmente jogam por mais tempo têm mais tempo para coletar WAR
  • Bons jogadores tenderão a permanecer por mais tempo e, assim, terão a oportunidade de ter mais tempo para coletar WAR

No entanto, no contexto da previsão, incluir o tempo jogado explicitamente como controle (de qualquer forma, seja como peso ou como o denominador no cálculo da WAR média na carreira) é contraproducente (também suspeito que seu efeito também não seja linear). Portanto, sugiro tempo de modelagem um pouco menos explícito em um modelo misto usando lme4or nlme.

j=mii

sWARij=α+σi2+<other stuff>+εij

Com lme4, isso seria algo como
lmer(sWAR ~ <other stuff> + (1|Player), data=mydata)

sWAR

Afim
fonte
Não tenho certeza se entendi completamente. Se a variável dependente for WAR sazonal, quais são as variáveis ​​independentes? Uma linha de estatísticas da liga menor idêntica para cada jogador? Estamos dizendo essencialmente que a linha de estatísticas A da liga menor pode levar às WAR B, C, D e E da liga principal?
precisa
Além disso, como postar este modelo, eu tenho seguido com um posto adicional que você pode querer verificar para fora aqui: stats.stackexchange.com/questions/61711/...
zgall1