【问题标题】:Exporting R regression summary for publishable paper导出可发表论文的 R 回归摘要
【发布时间】:2015-05-10 04:34:28
【问题描述】:

我在 R 中有多个回归模型,我想以可以包含在出版物中的漂亮表格格式对其进行总结。我已经准备好所有结果,但找不到导出它们的方法,而且手动执行此操作效率不高,因为我需要大约 20 个表。

所以,我的模型之一是:

felm1=felm(ROA~BC+size+sizesq+age | stateyeard+industryyeard, data=data)

我在 R 中得到了想要的摘要。

但是,我希望我的论文只在表格中包含以下内容,括号中带有 t 统计量的估计值以及显着性代码(*、 等)。

有没有办法创建包含上述内容的任何类型的表? Lyx、excel、word、.rft,什么都行。

更好的是,我拥有的另一个模型是(一些变量不同):

felm2=felm(ROA~BC+BCHHI+size+sizesq+age | stateyeard+industryyeard, data=data)

我能否将两个回归的摘要汇总在一个表中(其中相同的变量将位于同一行,而其他变量将产生空单元格)?

在此先感谢您,如果您能提供任何帮助,我将不胜感激。

这是一个可重现的例子:

 x<-rnorm(1:20)

 y<-(1:20)/10+x

 summary(lm(y~x))



   Coefficients:
            Estimate Std. Error t value Pr(>|t|)    

(Itercept)  1.0539     0.1368   7.702 4.19e-07 ***

  x         1.0257     0.1156   8.869 5.48e-08 ***

这是 R 中的结果。我希望表格中的结果看起来像

 (Itercept)  1.0539*** (7.702)
      X      1.0257*** (8.869)

这可能吗?

【问题讨论】:

  • 如果您在reproducible example 中包含一些示例输入数据和所需的输出,将会有所帮助。明确flem() 函数圆顶的封装形式。 LaTeX 输出可以接受吗?
  • 很遗憾,我是新手,无法发布图片。但我认为一般回归的答案就足够了。所以 summary(fittedmodel) 返回估计值,st。错误等,但我只想导出估计值、括号中的 t 统计量以及以星数表示的重要性。我正在使用包'lfe',但为了简单起见,我们假设它是一个常规的 lm 回归。我对Latex不熟悉,但它和lyx不相似吗?
  • LyX 是 LaTeX 的前端。您可以在其中使用 LaTeX 标记。
  • 好的,谢谢。那么你知道如何将它导出到 LaTeX 吗?
  • 如果你想制作一张桌子,是否真的值得努力自定义默认的行为,如果你只是手工制作桌子会不会更容易?

标签: r


【解决方案1】:

Broom 包非常适合制作适合导出的回归表。然后可以将结果导出到 csv 以使用 Excel 进行启动,或者可以使用 Rmarkdown 和 knitr 的 kable 函数来制作 Word 文档(或乳胶)。

require(broom) # for tidy()
require(knitr) # for kable()

x<-rnorm(1:20)

y<-(1:20)/10+x

model <- lm(y~x)
out <- tidy(model)
out
        term estimate std.error statistic      p.value
1 (Intercept) 1.036583 0.1390777  7.453261 6.615701e-07
2           x 1.055189 0.1329951  7.934044 2.756835e-07

kable(out)


|term        | estimate| std.error| statistic| p.value|
|:-----------|--------:|---------:|---------:|-------:|
|(Intercept) | 1.036583| 0.1390777|  7.453261|   7e-07|
|x           | 1.055189| 0.1329951|  7.934044|   3e-07|

我应该提到,我现在使用出色的 pixiedust 来导出回归结果,因为它可以更好地控制输出,允许用户在 R 中做更多的事情,而在任何其他包中做更少的事情。

see the vignette on Cran

library(dplyr) # for pipe (%>%) command
library(pixiedust)

dust(model) %>% 
      sprinkle(cols = c("estimate", "std.error", "statistic"), round = 2) %>%
      sprinkle(cols = "p.value", fn = quote(pvalString(value))) %>% 
      sprinkle_colnames("Term", "Coefficient", "SE", "T-statistic", 
                        "P-value")

         Term Coefficient   SE T-statistic P-value
1 (Intercept)        1.08 0.14        7.44 < 0.001
2           x        0.93 0.14        6.65 < 0.001

【讨论】:

    【解决方案2】:

    对于文本表,试试这个:

    x<-rnorm(1:20)
    y<-(1:20)/10+x
    result <- lm(y~x)
    
    library(stargazer)
    stargazer(result, type = "text")
    

    结果...

    ===============================================
                            Dependent variable:    
                        ---------------------------
                                     y             
    -----------------------------------------------
    x                            0.854***          
                                  (0.108)          
    
    Constant                     1.041***          
                                  (0.130)          
    
    -----------------------------------------------
    Observations                    20             
    R2                             0.777           
    Adjusted R2                    0.765           
    Residual Std. Error       0.579 (df = 18)      
    F Statistic           62.680*** (df = 1; 18)   
    ===============================================
    Note:               *p<0.1; **p<0.05; ***p<0.01
    

    对于多元回归,只需这样做

    stargazer(result, result, type = "text")
    

    而且,只是为了达到所要求的结果。

    addStars <- function(coeffs) {
      fb <- format(coeffs[, 1], digits = 4)
      s <- cut(coeffs[, 4],
               breaks = c(-1, 0.01, 0.05, 0.1, 1),
               labels = c("***", "**", "*", ""))
      sb <- paste0(fb, s)
    }
    addPar <- function(coeffs) {
      se <- format(coeffs[, 2], digits = 3)
      pse <- paste0("(", se, ")")
    }
    textTable <- function(result){
      coeffs <- result$coefficients
      lab <- rownames(coeffs)
      sb <- addStars(coeffs)
      pse <- addPar(coeffs)
      out <- cbind(lab,sb, pse)
      colnames(out) <- NULL
      out
    }
    print(textTable(result), quote = FALSE)
    

    一旦你有一个文本表,你就可以使用xtable::xtableHmisc::latexGmisc::htmltable 等。有人在 cmets 中发布了链接。 :)

    【讨论】:

    • 非常感谢,这就是我要找的。很抱歉给大家带来了困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多