【问题标题】:extract summary from matrix lm object从矩阵 lm 对象中提取摘要
【发布时间】:2015-12-31 18:56:00
【问题描述】:

我想从 lm 对象的摘要部分获取系数,但我输入了一个矩阵并且摘要部分为空。这是我的代码:

n=12
y=rnorm(n,23,1)
x1=rnorm(n,23,1)
x2=rnorm(n,15.5,1)
lm1=lm(y~x1+x2)
n2=10
b0=4;b1=2;b2=3
sim1<-function(){
  randmat=matrix(rnorm(n*n2,0,8),n,n2)
  x1mat=matrix(x1,n,n2)
  x2mat=matrix(x2,n,n2)
  return(b0+b1*x1mat+b2*x2mat+randmat)
}
sim1=sim1()
lm1=lm(sim1~x1+x2)
c2=summary(lm1)$coefficients

> c2
NULL

我想要的是这个(但重复):

lm2=lm(sim1[,1]~x1+x2)
summary(lm2)$coefficients

有人知道如何提取这些吗?谢谢

-瑞克

【问题讨论】:

  • 试试do.call("c",apply(sim1, 2, function(x) list(summary(lm(x~x1+x2))$coefficients))

标签: r matrix statistics linear-regression lm


【解决方案1】:

另一种方法是在代码的以下行结束后执行以下操作。

lm1=lm(sim1~x1+x2) #this runs 10 models

所有的系数都将存储在summary(lm1) 列表中,如Response Y1Response Y10(即ncol(sim1) 一样多的10 个模型)。

为了从每个模型中获取系数,您可以这样做:

all_coef <- lapply( paste0('Response Y', 1:ncol(sim1)),  
                    function(x) summary(lm1)[[x]]$coefficients)

或者正如@Rik 在评论中提到的那样,如果在 lapply 循环中不重复 summary(lm1) 会更快,以防你有一个大矩阵。

the_sum  <- summary(lm1)
all_coef <- lapply( paste0('Response Y', 1:ncol(sim1)),  
                    function(x) the_sum[[x]]$coefficients)

输出将是:

> all_coef
[[1]]
              Estimate Std. Error   t value  Pr(>|t|)
(Intercept) 135.242552  80.136427  1.687654 0.1257496
x1           -4.777486   2.953534 -1.617549 0.1402142
x2            4.464435   3.891641  1.147186 0.2808857

[[2]]
               Estimate Std. Error     t value  Pr(>|t|)
(Intercept) 119.1772823 111.603046  1.06786765 0.3133851
x1           -0.1376013   4.113277 -0.03345297 0.9740435
x2           -1.2946027   5.419744 -0.23886785 0.8165585

[[3]]
              Estimate Std. Error    t value  Pr(>|t|)
(Intercept) -51.329923  63.495202 -0.8084063 0.4397018
x1            3.721227   2.340199  1.5901325 0.1462682
x2            3.793981   3.083498  1.2304147 0.2497304

[[4]]
               Estimate Std. Error     t value   Pr(>|t|)
(Intercept) 124.8606014  57.669842  2.16509352 0.05857967
x1           -1.2517705   2.125498 -0.58893044 0.57039201
x2           -0.1159803   2.800603 -0.04141263 0.96787111

#...and so on until 10

要获取模型的各个系数,只需执行以下操作:

all_coef[[<the_number_you_want>]]

【讨论】:

  • 我明白了,我正在索引 summary(lm1[[x]])$coefficients.不知道为什么我无法弄清楚...谢谢
  • @Rik Np,有时我们都需要一些帮助,即使是我们知道的事情(包括我自己)。很高兴我能帮上忙:)
  • n大时代码运行缓慢,最好把summary(lm1)放在lapply之外...
  • @Rik 哦,当然。我不知道你的矩阵有多大,但是在 lapply 之外运行 summary(lm1) 肯定会快得多。
猜你喜欢
  • 1970-01-01
  • 2020-09-06
  • 2015-05-24
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 2012-06-21
相关资源
最近更新 更多