我需要分析 data.table group_by 回归的一系列 lm() 输出:
library(data.table)
x <- c(1:5,66:70,101:110)
y <- 31:50
g <- c( 1,1,1,1,1,1,1,1,1,1
,2,2,2,2,2,2,2,2,2,2)
dt <- data.table(x,y,g)
mod <- dt[ , .(model = .(lm(x~y, .SD)))
, by = g]
mod
每组都有正确的模型 g
。现在我想为每个组创建一个包含残差向量的列g
:
mod[, resi := residuals(model)
, by = g]
看起来运行正确,但 nem 列
resi
未创建:
> mod
g model
<num> <list>
1: 1 <lm[12]>
2: 2 <lm[12]>
为什么这不起作用?
问题是您将残差()应用于
list(model)
而不是直接应用于模型。
mod[, resi := .(list(residuals(model[[1]])))
, by = g]
# Or
mod[, resi := .(lapply(model, residuals))]
# g model resi
# <num> <list> <list>
# 1: 1 <lm[12]> 10.909091, 1.818182, -7.272727,-16.363636,-25.454545, 25.454545,...
# 2: 2 <lm[12]> -1.471465e-14, 6.482041e-15, 5.472051e-15, 4.101520e-15, 2.842011e-15, 1.526991e-15,...