lmer() 中的 `weights=` 选项是否符合我的要求?

机器算法验证 r 预言 lme4-nlme
2022-03-09 15:33:31

我想预测 PGA 高尔夫球手的表现。我想知道我是否通过使用weights=lmer() 函数中的选项正确地赋予了最近的结果更多的权重。

我有 2012-2014 年的数据,如下所示:

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 - 玩家 ID
  • trnF - 锦标赛 ID
  • rdF - 一轮比赛(每场比赛有 4 轮)
  • 重量 - 重量。基本上是自 2012 年 1 月 1 日以来的周数。
  • rdScr - 观察到的高尔夫球手得分
  • rdPar - 该轮的标准杆。

我想使用 lmer() 根据随机玩家效果和固定标准杆效果来模拟玩家得分。让我们将数据拆分为训练集和测试集。

oRdDat <- rdDat %>% filter(wt <= 120)
newdat <- rdDat %>% filter(wt > 120)

在观察到的数据上拟合模型:

lmr1 <- lmer(rdScr ~ rdPar + (1 | plrF), data= oRdDat)

使用结果来预测新数据,并计算我们预测的绝对误差:

pred0 <- cbind(newdat, prScr = predict(lmr1, newdat, allow.new.levels = TRUE)) %>% 
  mutate(diff = abs(prScr - rdScr))

并使用该diff变量来检查我们投影的平均绝对误差:

summary(pred0$diff)[4]
 Mean 
2.481  

但是,我认为假设最近的结果(例如 2014 年末)应该比 2012 年初的结果对我们的预测产生更大的影响是非常合理的。所以我符合这个:

wlmr1 <- lmer(rdScr ~ rdPar + (1 | plrF), weights = wt, data= oRdDat)

像以前一样预测并检查 MAE:

summary(pred1$diff)[4]
 Mean 
2.474 

渐进式改善!:-D

让我们抛开最佳加权方案是什么以及这里看到的小改进是否真的“值得”的问题。我的问题是:该weights=wt选项是否符合我的要求?例如,在预测未来分数方面为最近的结果提供更多的权重?

谢谢!

1个回答

对数似然定义为:

log(L(θ))=i=1nwilog(P(yi|xi,θ))
在哪里θ是模型参数,wi是观察的权重i,yi是观察的反应i, 和xi是用于观察的协变量向量i. 所以,是的,我认为这个weights选项正是你想要的——最近的观察对对数似然有更大的贡献。

我知道你在你的问题中特别没有要求对此发表任何评论,但Dixon 和 Coles考虑使用这样的权重来提高他们足球模型的预测性能 - 所以可能值得一看使用类似的加权函数(如果您对此还不熟悉)。