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

ubof19bj  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(68)

我需要分析data.table group_by regressions的一系列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]>

为什么这不起作用?

neskvpey

neskvpey1#

问题是你将residuals()应用于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,...

相关问题