将几个回归表合并为一个用于xtable中的Swetable和R中的Sweave

时间:2010-12-03 16:29:46

标签: r sweave xtable

xtable中的

Sweave效果很棒,但每次回归都会有一个表格。您也可以将数据框作为数据框,因此我手动rbindpaste将结果导入数据框,但这似乎不太可扩展。

是否有更自动/更强大的解决方案,其工作方式与xtable类似,但在多个lm对象上?我在纸张/书籍中看到的所有表格都是手动生成的吗?我的janky代码是否有更好的解决方案,可生成数据框以提供给xtable

    library(reshape2)

    data <- data.frame(matrix(rnorm(50), 10, 5))
    names(data) <- letters[1:5]
    l.raw <- list()
    l.raw[["a"]] <- lm(a ~ d + e, data=data)
    l.raw[["b"]] <- lm(b ~ d + e, data=data)
    l.raw[["c"]] <- lm(c ~ d + e, data=data)

    form.table.from.lm <- function(l.raw) {
    summ <- list()

    for (i in names(l.raw)) {
        temp <- coef(summary(l.raw[[i]]))
        summ[[i]] <- data.frame(param=rownames(temp), test=i, temp)
    }

    df.res <- do.call("rbind", summ)
    df.res <- transform(df.res, t.value = paste("(", signif(t.value), ")", sep=""), Estimate = signif(Estimate))
    df.res.long <- melt(df.res, id.vars=c("test", "param"))
    df.res.wide <- dcast(df.res.long, test + variable ~ param)

    temp <- subset(df.res.wide, variable %in% c("Estimate", "t.value"))
    df.res <- temp[, -2]
    df.res[, 1] <- as.vector(rbind(names(l.raw), ""))
    colnames(df.res)[1] <- "regressor"
    return(df.res)
}

产生数据框:

   regressor (Intercept)          d          e
1          a    0.393996  -0.666721   0.159508
2             (0.573926) (0.422125) (0.526446)
5          b    0.611077  0.0288942   -0.70033
6              (0.32696)  (0.24048) (0.299911)
9          c   -0.101033  -0.287821    0.14581
10            (0.203193) (0.149449) (0.186383)

考虑到R的精彩绘图包,我觉得google和rseek正在向我隐瞒一些东西。

6 个答案:

答案 0 :(得分:5)

前段时间我偶然发现了保罗·约翰逊的outreg功能。

您可以直接将outreg应用于lm对象并合并多个 lm输出到一个漂亮的乳胶表中。

在这里您可以找到一个示例.pdf

outreg examples

和函数的代码

outreg code

保罗·约翰逊的一般主页

Paul Johnson

答案 1 :(得分:4)

您的代码在dcast调用中为我丢失了错误,因此我只是读取您提供的输出并调整了匹配的colnames。该代码在通过我的LaTex处理器后,在我的系统上生成格式良好的pdf文件。 (如果您已经使用Sweave,我假设您有适当的LaTeX安装。)

require(Hmisc)
latex(df.res)

当我在lme4包中传递帮助(lmList)中的示例时,latex()也会产生一个相当大且不显眼的4页显示,需要进行一些调整以扩大我的机器上的页面,但也可能值得检查。 / p>

require(lme4)
(fm1 <- lmList(Reaction ~ Days | Subject, sleepstudy))
latex(fm1)

答案 2 :(得分:1)

接受的答案中的outreg链接现在已被破坏。新链接是

http://pj.freefaculty.org/stat/ps706/outreg-worked.R

父文件夹中还附带PDF文件。

答案 3 :(得分:1)

查看CRAN中的apsrtable表格包创建美国政治科学评论样式表,看起来大致与我想要的一样。它需要lm和glm模型以及一些软件包中的一些非线性模型。它还有一系列用于在特定级别生成星星的选项。有a nice vingette,它会生成LaTeX和HTML表格,然后可以将它们添加到OpenOffice / Word。

我已经使用它已经有2到3年了,它仍然在积极开发中。我看起来很快,但它似乎比outreg更加坚固/特色。

答案 4 :(得分:1)

我在CRANberries看到的另一个选项让我想起了这个问题:

texreg - 看一下vingette,它似乎在R中生成相当标准的回归表并且在编写时非常活跃的开发中做得非常好。

更新:我一直在玩其中一些,我认为随着时间的推移, texreg 已经成为这个领域的领导者成熟,稳定和特色。对我来说最重要的是,它可以与各种模型配合使用,并为像lme4()模型构建星星这样的非常方便的东西,例如bootstrap标准错误 - 这个包本身有点棘手(有充分理由)但是审稿人和期刊经常要求。我强烈建议使用texreg。它似乎得到积极维护。

答案 5 :(得分:0)

stargazer包是HTML,LaTeX或ASCII表并排使用的另一种选择。另请参阅我的answerTable of multiple lm() models using apsrtable in Rmarkdown,其中包括屏幕截图。