sammerk
sammerk

Reputation: 1173

Regression tables in Markdown format (for flexible use in R Markdown v2)

The new version of R Markdown is based on pandoc, so you can easyly change the output format.

My Problem is to get markdown formated tables from e.g. regression models, because LATEX and HTML tables do not survive the pandoc conversion.

I know packages that generate LATEX/HTML output from a variety of models (stargazer, texreg, asprtable...) and I'm aware of functions/packages, that generate markdown tables from data frames and matrices but not from other objects.

Any suggestions?

Upvotes: 19

Views: 39501

Answers (6)

RRuiz
RRuiz

Reputation: 2228

Here what I did some hours ago:

  1. Some data:

    ```{r}
    lm1 <- lm(qsec ~ hp, mtcars)
    lm2 <- lm(qsec ~ wt, mtcars)
    ```
    
  2. We use the package sjPlot

    ```{r}
    library(sjPlot)
    tab_model(lm1,lm2, file="output.html")# You have to save the table in html format.
    ```
    

    The next part needs to be outside the chunk in markdown:

htmltools::includeHTML("output.html")

enter image description here

Upvotes: 5

cderv
cderv

Reputation: 6542

The huxtable package can now print nicely formatted regression table. See the documentaton https://hughjonesd.github.io/huxtable/huxreg.html

Upvotes: 2

John J.
John J.

Reputation: 1716

I'm updating this with an example that uses the popular (and newer) knitr and kableExtra packages.

library(knitr)
library(xtable)

lm(hp ~ wt, mtcars) %>%
summary() %>%
xtable() %>%
kable()

Now you can access all the cool table-formatting features available in Hao Zhu's kableExtra package.

Upvotes: 3

HoneyBuddha
HoneyBuddha

Reputation: 798

Another way to use sjPlot (great library for easy presentation of regression output) is to use the no.output feature:

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

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

Upvotes: 2

daroczig
daroczig

Reputation: 28612

My above comment in more details:

  1. Define a few models for reproducible example:

    lm0 <- lm(hp ~ wt, mtcars)
    lm1 <- lm(qsec ~ hp, mtcars)
    lm2 <- lm(qsec ~ wt, mtcars)
    
  2. Create a comparative table from those:

    require(memisc)
    mtable123 <- mtable('Model 1' = lm0,
                'Model 2' = lm1,
                'Model 3' = lm2,
                summary.stats = c('R-squared','F','p','N'))
    
  3. Render markdown table with a simple call to pander:

    pander(mtable123)
    
  4. Enjoy the result:

    --------------------------------------------------
         &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    
    --------------------------------------------------
    

Thanks for Roman Tsegelskyi for implementing this nice feature in GSoC 2014.

Upvotes: 18

Koundy
Koundy

Reputation: 5503

Just generate the HTML or LATEX tables. All you have to do is to just add results='asis' to the code chunk. It will leave the output as it is.

For example this code using xtable works for me.

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

Upvotes: 6

Related Questions