Объединение нескольких таблиц регрессии в одну для использования в xtable с помощью Sweave в R

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

Есть ли более автоматизированное/надежное решение, которое работает как 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 что-то скрывают от меня.


person Richard Herron    schedule 03.12.2010    source источник


Ответы (6)


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

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

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

примеры внешней регистрации

и код функции

код внешней регистрации

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

Пол Джонсон

person mropa    schedule 03.12.2010
comment
Спасибо! Это должно охватывать множество случаев, с которыми я сталкиваюсь. - person Richard Herron; 03.12.2010
comment
Для тех, кто увидит это сейчас (гораздо позже): похоже, Пол Джонсон теперь объединил некоторые из своих многочисленных R-фрагментов (включая outreg) в пакет под названием rockchalk. Документация: pj.freefaculty.org/R/rockchalk.pdf - person Pygmalion; 23.04.2013

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

require(Hmisc)
latex(df.res)

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

require(lme4)
(fm1 <- lmList(Reaction ~ Days | Subject, sleepstudy))
latex(fm1)
person IRTFM    schedule 03.12.2010
comment
Спасибо! Я не знал о lmList. Это действительно пригодится. Я повторно вставлю код выше. Это работает для меня, но похоже, что у Пола Джонсона есть код с некоторыми функциями, которые я ищу (ответ MRopa). - person Richard Herron; 03.12.2010
comment
Рад, что ты нашел ему такое применение. Проверка этих вариантов также расширила мои знания в этой области, поэтому я думаю, что должен проголосовать за этот вопрос, а? - person IRTFM; 03.12.2010

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

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

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

person Sam Swift    schedule 23.03.2011

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

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

person Benjamin Mako Hill    schedule 21.04.2011

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

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

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

person Benjamin Mako Hill    schedule 10.02.2013

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

person hplieninger    schedule 03.08.2018