I want to predict PGA golfer performance. I'm wondering if I am correctly giving more weight to more recent results by using the
weights= option in the lmer() function.
I have data from 2012-2014 laid out thusly:
library("lme4") library("dplyr") head(rdDat) Source: local data frame [6 x 5] Groups: plrF, trnF plrF trnF rdF wt rdScr rdPar 1 5 996 R1 1 71 71 2 5 996 R2 1 69 71 3 5 996 R3 1 70 71 4 5 996 R4 1 69 71 5 5 998 R1 3 72 72 6 5 999 R1 4 73 70
- plrF - Player ID
- trnF - trounament ID
- rdF - round of tournament (each tournament has 4 rounds)
- wt - Weight. Basically number of weeks since Jan 1, 2012.
- rdScr - observed score for a golfer
- rdPar - par for that round.
I want to use lmer() to model player scores based on a random player effect, and fixed par effect. Let's split the data into a training set and testing set.
oRdDat <- rdDat %>% filter(wt <= 120) newdat <- rdDat %>% filter(wt > 120)
Fit a model on the observed data:
lmr1 <- lmer(rdScr ~ rdPar + (1 | plrF), data= oRdDat)
Use the results to predict the new data, and calculate the absolute error of our prediction:
pred0 <- cbind(newdat, prScr = predict(lmr1, newdat, allow.new.levels = TRUE)) %>% mutate(diff = abs(prScr - rdScr))
and use that
diff variable to check the Mean Absolute Error of our projection:
summary(pred0$diff) Mean 2.481
However, I think it is very reasonable to assume more recent results (eg late 2014) should have more of an impact on our projection than results from early 2012. So I fit this:
wlmr1 <- lmer(rdScr ~ rdPar + (1 | plrF), weights = wt, data= oRdDat)
Predict as before and check out the MAE:
summary(pred1$diff) Mean 2.474
Incremental improvement! :-D
Let's leave aside the question of what the optimal weighting scheme would be and whether the small improvement seen here is actually 'worth it'. My question is: Is that
weights=wt option doing what I want it to do? Eg, provide more weight to more recent results in terms of projecting future scores?