Объединение нескольких таблиц регрессии в одну для использования в xtable с Sweave в R - PullRequest
10 голосов
/ 03 декабря 2010

xtable в Sweave работает потрясающе, но делает одну таблицу на регрессию. Вы также можете передать ему фрейм данных, так что я вручную rbind вставляю и paste результаты в фреймы данных, но это не кажется очень масштабируемым.

Существует ли более автоматизированное / надежное решение, которое работает как xtable, но для нескольких lm объектов? Все ли таблицы, которые я вижу в статьях / книгах, созданы вручную? Есть ли лучшее решение для моего нестандартного кода, который генерирует фрейм данных для подачи в 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 ]

5 голосов
/ 03 декабря 2010

Некоторое время назад я наткнулся на функцию outreg Пола Джонсона.

Вы можете напрямую применить outreg к вашему lm объекту и объединить несколько lm выводит в один красивый латексный стол.

Здесь вы найдете пример .pdf

примеры outreg

и код для функции

внешний код

общая домашняя страница Пола Джонсона

Пол Джонсон

4 голосов
/ 03 декабря 2010

Ваш код выдавал мне ошибки при вызове dcast, поэтому я просто прочитал в выводе, который вы предложили, и скорректировал имена. Этот код создает хорошо сформированный PDF-файл в моей системе после прохождения через мой процессор LaTex. (Я предполагаю, что у вас установлена ​​соответствующая установка LaTeX, если вы уже используете Sweave.)

require(Hmisc)
latex(df.res)

Когда я передал пример в справке (lmList) в пакете lme4, latex () также вывел довольно большой и неудобный 4-страничный дисплей, который потребовал бы некоторых настроек для расширения страницы на моем компьютере, но, возможно, также заслуживает изучения.

require(lme4)
(fm1 <- lmList(Reaction ~ Days | Subject, sleepstudy))
latex(fm1)
1 голос
/ 10 февраля 2013

Вот еще один вариант, который я видел, CRANberries , который напомнил мне об этом вопросе:

texreg - Глядя на vingette , кажется, что он действительно делает хорошую работу по генерации довольно стандартных таблиц регрессии в R и которая находится на стадии очень активной разработки на момент написания.

Обновление: Я играл с некоторыми из них, и я думаю, что со временем texreg стал лидером в этом пространстве с точки зрения его зрелости, стабильность и особенность. Для меня наиболее важно то, что он работает с различными моделями и прекрасно справляется с такими задачами, как стандартные ошибки начальной загрузки для построения звезд для моделей lme4() - то, что сам пакет делает немного сложным (по уважительным причинам), но что рецензенты и журналы часто требуют, тем не менее. Я настоятельно рекомендую использовать texreg. Вроде бы активно поддерживается.

1 голос
/ 21 апреля 2011

Ознакомьтесь с пакетом apsrtable в CRAN, который создает таблицы в стиле American Polit Science Review, которые выглядят примерно так, как я думаю, что вы хотите.Он берет модели lm и glm, а также некоторые нелинейные модели из некоторых пакетов.У этого также есть длинный ряд вариантов для того, чтобы произвести звезды на определенных уровнях и тому подобное.Есть хорошая виньетка , и она генерирует как таблицы LaTeX, так и таблицы HTML, которые затем можно добавить в OpenOffice / Word.

Я использую его уже 2-3 года, и он продолжает активно развиваться.Я только что выглядел быстро, но это выглядит гораздо более убедительно / содержательно, чем outreg.

1 голос
/ 23 марта 2011

Ссылка outreg в принятом ответе теперь не работает.Новая ссылка

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

В родительской папке также есть сопроводительный PDF.

0 голосов
/ 03 августа 2018

Пакет stargazer будет другой опцией для таблиц HTML, LaTeX или ASCII, бок о бок. См. Также мой ответ на Таблица нескольких моделей lm (), использующих apsrtable в Rmarkdown , которая включает в себя скриншот.

...