相关疑难解决方法(0)

在data.table中按组进行回归和汇总统计

我想计算一些摘要统计数据,并在数据表中按组执行不同的回归,并将结果以"宽"格式(即每组包含多列的一行).我可以通过多个步骤完成它,但似乎应该可以一次完成所有操作.

考虑这个示例数据:

set.seed=46984
dt <- data.table(ID=c(rep('Frank',5),rep('Tony',5),rep('Ed',5)), y=rnorm(15), x=rnorm(15), z=rnorm(15),key="ID")
dt
#       ID          y          x            z
# 1:    Ed  0.2129400 -0.3024061  0.845335632
# 2:    Ed  0.4850342 -0.5159197 -0.087965415
# 3:    Ed  1.8917489  1.7803220  0.760465271
# 4:    Ed -0.4330460 -2.1720944  0.973812545
# 5:    Ed  0.7685060  0.7947470  1.279761200
# 6: Frank  0.4978475 -0.2906851  0.568101004
# 7: Frank  0.6323386 -0.5596599  1.537133025
# 8: Frank -0.8243218 -0.4354885  0.057818033
# 9: Frank  1.2402488  0.3229422  0.005995249
#10: Frank  0.2436210 -0.2651422  0.349532173
#11:  Tony  0.4179568  0.1418463 …
Run Code Online (Sandbox Code Playgroud)

grouping regression r list data.table

11
推荐指数
1
解决办法
4092
查看次数

在data.table中分组:如何获得超过1列的结果?

我有一个data.table这样的对象

library(data.table)

a <- structure(list(PERMNO = c(10006L, 10006L, 10015L, 10015L, 20000L, 20000L), 
                    SHROUT = c(1427L, 1427L, 1000L, 1001L, 200L, 200L), 
                    PRC = c(6.5, 6.125, 0.75, 0.5, 3, 4), 
                    RET = c(0.005, -0.005, -0.001, 0.05, -0.002, 0.0031)),
                   .Names = c("PERMNO", "SHROUT", "PRC", "RET"), 
               class = c("data.table", "data.frame"), row.names = c(NA, -6L))

setkey(a,PERMNO)
Run Code Online (Sandbox Code Playgroud)

我需要执行一些计算PERMNO,但在这个示例中,我们假设它们只有2:

mktcap <- a[ , tail(SHROUT,n=1)*tail(PRC,n=1),by=PERMNO]
sqret <- a[, sum(RET^2),by=PERMNO]
Run Code Online (Sandbox Code Playgroud)

哪个产生

> mktcap
     PERMNO       V1
[1,]  10006 8740.375
[2,]  10015  500.500
[3,]  20000  800.000

> …
Run Code Online (Sandbox Code Playgroud)

r data.table

6
推荐指数
1
解决办法
643
查看次数

使用线性回归对data.table进行预测

重新发布到这篇文章,我创建了一个在data.table包上进行线性回归的例子,如下所示:

## rm(list=ls()) # anti-social
library(data.table)
set.seed(1011)
DT = data.table(group=c("b","b","b","a","a","a"),
                v1=rnorm(6),v2=rnorm(6), y=rnorm(6))
setkey(DT, group)
ans <- DT[,as.list(coef(lm(y~v1+v2))), by = group]
Run Code Online (Sandbox Code Playgroud)

返回,

   group (Intercept)        v1        v2
1:     a    1.374942 -2.151953 -1.355995
2:     b   -2.292529  3.029726 -9.894993
Run Code Online (Sandbox Code Playgroud)

我能够获得lm函数的系数.

我的问题是: 我们如何直接用于predict新的观察?如果我们有新的观察结果如下:

new <- data.table(group=c("b","b","b","a","a","a"),v1=rnorm(6),v2=rnorm(6))
Run Code Online (Sandbox Code Playgroud)

我试过了:

setkey(new, group)
DT[,predict(lm(y~v1+v2), new), by = group]
Run Code Online (Sandbox Code Playgroud)

但它给我带来了奇怪的答案:

    group         V1
 1:     a  -2.525502
 2:     a   3.319445
 3:     a   4.340253
 4:     a   3.512047
 5:     a   2.928245
 6:     a   1.368679 …
Run Code Online (Sandbox Code Playgroud)

r predict lm data.table

5
推荐指数
1
解决办法
2499
查看次数

使用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)

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

r data.table

4
推荐指数
1
解决办法
4160
查看次数

标签 统计

data.table ×4

r ×4

grouping ×1

list ×1

lm ×1

predict ×1

regression ×1