如何在lme4 :: glmer模型的新数据上使用predict()?

时间:2017-04-20 03:50:53

标签: r predict lme4 mixed-models

我一直在尝试为glmer模型建立预测性能(AUC ROC)。当我尝试在测试数据集上使用predict()函数时,此函数的输出是我的列车数据集的长度。

    folds = 10;
    glmerperf=rep(0,folds); glmperf=glmerperf;

    TB_Train.glmer.subset <- TB_Train.glmer %>% select(one_of(subset.vars), IDNO)


    TB_Train.glmer.fs <- TB_Train.glmer.subset[,c(1:7, 22)]
    TB_Train.glmer.ns <- TB_Train.glmer.subset[, 8:21]
    TB_Train.glmer.cns <- TB_Train.glmer.ns %>% scale(center=TRUE, scale=TRUE) %>% cbind(TB_Train.glmer.fs)

    foldsamples = caret::createFolds(TB_Train.glmer.cns$Case.Status, k = folds, list = TRUE, returnTrain = FALSE)

    for (n in 1:folds)
    {
      testdata = TB_Train.glmer.cns[foldsamples[[n]],]
      traindata = TB_Train.glmer.cns[-foldsamples[[n]],]

      GLMER <- lme4::glmer(Case.Status ~ .  + (1 | IDNO), data = traindata, family="binomial", control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=1000000)))
      glmer.probs <- predict(GLMER, newdata=testdata$Non.TB.Case, type="response")
      glmer.ROC <- roc(predictor=glmer.probs, response=testdata$Case.Status, levels=rev(levels(testdata$Case.Status)))
      glmerperf[n] <- glmer.ROC$auc
    }

    prob <- predict(GLMER,  newdata=TB_Test.glmer$Non.TB.Case, type="response", re.form=~(1|IDNO))

    print(sprintf('Mean AUC ROC of model on test set for GLMER %f', mean(glmerperf)))

probglmer.probs对象都是traindata对象的长度,尽管指定了newdata参数。我已经注意到过去的预测函数存在问题,但没有一个像这个一样具体。

此外,当模型运行时,我得到几个关于需要扩展我的数据的错误(我已经拥有)并且模型无法收敛。有想法该怎么解决这个吗?我已经提出了迭代并选择了一个新的优化器。

1 个答案:

答案 0 :(得分:0)

想出错误是因为使用&#34;。&#34;用于指定模型的所有预测变量的快捷方式。