mgcv:如何使用';排除';predict.gam中的参数?
我有一个如下结构的模型,我想在忽略随机效应的情况下提取预测值。如mgcv:如何使用';排除';predict.gam中的参数?,r,regression,predict,gam,mgcv,R,Regression,Predict,Gam,Mgcv,我有一个如下结构的模型,我想在忽略随机效应的情况下提取预测值。如?predict.gam和中所述,我正在使用exclude参数,但我得到了一个错误。我的错在哪里 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
?predict.gam
和中所述,我正在使用exclude
参数,但我得到了一个错误。我的错在哪里
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!
dtexclude
没有按照您假设的方式工作。您仍然需要在newd
中为predict.gam
提供所有变量。查看my以了解predict.gam
背后的内容
以下是您需要做的:
## 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")
##用变量c2的任意值填充newd
newd$c2如果我要排除多个变量,我会怎么做?像这样pt-ah,好的,所以我必须指定整个术语:pt@lueromat使用sappy(mod$smooth,[[”,“label”)
来查看模型中的术语。请注意,因子“by”对于每个因子级别都有一个平滑,因此您将看到例如s(n2,n3,n4):c1X
对于c1
的级别“X”。