从矩阵 lm 对象中提取摘要
extract summary from matrix lm object
我想从 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
有谁知道如何提取这些?谢谢
-里克
另一种方法是在您的以下代码行结束后执行以下操作。
lm1=lm(sim1~x1+x2) #this runs 10 models
所有系数将存储在列表 summary(lm1)
中,作为 Response Y1
... 到 Response Y10
(即 10 个模型多达 ncol(sim1)
)。
为了从每个模型中获取系数,您可以这样做:
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>]]
我想从 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
有谁知道如何提取这些?谢谢
-里克
另一种方法是在您的以下代码行结束后执行以下操作。
lm1=lm(sim1~x1+x2) #this runs 10 models
所有系数将存储在列表 summary(lm1)
中,作为 Response Y1
... 到 Response Y10
(即 10 个模型多达 ncol(sim1)
)。
为了从每个模型中获取系数,您可以这样做:
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>]]