如何在gam对象的循环内运行循环

时间:2019-02-03 11:51:08

标签: r gam

我试图在多次插补后预测新的观察结果。 newdata和要使用的模型都是列表对象。方法的正确性不是问题,而是在多次插补后如何使用预测函数,我们有一个新的数据列表。下面是我的代码。

library(betareg)
library(mice)
library(mgcv)
data(GasolineYield)
dat1 <- GasolineYield

dat1 <- GasolineYield
dat1$yield <- with(dat1,
ifelse(yield > 0.40 | yield < 0.17,NA,yield)) # created missing values

datim <- mice(dat1,m=30) #imputing missing values
mod1 <- with(datim,gam(yield ~ batch + emp,family=betar(link="logit"))) #fit models using gam

创建用于预测的数据集

datnew <- complete(datim,"long")
datsplit <- split(datnew,datnew$.imp)

下面的代码只是在没有newdata的情况下测试了预测。我观察到的问题是tp被保存为1 x 32矩阵,而不是30 x 32矩阵。但是print选项可以打印出30 x 32的图形,但是我不能这样保存。

tot <- 0
for(i in 1:30){
tot <- mod1$analyses[[i]]
tp <- predict.gam(tot,type = "response")
print(tp)
}

下面的代码是我试图使用newdata预测新观察结果的方法。在这里我只是迷路,我不确定该怎么做。

datnew <- complete(datim,"long")
datsplit <- split(datnew,datnew$.imp)
tot <- 0
for(i in 1:30){
tot <- mod1$analyses[[i]]
tp <- predict.gam(tot,newdata=datsplit[[i]], type = "response")
print(tp)
}

有人可以帮助我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我终于找到解决问题的方法。解决方法如下:

if (someObject.getSomething() == whatever) { then do this } else { that }

尽管我必须指出,这应该是您的新数据集

我假设这在构建模型中没有使用。我打开这个#thread的目的是要解决在使用多个插补数据集构建的多个插补/使用模型后如何使用新数据预测观测值的问题。

datnew <- complete(datim,"long")# stack all the imputation data

我希望这对有类似问题的人有所帮助。我曾经遇到一个有关在多次插补后如何预测新数据的问题,我想这将回答该线程中包含的一些问题。