Как использовать прогноз () для новых данных для модели lme4 :: glmer?

Я пытался установить прогнозирующую производительность (AUC ROC) для модели glmer. Когда я пытаюсь использовать функцию 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)))

Оба объекта prob и glmer.probs имеют длину объекта traindata, несмотря на указание аргумента newdata. Раньше я замечал проблемы с функцией прогнозирования, но ни одна из них не была столь специфичной, как эта.

Кроме того, когда модель запускается, я получаю несколько ошибок о необходимости масштабирования моих данных (которые у меня уже есть) и о том, что модель не может сходиться. Любые идеи о том, как это исправить? Я уже увеличил количество итераций и выбрал новый оптимизатор.


person CAD    schedule 20.04.2017    source источник
comment
newdata должен быть фреймом данных, а не вектором, поэтому может помочь использование чего-то вроде testdata[, "Non.TB.Case", drop=FALSE] вместо существующего аргумента newdata.   -  person Marius    schedule 20.04.2017
comment
К сожалению, это не решает проблемы. Я понимаю, что мне нужно делать прогнозы на основе фрейма данных, и мне нужны прогнозы для переменной testdata$Case.Status, но когда я запускаю такой код prob <- predict(GLMER, newdata=TB_Test.glmer[, "Case.Status", drop=FALSE], type="response", re.form=~(1|IDNO)), я получаю следующую ошибку Error in terms.formula(formula(x, fixed.only = TRUE)) : '.' in formula and no 'data' argument. Если я попытаюсь манипулировать, как вы упомянули, я получаю эту ошибку _4 _ [. Data.frame(TB_Test.glmer, , "Non.TB.Case", drop = FALSE) : undefined columns selected   -  person CAD    schedule 20.04.2017
comment
Может быть, ошибка связана с тем, что я использую файл. обозначать все переменные?   -  person CAD    schedule 20.04.2017


Ответы (1)


Выяснилось, что ошибка возникла из-за использования "." ярлык, чтобы указать все предикторы для модели.

person CAD    schedule 20.04.2017