简体   繁体   English

mgcv:如何在predict.gam中使用'exclude'参数?

[英]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 . 您还需要提供您的所有变量newdpredict.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM