首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中创建线性回归循环,并在额外的列(价格弹性)中打印系数。

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

Stack Overflow用户
提问于 2018-05-04 13:33:52
回答 1查看 931关注 0票数 0

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

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

在这里,我们为“百威”品牌创建了一个dataframe:

代码语言:javascript
复制
bud_all <- subset(brandlevel, brand=="Budweiser")    

在这里,我们进行回归,log_move是售出的“百威”的数量,log_price是出售的商品的价格:

代码语言:javascript
复制
reg_bud <-lm(log_move ~ log_price + as.factor(store), data = bud_all)     

如果我们得到的系数是:

代码语言:javascript
复制
summary(reg_bud)    

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

代码语言:javascript
复制
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]
}    
EN

回答 1

Stack Overflow用户

发布于 2018-05-04 13:53:12

您可以对几个模型进行拟合,并使用代码获得它们的系数,如下所示。

与其使用iris及其列SpeciesSepal.lengthPetal.length,不如使用brandlevel及其列brandlog_movelog_price

代码语言:javascript
复制
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规范),您将执行如下操作。(未经测试)

代码语言:javascript
复制
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函数。有一些函数可以提取lm返回值的系数和其他成员。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50176215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档