R 使用线性回归对数据表进行预测

R 使用线性回归对数据表进行预测,r,data.table,lm,predict,R,Data.table,Lm,Predict,对此,我创建了一个示例,用于对数据进行线性回归 ## 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))

对此,我创建了一个示例,用于对数据进行线性回归

## 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]
new <- data.table(group=c("b","b","b","a","a","a"),v1=rnorm(6),v2=rnorm(6))
我能够获得
lm
函数的系数

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

## 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]
new <- data.table(group=c("b","b","b","a","a","a"),v1=rnorm(6),v2=rnorm(6))
但它给了我奇怪的答案:

    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
将非常有用。这里有两种可能性

a <- DT[,predict(lm(y ~ v1 + v2), new[.BY]), by = group]

b <- new[,predict(lm(y ~ v1 + v2, data = DT[.BY]), newdata=.SD),by = group]

美好的我知道这就是问题所在,我就是想不出如何解决它
.BY
对我来说是新的。@Late Mail-这是我第一次设法找到
的用法。BY
@mnel我对data.table是新的。我已经阅读了.BY,但仍然不知道它是如何工作的。您能解释一下吗?@newbie
.BY
数据表的帮助中有描述(
数据表
.BY
是包含BY变量值的列表。这意味着它可以用于与其他键控data.tables联接,以选择与当前
BY
分组匹配的行。Andrew Brooks在data.table特殊符号的用法中写道,包括.BY。对于那些想更好地理解这些方法的人来说,这是一本很好的读物。
identical(a,b)
# [1] TRUE
a
#   group         V1
#1:     a  -2.525502
#2:     a   3.319445
#3:     a   4.340253
#4:     b -14.588933
#5:     b  11.280766
#6:     b  -1.132324