将lm摘要中的R平方另存为数据框

时间:2019-04-02 11:04:25

标签: r regression lm summary

我想将lm模型的结果保存到数据框中。我生成了一个空的数据框(Startframe),要在其中保存结果。

在这种情况下,包含数据的数据框称为testdata。在第一列中包含日期,然后在其余列中包含几个站点。

到目前为止,此代码正在努力获取估算值Std。误差,t值和Pr(> | t |)。

for(i in 2:ncol(testdata)) {
  x <- testdata[,1]
  y <- testdata[,i]
  mod <- lm(y ~ x)
  summary(mod)

  Startframe[i,] <- c(i,
                 summary(mod)[['coefficients']]['(Intercept)','Estimate'],
                 summary(mod)[['coefficients']]['x','Estimate'],
                 summary(mod)[['coefficients']]['x','Std. Error'],
                 summary(mod)[['coefficients']]['x','t value'],
                 summary(mod)[['coefficients']]['x','Pr(>|t|)'])

但是我怎么也可以提取r.squared?

我试图将summary(mod)[['r.squared']]添加到列表中,但它给了我错误的数字。

我知道str(summary(mod))给了我一个概述,但是我不知道如何将其添加到我的循环中。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在不同数据集上使用相同模型的好方法是使用tidyverse软件包使用broom方法。

在此示例中,我使用diamonds数据集来测试克拉和深度如何影响不同切工的钻石价格。

require(tidyverse)
require(broom)

diamonds %>% 
  nest(-cut) %>% 
  mutate(model = purrr::map(data, function(x) { 
    lm(price ~ carat + depth, data = x)}), 
    values = purrr::map(model, glance), 
    r.squared = purrr::map_dbl(values, "r.squared"), 
    pvalue = purrr::map_dbl(values, "p.value")) %>% 
  select(-data, -model, -values)

 cut       r.squared pvalue
  <ord>         <dbl>  <dbl>
1 Ideal         0.867      0
2 Premium       0.856      0
3 Good          0.851      0
4 Very Good     0.859      0
5 Fair          0.746      0