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