【问题标题】:How to combine regression tables in knitr如何在knitr中组合回归表
【发布时间】:2012-11-29 18:38:24
【问题描述】:

我正在合并knitr 中的回归表。我尝试使用texreg,但没有成功。我还可以做些什么?谢谢。示例:

\documentclass{article}

\begin{document}

<<result='asis'>>=
  library(texreg)
  reg1 <- lm(Petal.Length ~ Petal.Width, data=iris)
  reg2 <- lm(Sepal.Length ~ Sepal.Width, data=iris)
  texreg(list(reg1,reg2))
@

\end{document}

【问题讨论】:

    标签: r knitr texreg


    【解决方案1】:

    您对 lm 的第二次调用会覆盖之前的 reg

    ?texreg 表示第一个参数可以是“统计模型的list”,因此请尝试列一个列表。

    texreg(list(lm(Petal.Length ~ Petal.Width, data=iris), 
                lm(Sepal.Length ~ Sepal.Width, data=iris)))
    

    【讨论】:

    • 另见?texreg的示例部分
    • 谢谢,我编辑了代码,但结果没有显示在表格中。
    • @Lin 注意它是results 而不是result;请仔细阅读文档:yihui.name/knitr/options
    【解决方案2】:

    我不确定这是否是 texreg 软件包的错误或功能;你应该和texreg的作者谈谈:

    >   library(texreg)
    Version:  1.15
    Date:     2012-11-13
    >   reg1 <- lm(Petal.Length ~ Petal.Width, data=iris)
    >   reg2 <- lm(Sepal.Length ~ Sepal.Width, data=iris)
    >   texreg(list(reg1,reg2))
    
    \usepackage{booktabs}
    \usepackage{dcolumn}
    
    \begin{table}
    \begin{center}
    \begin{tabular}{l D{.}{.}{3.5} @{}D{.}{.}{3.5} @{}}
    \toprule
                & \multicolumn{1}{c}{Model 1} & \multicolumn{1}{c}{Model 2} \\
    \midrule
    (Intercept) & 1.08^{***} & 6.53^{***} \\
                & (0.07)     & (0.48)     \\
    Petal.Width & 2.23^{***} &            \\
                & (0.05)     &            \\
    Sepal.Width &            & -0.22      \\
                &            & (0.16)     \\
    \midrule
    R$^2$       & 0.93       & 0.01       \\
    Adj. R$^2$  & 0.93       & 0.01       \\
    Num. obs.   & 150        & 150        \\
    \bottomrule
    \vspace{-2mm}\\
    \multicolumn{3}{l}{\textsuperscript{***}$p<0.01$, 
      \textsuperscript{**}$p<0.05$, 
      \textsuperscript{*}$p<0.1$}
    \end{tabular}
    \end{center}
    \caption{Statistical models}
    \label{table:coefficients}
    \end{table}
    [1] "\n\\usepackage{booktabs}\n\\usepackage{dcolumn}\n\n\\begin{table}\n\\begin{center}\n\\begin{tabular}{l D{.}{.}{3.5} @{}D{.}{.}{3.5} @{}}\n\\toprule\n            & \\multicolumn{1}{c}{Model 1} & \\multicolumn{1}{c}{Model 2} \\\\\n\\midrule\n(Intercept) & 1.08^{***} & 6.53^{***} \\\\\n            & (0.07)     & (0.48)     \\\\\nPetal.Width & 2.23^{***} &            \\\\\n            & (0.05)     &            \\\\\nSepal.Width &            & -0.22      \\\\\n            &            & (0.16)     \\\\\n\\midrule\nR$^2$       & 0.93       & 0.01       \\\\\nAdj. R$^2$  & 0.93       & 0.01       \\\\\nNum. obs.   & 150        & 150        \\\\\n\\bottomrule\n\\vspace{-2mm}\\\\\n\\multicolumn{3}{l}{\\textsuperscript{***}$p<0.01$, \n  \\textsuperscript{**}$p<0.05$, \n  \\textsuperscript{*}$p<0.1$}\n\\end{tabular}\n\\end{center}\n\\caption{Statistical models}\n\\label{table:coefficients}\n\\end{table}\n"
    

    问题是texreg()在控制台打印TeX表,同时返回一个可见字符向量(见上面最后一行),而我猜后者是不必要的,尽管您可以通过将invisible() 放在texreg() 周围来修复它,或者将其分配给变量以避免打印。这是一个完整的例子:

    \documentclass{article}
    \usepackage{booktabs}
    \usepackage{dcolumn}
    \begin{document}
    
    <<results='asis'>>=
    library(texreg)
    reg1 <- lm(Petal.Length ~ Petal.Width, data=iris)
    reg2 <- lm(Sepal.Length ~ Sepal.Width, data=iris)
    invisible(texreg(list(reg1,reg2), use.packages=FALSE))
    @
    
    \end{document}
    

    还请注意,您需要 use.packages=FALSE 以避免 \usepackage{dcolumn}\usepackage{booktabs} 在 LaTeX 文档的中间,这没有意义(它们应该在序言中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 2021-02-17
      • 2015-11-29
      • 1970-01-01
      相关资源
      最近更新 更多