R 使用离散化时无法在mgcv中生成预测(离散=T)

R 使用离散化时无法在mgcv中生成预测(离散=T),r,gam,mgcv,R,Gam,Mgcv,我正在使用广义相加模型,使用随机站点级效果拟合模型,该模型在R的mgcv包中实现。我一直在使用函数gam()进行拟合。但是,为了加快速度,我需要切换到bam()框架,它与gam()基本相同,但速度更快。我通过传递选项bam(nthreads=N,discrete=T)进一步加快了装配速度,其中nthreads是我机器上的磁芯数。然而,当我使用离散化选项,然后尝试用我的模型对新数据进行预测,同时忽略随机效应时,我得到了一个错误 下面是生成示例数据并再现错误的代码 library(mgcv) #ge

我正在使用广义相加模型,使用随机站点级效果拟合模型,该模型在R的
mgcv
包中实现。我一直在使用函数
gam()
进行拟合。但是,为了加快速度,我需要切换到
bam()
框架,它与
gam()
基本相同,但速度更快。我通过传递选项
bam(nthreads=N,discrete=T)
进一步加快了装配速度,其中
nthreads
是我机器上的磁芯数。然而,当我使用离散化选项,然后尝试用我的模型对新数据进行预测,同时忽略随机效应时,我得到了一个错误

下面是生成示例数据并再现错误的代码

library(mgcv)
#generate data.
N <- 10000
x <- runif(N,0,1)
y <- (0.5*x / (x + 0.2)) + rnorm(N)*0.1 #non-linear relationship between x and y.

#uninformative random effect.
random.x <- as.factor(do.call(paste0, replicate(2, sample(LETTERS, N, TRUE), FALSE)))


#fit models.
fit1 <- gam(y ~ s(x) + s(random.x, bs = 're')) #this one takes ~1 minute to fit, rest faster.
fit2 <- bam(y ~ s(x) + s(random.x, bs = 're'))
fit3 <- bam(y ~ s(x) + s(random.x, bs = 're'), discrete = T, nthreads = 2)

#make predictions on new data.
newdat <- data.frame(runif(200, 0, 1))
colnames(newdat) <- 'x'
test1 <- predict(fit1, newdata=newdat, exclude = c("s(random.x)"), newdata.guaranteed = T)
test2 <- predict(fit2, newdata=newdat, exclude = c("s(random.x)"), newdata.guaranteed = T)
test3 <- predict(fit3, newdata=newdat, exclude = c("s(random.x)"), newdata.guaranteed = T)

如何使用适合离散化的模型对新数据集进行预测?

newdata。gauranteed
似乎不适用于
bam()
模型
discrete=TRUE
。你可以给mgcv的作者和维护者发电子邮件,把可复制的例子发给他,让他看看。请参见
?bug.reports.mgcv

你可能想要

名称(newdat)
Error in model.frame.default(object$dinfo$gp$fake.formula[-2], newdata) : 
  variable lengths differ (found for 'random.x')
In addition: Warning message:
'newdata' had 200 rows but variables found have 10000 rows