0

我正在尝试使用包含 1000 多种产品和 250 家零售商的销售数据集在 R 中运行不同的多元线性回归模型。我有兴趣查看每种产品和零售商组合的模型系数。我尝试对分类列使用虚拟变量,但它没有像我需要的那样产生系数的单独估计。如何使用迭代每个可能组合的 for 循环来实现这一点?

4

2 回答 2

2

我喜欢这种 tidyverse 方法,我们将数据嵌套在每个组中,即“cut”和“color”,代表您的“product”和“retailer”变量。然后我们可以在每个组内对所有其他变量进行线性回归。

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
于 2021-08-31T20:29:50.823 回答
0

像这样的东西怎么样

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()其中只有一个元素的类别,该方法似乎不是很优雅......)

于 2021-08-31T20:29:55.950 回答