2015-04-26 2 views
4

У меня есть набор данных, который я разделил на данные набора тестов/поездов. Сразу же после этого раскола я произвел логистическую модель с:Ошибка в model.frame.default для Predict() - «Фактор имеет новые уровни» - для переменной Char

logModel1 = glm(Y ~ . -var1 -var2 -var3, data=train, family=binomial) 

Если я использую эту модель, чтобы делать прогнозы на тот же набор поезда, я не получаю ошибки (хотя, конечно, не-супер-полезный тест моей модели). Таким образом, я использовал код ниже, чтобы предсказать на моем тестовом наборе:

predictLog1 <- predict(logModel1, type="response", newdata=test) 

Но я получаю следующее сообщение об ошибке:

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : factor myCharVar has new levels This is an observation of myCharVar, This is another...

Вот что у меня особенно смущен:

  • myCharVar является символьная переменная как в моем поезде, так и в тестовых наборах. Я подтвердил это с помощью str(test$myCharVar) и str(train$myCharVar)
  • В моей модели даже не используется myCharVar как часть прогноза.

я нашел объяснение пули 2 при этом SO ссылки: "Factor has new levels" error for variable I'm not using

и предложении там, чтобы удалить переменный характер вообще из моих поездов и тестовых наборов предоставил мне обходной путь так, по крайней мере я м не задерживается. Но это кажется довольно неэлегантным, а не просто удалением их из модели с помощью «-myCharVar». Если кто-то понимает, почему переменная-символ в моем тестовом наборе вызовет ошибку «фактор имеет новые уровни», я бы определенно был заинтересован.

ответ

5

Лицо, ответившее на вопрос в сообщении, которое вы связали, уже дало указание о том, почему myCharVar по-прежнему рассматривается в модели. Когда вы используете z~.-y, формула в основном расширяется до z~(x+y)-y.

Теперь, чтобы ответить на ваш другой вопрос: Рассмотрим следующую цитату из документации predict():. «Для факторных переменных, имеющих числовые уровни, вы можете задать числовые значения в NewData без первого преобразования переменных факторов Эти числовые значения чтобы убедиться, что они соответствуют уровню, тогда переменная преобразуется внутренне в коэффициент ".

Я думаю, мы можем предположить, что такое же поведение наблюдается для myCharVar. Значения myCharVar сначала проверяются на соответствие существующим уровням модели, и это происходит неправильно. Набор тестов содержит значения для myCharVar, которые никогда не встречались во время обучения модели (обратите внимание, что сама функция glm также выполняет преобразование факторов. Она выдает предупреждение, когда требуется преобразование). Таким образом, ошибка в основном означает, что модель не может сделать прогнозы для неизвестных уровней в тестовых данных, которые никогда не встречались во время обучения модели.

В сообщении this есть другое разъяснение, данное по вопросу.

+0

Hi Jellen, я попытался передать, что нашел ответ на вопрос «почему myCharVar по-прежнему считается» с «Я нашел объяснение для пули 2 на этой ссылке SO». Извините, если это не ясно. Большое спасибо за объяснение переменных, которые преобразуются внутренне в факторы, это очень полезно знать и полностью отвечает на мой вопрос. –