Создайте цикл в R для запуска всех возможных комбинаций категориальных переменных (уровней) в регрессии

Я пытаюсь запустить различные модели множественной линейной регрессии в R с моим набором данных о продажах, содержащим более 1000 продуктов и 250 розничных продавцов. Мне интересно посмотреть на коэффициенты модели для каждой комбинации продукта и продавца. Я попытался использовать фиктивные переменные для категориального столбца, но они не дали индивидуальных оценок коэффициентов, как мне было нужно. Как добиться этого с помощью цикла for, который перебирает все возможные комбинации?

2 ответа

Мне нравится этот подход, когда мы вкладываем данные в каждую группу, то есть «вырезать» и «цвет», стенды для переменных «продукт» и «розничный продавец». Затем мы можем запустить линейную регрессию внутри каждой группы по всем остальным переменным.

      library(tidyverse); library(broom)
diamonds %>%
  nest(data = c(carat, clarity:z)) %>%
  mutate(fit = map(data, ~lm(price ~ ., data = .x)),
         tidied = map(fit, tidy)) %>%
  unnest(tidied)

Результат

      # A tibble: 486 x 9
   cut   color data             fit    term      estimate std.error statistic   p.value
   <ord> <ord> <list>           <list> <chr>        <dbl>     <dbl>     <dbl>     <dbl>
 1 Ideal E     <tibble [3,903 … <lm>   (Interce…   9902.     3099.       3.20 1.41e-  3
 2 Ideal E     <tibble [3,903 … <lm>   carat      16448.      263.      62.4  0        
 3 Ideal E     <tibble [3,903 … <lm>   clarity.L   4144.      131.      31.7  2.19e-196
 4 Ideal E     <tibble [3,903 … <lm>   clarity.Q  -1427.      128.     -11.2  1.44e- 28
 5 Ideal E     <tibble [3,903 … <lm>   clarity.C    962.      104.       9.22 4.72e- 20
 6 Ideal E     <tibble [3,903 … <lm>   clarity^4   -134.       75.2     -1.79 7.43e-  2
 7 Ideal E     <tibble [3,903 … <lm>   clarity^5     97.2      52.2      1.86 6.27e-  2
 8 Ideal E     <tibble [3,903 … <lm>   clarity^6     79.8      39.5      2.02 4.35e-  2
 9 Ideal E     <tibble [3,903 … <lm>   clarity^7    154.       33.6      4.58 4.84e-  6
10 Ideal E     <tibble [3,903 … <lm>   depth        -67.0      46.7     -1.43 1.52e-  1
# … with 476 more rows

Как насчет чего-то вроде

      library(lme4)
my_data <- transform(my_data, prcomb = interaction(product, retailer, drop = TRUE))
result <- lmList(sales ~ x1 + x2 + x3 | prcomb, data = my_data)

(включая drop=TRUE потому что lmListне любит пустые категории ...)? (Надеюсь, у вас меньше, чем полные 250 000 комбинаций товар / продавец ...?)

Например:

      mt <- transform(mtcars, cylam = interaction(cyl, am, drop=TRUE))
mm <- lme4::lmList(mpg ~ wt | cylam, data =mt)
coef(mm)
summary(mm)

(Обратите внимание, что summary() метод не кажется очень изящным в отношении категорий, в которых есть только один элемент ...)

Другие вопросы по тегам