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