Я создаю регрессионную модель логистики c, предсказывающую факторизованную двоичную переменную результата (да / нет), но сталкиваюсь со странной проблемой с отсутствующими данными. По сути, я получаю совсем другой R-квадрат, когда вручную отфильтрую наблюдения из модели перед запуском функции GLM по сравнению с тем, чтобы позволить GLM выполнить свое собственное действие na.action. Ниже приведен пример кода:
outcome <- rnorm(100)
outcome <- ifelse(outcome <= 0.5, 0, 1)
var1 <- rnorm(100)
var2 <- rnorm(100)
var3 <- c(rnorm(88), NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)
df <- data.frame(cbind(outcome, var1, var2, var3))
df$outcome <- factor(df$outcome)
model_1 <- glm(outcome ~., data = df, family = "binomial")
nagelkerke(model_1)
Результат model_1:
$Pseudo.R.squared.for.model.vs.null
Pseudo.R.squared
McFadden 0.160916
Cox and Snell (ML) 0.192093
Nagelkerke (Cragg and Uhler) 0.261581
Теперь я попытался отфильтровать случаи заранее и получить совершенно другой R-квадрат:
df_clean <- filter(df, is.na(var3) == FALSE)
model_2 <- glm(outcome ~., data = df_clean, family = "binomial")
nagelkerke(model_2)
Результат model_2:
$Pseudo.R.squared.for.model.vs.null
Pseudo.R.squared
McFadden 0.0110171
Cox and Snell (ML) 0.0123142
Nagelkerke (Cragg and Uhler) 0.0182368
Почему это так, учитывая, что GLM по умолчанию na.action = na.omit (который я интерпретирую как пропущенные случаи с пропущенными значениями)? Разве это не то же самое, что предварительно отфильтровать эти случаи и затем запустить модель?
Кроме того, я попытался изменить na.action на «na.omit» и «na.exclude» и получить одинаковые выводы. Спасибо за вашу помощь!