[英]mgcv: How to use 'exclude' argument in predict.gam?
I have a model structured as follows, and I would like to extract the predicted values while ignoring the random effect. 我的模型结构如下,我想在忽略随机效应的同时提取预测值。 As specified in
?predict.gam
and here , I am using the exclude
argument, but I am getting an error. 由于在规定
?predict.gam
和这里 ,我使用的是exclude
的说法,但我得到一个错误。 Where is my mistake? 我的错误在哪里?
dt <- data.frame(n1 = runif(500, min=0, max=1),
n2 = rep(1:10,50),
n3 = runif(500, min=0, max=2),
n4 = runif(500, min=0, max=2),
c1 = factor(rep(c("X","Y"),250)),
c2 = factor(rep(c("a", "b", "c", "d", "e"), 100)))
mod = gam(n1 ~
s(n2, n3, n4, by=c1) +
s(c2, bs="re"),
data=dt)
newd=data.table(expand.grid(n1=seq(min(dt$n1), max(dt$n1), 0.5),
n2=1:10,
n3=seq(min(dt$n3), max(dt$n3), 0.5),
n4=seq(min(dt$n4), max(dt$n4), 0.5),
c1=c("X", "Y")))
newd$pred <- predict.gam(mod, newd, exclude = "s(c2)")
In predict.gam(mod, newd, exclude = "s(c2)"): not all required variables have been supplied in newdata!
exclude
does not work in the way as you assumed. exclude
不会像你假设的那样工作。 You still need to provide all variables in your newd
for predict.gam
. 您还需要提供您的所有变量
newd
为predict.gam
。 See my this answer for what is behind predict.gam
. 看看我的回答是什么背后的
predict.gam
。
Here is what you need to do: 这是你需要做的:
## pad newd with an arbitrary value for variable c2
newd$c2 <- "a"
## termwise prediction
pt <- predict.gam(mod, newd, type = "terms", exclude = "s(c2)")
## linear predictor without random effect
lp_no_c2 <- rowSums(pt) + attr(pt, "constant")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.