#r #regression #logistic-regression #prediction
#r #регрессия #логистическая регрессия #прогнозирование
Вопрос:
Первый вопрос здесь и новичок, так что полегче со мной..
Но возникает проблема с проверкой предположений на наличие логистической регрессии, когда я пытаюсь проверить прогнозируемые вероятности, получая эту ошибку
ошибка data $predictedProbabilities <-fitted(final_model): назначенные данные
fitted(final_model)
должны быть совместимы с существующими данными. x Существующие данные содержат 32950 строк. x присвоенных данных содержит 31396 строк. i перерабатываются только векторы размера 1. Запуститеrlang::last_error()
, чтобы увидеть, где произошла ошибка.
nrow(данные) [1] 32950 nrow(данные [полные.случаи (данные),]) [1] 27539
Есть идеи, в чем проблема и как я мог бы исправить?
Ввод:
#Logistic regression models
model1 <-glm(subscribed ~ nr_employed cons_conf_idx euribor3m,
data=data, family="binomial")
model2 <- glm(subscribed ~ nr_employed cons_conf_idx euribor3m
emp_var_rate previous campaign, data=data, family="binomial")
formula <- subscribed ~ nr_employed cons_conf_idx euribor3m
emp_var_rate previous poutcome campaign day_of_week month
housing contact education job
final_model <- glm(formula, data=data, family="binomial")
exp(final_model$coefficients)
#review models
summary(model1)
summary(model2)
summary(final_model)
#check predictive accuracy
logisticPseudoR2s <- function(LogModel) {
dev <- LogModel$deviance
nullDev <- LogModel$null.deviance
modelN <- length(LogModel$fitted.values)
R.l <- 1 - dev / nullDev
R.cs <- 1- exp ( -(nullDev - dev) / modelN)
R.n <- R.cs / ( 1 - ( exp (-(nullDev / modelN))))
cat("Pseudo R^2 for logistic regressionn")
cat("Hosmer and Lemeshow R^2 ", round(R.l, 3), "n")
cat("Cox and Snell R^2 ", round(R.cs, 3), "n")
cat("Nagelkerke R^2 ", round(R.n, 3), "n")
}
logisticPseudoR2s(final_model)
data$predictedProbabilities <-fitted(final_model)
Комментарии:
1. Привет, Джо! Фактически не имея образца ваших входных данных или кода, мы должны полагаться на ваши сообщения об ошибках. Из того, что я могу здесь сказать, у вас есть вызываемый data.frame
data
, который содержит 32950 строк. Назначенные данныеfitted(final_model)
содержат 31396 строк. Подобные вещи обычно возникают после удаления случаев NA. Не могли бы вы, возможно, подмножество вашегоdata
объекта с помощьюcomplete.cases()
и посмотреть, исправляет ли это несоответствие количества строк?2. Привет, Эндрю, вы правы. Я добавил свой код ввода в вопрос, и до этого момента все работало без ошибок. Но да, я создал модель логистической регрессии (final_model) из фрейма данных (data). Надеюсь, эти входные данные помогут. Я не удалял никаких значений из исходного набора данных, поэтому меня смущает эта ошибка.
3. Мы знаем, что вы не удаляли никаких данных, но если бы у вас были
NA
значения в любом из предикторов, они были бы удалены автоматически. Пожалуйста, опубликуйте результатыnrow(data)
иnrow(data[complete.cases(data),])
как часть вашего вопроса…4. Привет, Бен, я включил этот вывод в вопрос. Спасибо
5. Джо: добавленный вами вывод показывает, что в нем много пропущенных значений
data
. Только ~ 27 тыс. ваших записей содержат полный набор (потенциальных) наблюдений и предсказателей. Это отличается от значения 31396, потомуfinal_model
что не использует все переменные вdata
(меньшее количество «переменных» ~ = более полные случаи). Вы не можете получить прогнозы для предикторов NA, не выполнив какой-либо отдельный, например, процесс вменения. На вашем месте я бы предварительно отфильтровалdata
, чтобы у вас были только полные наборы возможных предикторов, а затем подгонял вашу модель (модели), используя этот меньший объект.