【发布时间】:2019-02-03 11:51:08
【问题描述】:
我试图在多重插补后预测新的观察结果。 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)
下面的代码只是在没有新数据的情况下测试了预测。我观察到的问题是 tp 保存为 1 x 32 矩阵而不是 30 x 32 矩阵。但是打印选项打印出 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)
}
有人可以帮助我了解如何最好地去做吗?
【问题讨论】:
-
你使用什么包?显示
library()电话。我不会在模型函数周围使用with()- 这就是data参数的用途。需要注意的是,确保datsplit的每个组件都包含原始模型中使用的所有变量。 -
我正在使用以下库:mice、mgcv 和 betareg。 with 函数是为每个插补数据集运行模型
-
你不需要
with();这就是gam()的data参数的用途。