Ошибка возникает при использовании group_by()
для коэффициента, хотя впоследствии этот коэффициент удаляется из модели с помощью оператора минус (-
) .Мой мотивирующий пример:
library(tidyverse)
df = mtcars %>% mutate(am = factor(am))
fits = df %>%
group_by(am) %>%
do(fit = lm(formula(mpg ~ . - am), .)) # Returns the error
Что выдает следующее сообщение об ошибке:
Ошибка в `контрастах <-` (` <em>tmp `, значение = contr.funs [1 + isOF [nn]]): контрасты могут применяться только к факторам с 2 или более уровнями
Я получаю ту же ошибку, если I filter()
вместо группы:
fit_am0 = df %>%
filter(am == 0) %>%
lm(formula(mpg ~ . - am), .) # Returns the error
Как будто функция formula()
неправильно определяет оператор минуса (- am
), когда переменная, которую я пытаюсь удалить, является фактором, то есть комбинацией двух.Это мое предположение, так как следующие примеры работают без ошибок:
fits = mtcars %>% # `am` is numeric
group_by(am) %>%
do(fit = lm(formula(mpg ~ . - am), .)) # No error
fit_am0 = df %>%
filter(am == 0) %>%
select(-am) %>% # `am` removed prior to running model
lm(formula(mpg ~ .), .) # No error
fits2 = mtcars %>%
mutate(vs = factor(vs)) %>% # A non-grouped factor, later removed
group_by(am) %>%
do(fit = lm(formula(mpg ~ . - vs), .)) # No error
Это ошибка?Или я допустил ошибку в своем мотивирующем примере?