从 data.table groupby 模型中恢复 lm() 结果

问题描述 投票:0回答:1

我需要分析 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]>

为什么这不起作用?

r data.table
1个回答
2
投票

问题是您将残差()应用于

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,...
© www.soinside.com 2019 - 2024. All rights reserved.