gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:07:27 26 4
gpt4 key购买 nike

重新升级到此 Post ,我在 上创建了一个使用线性回归的示例。数据表包装如下:

## 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

谢谢

最佳答案

您正在预测整个 new每次设置数据。如果您只想预测每个组的新数据,则需要按组对“新数据”进行子集化。

这是一个实例,其中 .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]

两者都给出相同的结果
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

关于r - 使用线性回归对 data.table 进行预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23947245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com