gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:29:06 26 4
gpt4 key购买 nike

我正在使用一个使用广义加法模型的随机站点级效应来拟合一个模型,该模型在 mgcv 中实现。 R 包。我一直在使用函数 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)
使用使用离散化的第三个模型进行预测会引发此错误(其他两个不会):
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
如何使用适合离散化的模型对新数据集进行预测?

最佳答案

newdata.gauranteed似乎不适用于 bam()带有 discrete = TRUE 的型号.您可以通过电子邮件向 mgcv 的作者和维护者发送电子邮件,并将可重现的示例发送给他,以便他查看。见 ?bug.reports.mgcv .
你可能想要

names(newdat) <- "x"
因为数据帧有 names .
但解决方法就是为 random.x 传递一些东西。
newdat <- data.frame(x = runif(200, 0, 1), random.x = random.x[[1]])
然后调用您的电话以生成 test3它会起作用。
警告消息和错误是您未指定 random.x 的结果。在 newdata 然后 mgcv 寻找 random.x并在全局环境中找到它。您真的应该将这些变量收集到一个数据框中并使用 data拟合模型时的争论,并尽量不要在全局环境中留下类似名称的对象。

关于r - 使用离散化(离散=T)时无法在 mgcv 中生成预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62913730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com