Проверка предположений на наличие проблемы с логистической регрессией

#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 , чтобы у вас были только полные наборы возможных предикторов, а затем подгонял вашу модель (модели), используя этот меньший объект.