将线性模型系数提取到循环内的矢量中

时间:2014-10-23 15:09:10

标签: r loops lm

我试图使用R中的循环创建200个线性模型系数的样本。作为最终结果,我想要一个包含系数的向量。

for (i in 1:200) {        
  smpl_5 <- population[sample(1:1000, 5), ]
  model_5 <- summary(lm(y~x, data=smpl_5))         
}

我可以很容易地提取系数,但是我无法将它们输出到循环内的向量中。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您愿意,可以使用replicate。在您的情况下,因为所有模型的系数数量相同,它将返回一个数组,如下例所示:

d <- data.frame(x=runif(1000))
d$y <- d$x * 0.123 + rnorm(1000, 0, 0.01)
coefs <- replicate(3, {
  xy <- d[sample(nrow(d), 100), ]
  coef(summary(lm(y~x, data=xy)))
})

coefs

# , , 1
# 
#                Estimate  Std. Error    t value     Pr(>|t|)
# (Intercept) 0.001361961 0.002091297  0.6512516 5.164083e-01
# x           0.121142447 0.003624717 33.4212114 2.235307e-55
# 
# , , 2
# 
#                Estimate  Std. Error  t value     Pr(>|t|)
# (Intercept) 0.003213314 0.001967050  1.63357 1.055579e-01
# x           0.118026828 0.003332906 35.41259 1.182027e-57
# 
# , , 3
# 
#                Estimate  Std. Error   t value     Pr(>|t|)
# (Intercept) 0.003366678 0.001990226  1.691606 9.389883e-02
# x           0.119408470 0.003370190 35.430783 1.128070e-57

使用正常的数组索引访问特定元素,例如:

coefs[, , 1] # return the coefs for the first model

#                Estimate  Std. Error    t value     Pr(>|t|)
# (Intercept) 0.001361961 0.002091297  0.6512516 5.164083e-01
# x           0.121142447 0.003624717 33.4212114 2.235307e-55

因此,对于您的问题,您可以使用:

replicate(200, { 
  smpl_5 <- population[sample(1:1000, 5), ]
  coef(summary(lm(y~x, data=smpl_5))) 
})