[英]Creating a loop for linear regression in R and print the coefficient in extra column (price elasticity)
到目前為止,我們對R的經驗很少,需要創建一個循環。 我們的數據集包含150多個品牌及其銷量和相應價格。 我們需要對每個品牌進行回歸分析(以計算150種不同的價格彈性)。 因為我們不想在R腳本中鍵入每個品牌的每個lm函數,所以我們想使用一個循環,該循環或多或少地為每個品牌自動創建回歸函數。 此外,我們需要將價格系數(即價格彈性)放在數據框的另一列中(以繪制價格彈性)。 我們曾考慮使用for()循環函數,但這沒有用。 我們可能在此功能的規范上犯了一個錯誤,因為它只計算了所有品牌的一個價格彈性。 你有主意嗎 我們期待獲得任何幫助:)
這是我們線性回歸的代碼:
在這里,我們為“ Budweiser”品牌創建了一個數據框:
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]
}
您可以按照以下步驟使用代碼擬合多個模型並獲取其系數。
取而代之的是BUIT,在數據集中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
instrucion),您將執行以下操作。 (未經測試。)
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
的返回值的系數和其他成員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.