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! 

dt
exclude
没有按照您假设的方式工作。您仍然需要在
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”。