Я пытаюсь предсказать новые наблюдения после многократного вменения. И новые данные, и используемая модель являются объектами списков. Вопрос не в правильности подхода, а в том, как использовать функцию прогнозирования после многократного вменения. У меня есть новые данные, которые представляют собой список. Ниже мой код.
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 на 32 вместо матрицы 30 на 32. Но опция печати печатает 30 на 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
содержит все переменные, использованные в исходной модели. - person Gavin Simpson   schedule 03.02.2019with()
; вот для чего нуженdata
аргументgam()
. - person Gavin Simpson   schedule 04.02.2019