У меня есть фреймворк с атрибутами учащихся и результатами тестов, и я пытаюсь подогнать линейную модель для каждого уровня обучения (с 1 по 12). Я использую пакет broom для эффективного создания модели для каждого класса. Ниже приведен упрощенный пример набора данных и код, который я использую.
#start df creation
grade <- rep(1:12, each = 40)
attendance_rate <- round(runif(480, min=25, max=100), 1)
test_growth <- round(runif(480, min = -12, max = 38))
binary_flag <- round(runif(480, min = 0, max = 1))
score <- round(runif(480, min = 92, max = 370))
survey_response <- round(runif(480, min = 1, max = 4))
df <- data.frame(grade, attendance_rate, test_growth, binary_flag, score, survey_response)
df$survey_response[df$grade == 1] <- NA
# end df creation
#create train test split for each grade level
set.seed(123)
df_train <- lapply(split(seq(1:nrow(df)), df$grade), function(x) sample(x, floor(.6*length(x))))
df_test <- mapply(function(x,y) setdiff(x,y), x = split(seq(1:nrow(df)), df$grade), y = df_train)
df_train <- df[unlist(df_train),]
df_test <- df[unlist(df_test),]
#create models
models_nested <- df_train %>%
group_by(grade) %>% nest() %>%
mutate(
fit = map(data, ~ lm(score ~ attendance_rate + test_growth + binary_flag + survey_response, data = .x)),
tidied = map(fit, tidy),
augmented = map(fit, augment),
glanced = map(fit, glance)
)
К сожалению, когда я пытаюсь запустить блок кода, который начинается с models_nested, я получаю следующую ошибку:
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases
Я знаю, что это происходит, потому что все ученики 1-го класса имеют значение NA в столбце survey_response. Я не знаю, как решить эту проблему без запуска отдельной регрессии для 1-го класса, при которой столбец / переменная ответа на опрос полностью удаляется. Есть ли способ указать функции lm просто игнорировать переменную, если это конкретное подмножество оценок содержит только нулевые значения? Я, очевидно, хочу сохранить эту переменную в регрессии для других моделей уровня обучения.
Я постарался прояснить этот вопрос, но при необходимости буду рад уточнить в комментариях.
ИЗМЕНИТЬ 6/9/2020: я не хочу возвращать NA для модели первого класса, я просто хочу, чтобы линейная модель для первого класса запускалась без столбца survey_response. Я бы хотел, чтобы столбец survey_response был включен во все другие модели уровня обучения.
Я надеюсь, что кто-то может помочь!