关于这个帖子,我创建了一个使用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]
返回值,
group (Intercept) v1 v2
1: a 1.374942 -2.151953 -1.355995
2: b -2.292529 3.029726 -9.894993
我可以获得
lm
函数的系数。我的问题是:如何直接使用
predict
来预测新观测值?如果我们有以下新观测值:new <- data.table(group=c("b","b","b","a","a","a"),v1=rnorm(6),v2=rnorm(6))
我已经尝试过:
setkey(new, group)
DT[,predict(lm(y~v1+v2), new), by = group]
但它却给我返回了奇怪的答案:
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
7: b -1.835744
8: b -3.465325
9: b 19.984160
10: b -14.588933
11: b 11.280766
12: b -1.132324
谢谢你。
.BY
对我来说是新的。 - thelatemail.BY
的地方。 - mnel.BY
在data.table
的帮助文档 (?data.table
) 中有描述。.BY
是一个包含按照变量分组的值的列表。这意味着它可以用于与其他键控数据表连接,以选择与当前BY
分组匹配的行。 - mnel