在R中创建线性回归的循环并在额外列中打印系数(价格弹性)

时间:2018-05-04 13:33:53

标签: r loops for-loop linear-regression coefficients

到目前为止,我们对R只有很少的经验,需要创建一个循环。我们有一个包含超过150个品牌的数据集,其销售量和相应的价格。我们需要对每个品牌进行回归(以计算150种不同的价格弹性)。因为我们不想将每个品牌的每个lm函数都输入到我们的R脚本中,所以我们希望使用一个循环来为每个品牌或多或少地自动创建回归函数。此外,我们需要将价格系数(即价格弹性)放在数据框的另一列(以绘制价格弹性)。 我们考虑使用for()循环函数,但这不起作用。我们可能在这个函数的规范中犯了一个错误,因为它只计算了所有品牌的一个价格弹性。 你有什么想法吗?我们期待得到任何帮助:)

这是我们线性回归的代码:

在这里,我们为品牌“百威啤酒”创建了一个数据框:

bud_all <- subset(brandlevel, brand=="Budweiser")    

在这里,我们运行回归,其中log_move是已售出的“百威啤酒”的数量,而log_price是已售商品的价格:

reg_bud <-lm(log_move ~ log_price + as.factor(store), data = bud_all)     

这是我们得到的系数:

summary(reg_bud)    

这是我们第一次尝试使用for循环,不幸的是,所有品牌的价格弹性只有一个已经计算过:

out <- data.frame(NULL)
for (i in 1:brandlevel$brand){
  m <- summary(lm(log_move ~ log_price, data=brandlevel))
  out[i,1] <- m$coefficients[2,1]
}    

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码中的代码来拟合多个模型并获取其系数 而不是内置数据集iris及其列SpeciesSepal.lengthPetal.length,请使用brandlevel及其列brand,{{ 1}}和log_move

log_price

编辑。

使用数据集和回归模型(data(iris) out <- lapply(unique(iris$Species), function(s){ sub_iris <- subset(iris, Species == s) m <- lm(Petal.Length ~ Sepal.Length, data = sub_iris) coef(m) }) out <- do.call(rbind, out) out # (Intercept) Sepal.Length #[1,] 0.8030518 0.1316317 #[2,] 0.1851155 0.6864698 #[3,] 0.6104680 0.7500808 指令),您可以执行以下操作。 (未经测试。)

lm

两个音符。

  • 这与上面的out <- lapply(unique(brandlevel$brand), function(b){ sub_df <- subset(brandlevel, brand == b) m <- lm(log_move ~ log_price, data = sub_df) coef(m) }) out <- do.call(rbind, out) 示例完全相同。
  • 您不需要调用复杂的iris函数。有一些函数可以提取系数和返回值summary
  • 的其他成员