到目前为止,我们对R的经验很少,需要创建一个循环。我们有一个数据集,包含150多个品牌及其销售量和相应的价格。我们需要对每个品牌进行一个回归(为了计算150种不同的价格弹性)。因为我们不想在R脚本中键入每个品牌的每个lm函数,所以我们希望使用一个循环来或多或少地为每个品牌自动创建回归函数。此外,我们需要将价格系数(即价格弹性)放入数据的另一列(绘制价格弹性)。我们考虑使用for()循环函数,但这没有起作用。我们可能在这个函数的说明上犯了一个错误,因为它只计算了所有品牌的一个价格弹性。你有什么主意吗?我们期待得到任何帮助:)
这是我们线性回归的代码:
在这里,我们为“百威”品牌创建了一个dataframe:
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]
} 发布于 2018-05-04 13:53:12
您可以对几个模型进行拟合,并使用代码获得它们的系数,如下所示。
与其使用iris及其列Species、Sepal.length和Petal.length,不如使用brandlevel及其列brand、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函数。有一些函数可以提取lm返回值的系数和其他成员。https://stackoverflow.com/questions/50176215
复制相似问题