问题或多或少与标题表明的一样。我想将caret::train
函数与通过glmmTMB
软件包制作的beta二项式模型一起使用(尽管我并不反对其他能够拟合beta二项式模型的函数)来计算中值绝对误差(MdAE)通过千刀(留一)交叉验证进行估算。 glmmTMBControl
函数已经能够估算出最佳色散参数,但是我也希望以某种方式保留此信息...或者让插入符号进行计算?
我正在使用的数据集如下:
df <- data.frame(Effect = rep(seq(from = 0.05, to = 1, by = 0.05), each = 5), Time = rep(seq(1:20), each = 5))
理想情况下,我可以像这样将glmmTMB
函数传递给trainControl
:
BB.glmm1 <- train(Time ~ Effect,
data = df, method = "glmmTMB",
method = "", metric = "MAD")
输出将按照火车中包含的示例进行,尽管可能会估计色散参数。
尽管我丝毫不反对解决问题-谢谢您!
答案 0 :(得分:1)
我不确定如何在不创建自定义方法的情况下使用插入符号执行所需的操作,但是我相信使用for
(lapply
)循环可以很容易地实现它。
在该示例中,由于您的示例数据会引发一系列警告,因此我将使用sleepstudy
数据集。
library(glmmTMB)
要执行LOOCV-对于每一行,创建一个没有该行的模型并对该行进行预测:
data(sleepstudy,package="lme4")
LOOCV <- lapply(1:nrow(sleepstudy), function(x){
m1 <- glmmTMB(Reaction ~ Days + (Days|Subject),
data = sleepstudy[-x,])
return(predict(m1, sleepstudy[x,], type = "response"))
})
获取残差的中位数(我认为这是MdAE?如果不发表有关其计算方式的评论):
median(abs(unlist(LOOCV) - sleepstudy$Reaction))