使用data.table创建一列回归系数

roo*_*ody 4 r data.table

我在为应该在这里的上一个问题做一个简单的扩展而感到困惑。

我正在尝试汇总(a)日期范围和(b)因素变量。样本数据可能是:

Brand    Day     Rev     RVP              
  A      1        2535.00  195.00 
  B      1        1785.45  43.55 
  C      1        1730.87  32.66 
  A      2        920.00   230.00
  B      2        248.22   48.99 
  C      3        16466.00 189.00      
  A      1        2535.00  195.00 
  B      3        1785.45  43.55 
  C      3        1730.87  32.66 
  A      4        920.00   230.00
  B      5        248.22   48.99 
  C      4        16466.00 189.00
Run Code Online (Sandbox Code Playgroud)

感谢有用的建议,我找到了如何使用data.table查找几天内品牌的平均收入:

new_df<-df[,(mean(Rev)), by=list(Brand,Day)]
Run Code Online (Sandbox Code Playgroud)

现在,我想创建一个新表,其中有一个列,列出了每个品牌的按天按Rev的OLS回归得出的系数估算值。我尝试这样做,如下所示:

new_df2<-df[,(lm(Rev~Day)), by=list(Brand)]
Run Code Online (Sandbox Code Playgroud)

这似乎不太正确。有什么想法吗?我敢肯定,我已经错过了很明显的东西。

mne*_*nel 5

您有两种选择。

您可以将整个模型对象另存为data.table中的列表

models <- df[,   list(model  = list(lm(Rev ~ Day))),by = Brand]

models
   Brand model
1:     A  <lm>
2:     B  <lm>
3:     C  <lm>


# look at the models
models[,print(model[[1]]),by= Brand]


Call:
lm(formula = Rev ~ Day)

Coefficients:
(Intercept)          Day  
     2804.2       -538.3  



Call:
lm(formula = Rev ~ Day)

Coefficients:
(Intercept)          Day  
     1741.5       -263.5  



Call:
lm(formula = Rev ~ Day)

Coefficients:
(Intercept)          Day  
      -3698         4653  
Run Code Online (Sandbox Code Playgroud)

您可以保存系数

models[, {coefs <- coef(model[[1]])
      list(coefs = coefs, name = names(coefs))}, by = Brand]
##     Brand      coefs        name
## 1:     A  2804.1667 (Intercept)
## 2:     A  -538.3333         Day
## 3:     B  1741.5291 (Intercept)
## 4:     B  -263.5251         Day
## 5:     C -3697.8621 (Intercept)
## 6:     C  4653.1989         Day
Run Code Online (Sandbox Code Playgroud)

或者您可以提取模型列表

  models[,model]
Run Code Online (Sandbox Code Playgroud)