簡體   English   中英

在R中為線性回歸創建循環並在額外的列中顯示系數(價格彈性)

[英]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和列SpeciesSepal.lengthPetal.length ,使用brandlevel及其列brandlog_movelog_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM