如何在knitr中组合回归表

时间:2012-11-29 18:38:25

标签: r knitr texreg

我在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}

2 个答案:

答案 0 :(得分:4)

您对lm的第二次电话会覆盖之前的reg

?texreg说第一个参数可以是“list统计模型”,所以请尝试列出一个列表。

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

答案 1 :(得分: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以避免LaTeX文档的中间<{1}}和\usepackage{dcolumn} ,这是没有意义的(它们应该在改为序言。)