Регрессионные таблицы в формате Markdown (для гибкого использования в R Markdown v2)

Новая версия R Markdown основана на pandoc, поэтому вы можете легко изменить формат вывода.

Моя проблема состоит в том, чтобы получить таблицы с разбивкой по меткам, например. регрессионные модели, поскольку таблицы LATEX и HTML не выдерживают преобразования pandoc.

Я знаю пакеты, которые генерируют LATEX/HTML вывод из множества моделей (stargazer, texreg, asprtable...), и я знаю о функциях/пакетах, которые генерируют таблицы разметки из фреймов данных и матриц, но не из других объекты.

Любые предложения?

Ответ 1

Мой выше комментарий более подробно:

  • Определите несколько моделей для воспроизводимого примера:

    lm0 <- lm(hp ~ wt, mtcars)
    lm1 <- lm(qsec ~ hp, mtcars)
    lm2 <- lm(qsec ~ wt, mtcars)
    
  • Создайте сравнительную таблицу из них:

    require(memisc)
    mtable123 <- mtable('Model 1' = lm0,
                'Model 2' = lm1,
                'Model 3' = lm2,
                summary.stats = c('R-squared','F','p','N'))
    
  • Отметьте таблицу разметки с простым вызовом pander:

    pander(mtable123)
    
  • Наслаждайтесь результатом:

    --------------------------------------------------
         &nbsp;        Model 1    Model 2    Model 3  
    ----------------- ---------- ---------- ----------
     **(Intercept)**   -1.821\   20.556***\ 18.875***\
                       (32.325)   (0.542)    (1.103)  
    
         **wt**       46.160***\     \       -0.319\  
                       (9.625)               (0.328)  
    
         **hp**           \      -0.018***\     \     
                                  (0.003)             
    
      **R-squared**     0.434      0.502      0.031   
    
          **F**         22.999     30.190     0.945   
    
          **p**         0.000      0.000      0.339   
    
          **N**           32         32         32    
    --------------------------------------------------
    

Спасибо за Роман Цегельский за реализацию этой приятной функции в GSoC 2014.

Ответ 2

Просто создайте таблицы HTML или LATEX. Все, что вам нужно сделать, это просто добавить результаты = 'asis' в кусок кода. Он оставит выход как есть.

Например, этот код, использующий xtable, работает для меня.

```{r,results='asis'}
x<-rnorm(100)
y<-rnorm(100)
lm <- lm(y~x)
library(xtable)
print(xtable(summary(lm)),type='html')
```

Ответ 3

Вот что я сделал несколько часов назад:

  • Некоторые данные:

    lm1 <- lm(qsec ~ hp, mtcars)
    lm2 <- lm(qsec ~ wt, mtcars)
    
  • Мы используем пакет sjPlot

    ```{r}
    library(sjPlot)
    sjt.lm(lm1,lm2, file="output.html")# You have to save the table in html format.
    htmltools::includeHTML("output.html")# Finally you can call it from markdown
    ```
    

введите описание изображения здесь

Ответ 4

Еще один способ использования sjPlot (отличная библиотека для простой презентации регрессионного вывода) - использовать функцию no.output:

     library(sjmisc)
     library(sjPlot)
     library(magrittr)

     lm(qsec ~ wt, mtcars) %>% 
       sjt.lm(no.output = TRUE, show.se = TRUE) %>% 
       return() %>% .[["knitr"]] %>% asis_output