Ferramentas para criação de tabelas LaTex a partir do R

Sair do ambiente R para exportar resultados e tabelas nem sempre é uma tarefa fácil, em especial quando deseja-se exportar estes resultados para o ambiente LaTex. O motivo é simples de ser entendido, afinal nem nem sempre os resultados possuem uma estrutura simples e como acontece, as vezes este é demasiadamente grande. Neste post, vamos discutir algumas soluções para tornar esta tarefa mais simples e é claro, mais divertida. Além disso, vamos ilustrar exemplos da utilização de tais pacotes.


Provavelmente é o pacote mais utilizado para transformar objetos R em objetos LaTex ou HTML. Sua utilização é extremamente simples e o pacote possui basicamente uma única função, que é a função xtable e claramente, esta possui muitos argumentos. Consegue transformar dataframes, matrizes e suporta pelo menos as saídas das seguintes funções: lm, aov, anova, glm, prcomp e ts.

# xtable.R
xtable(mtcars) # imprimindo um dataframe no formato LaTex
ajuste = lm(hp~wt, data=mtcars)
ajuste_latex = xtable(ajuste)
print(ajuste_latex, type='latex')

Uma descrição melhor do pacote pode ser achada aqui. A tabela a seguir exibe o output quando type='html'.
Estimate Std. Error t value Pr(&gt |t|)
(Intercept) -1.8209 32.3246 -0.06 0.9555
wt 46.1601 9.6253 4.80 0.0000


Este é um pacote que basicamente transforma saídas de modelos em objetos LaTex, HTML, markdown e doc. E mais do que isso, ele é capaz de gerar outputs com comparações entre modelos. Suporta cerca de 52 tipos diferentes de objetos, dentre eles lm, glm, lme, survreg, logit, weibreg e multinom. 

Exemplo de utilização
# texreg.R
m1 = lm(hp~wt, data=mtcars)
m2 = lm(hp~wt-1, data=mtcars) # Sem intercepto
texreg(list(m1, m2))

Uma quantidade arbitrária de modelos pode ser passado para a função texreg, desde que estejam dentro de uma lista. Caso selecione que o output seja um código HTML, o seguinte resultado será gerado. Uma descrição melhor do pacote pode ser encontrada aqui.


Statistical models
Model 1 Model 2
(Intercept) -1.82
(32.32)
wt 46.16*** 45.64***
(9.63) (2.72)
R2 0.43 0.90
Adj. R2 0.42 0.90
Num. obs. 32 32
***p < 0.001, **p < 0.01, *p < 0.05

Diferentemente dos pacotes citados anteriormente, este não foi feito com o único propósito de gerar tabelas em formato LaTex e html. Na verdade este pacote é um conjunto de funções úteis, desde cálculo de tamanho de amostra até manipulação de strings, e é claro que nesse meio não poderia faltar uma função para gerar tabelas LaTex. Outra funcionalidade interessante é o suporte ao longtable e a grande flexibilidade fornecida pelo pacote. Para maiores detalhes, ?latex.

# Hmisc.R
latex(mtcars) # Vai gerar um arquivo no seu diretório de trabalho.
latexTabular(mtcars) # Imprime a tabela.
Pacote criado com o objetivo de criar e exibir tabelas complexas com informações estatísticas. Na verdade o pacote em si não gera nenhum tipo de código LaTex, mas sim ajuda a criar tabelas com um design agradável. Para a criação do código LaTex, é necessário utilizar um dos outros pacotes descritos aqui.

# tables.R
formula = (as.factor(gear) + 1) ~ (n = 1) + (hp + wt) * (mean + sd)
tabular(formula, data = mtcars)

Apesar de inicialmente a sintaxe parecer estranha, com o tempo dá para encará-la com mais naturalidade e parece que em parte foi influenciada pelo SAS PROC TABULATE. A criação das tabelas é dada por meio de fórmulas, por exemplo, aquelas mesmas fórmulas que são utilizadas em um modelo de regressão e então a função tabular parseia esta fórmula e cria a tabela desejada. 

Agora é hora de vermos como a sintaxe funciona. A primeira coisa que devemos saber é: O que está antes do ~ serão as linhas e o que estiver depois  serão as colunas.

Para as linhas, estamos transformando a variável gears em um fator(deseja-se calcular média e desvio-padrão para cada quantidade de marchas do carro) e 1 nada mais significa que calcular as estatísticas para todas classes de gear , e nestes casos, o sinal de + tem o significado de concatenação.

Com as colunas a coisa não muda muito, e assim como acontecia com as linhas,  o sinal de + continua significando concatenação. A primeira coluna é correspondente a n=1 e uma vez que nenhuma outra estatística foi atribuída, simplesmente irá retornar o número de casos de cada uma das  classes de gear. Para a segunda coluna, estamos falando que para as variáveis hp e wt, terão de ser aplicadas as funções mean e sd. Para cada classe de gear, calcule o número de observações, média e variância para as variáveis hp e wt. Aplicando a função que latex do pacote Hmisc o resultado será como segue abaixo. Uma descrição melhor do pacote pode ser encontrada aqui.

hp wt
as.factor(gear) n mean sd mean sd
3
15
176.1
47.69
3.893
0.8330
4
12
89.5
25.89
2.617
0.6327
5
5
195.6
102.83
2.633
0.8189
All
32
146.7
68.56
3.217
0.9785


Assim como o tables, este é um pacote que fornece facilidades na criação de tabelas com resultados de estatística descritiva.  

# reporttools.R
variaveis = mtcars[, c('hp', 'wt')]
grupos = factor(mtcars$gear)
tableContinuous(vars=variaveis, group=grupos, pval=none )

Por padrão, ele calcula uma série de estatísticas descritivas dependendo da função que você usa(tableContinuous, tableNominal ou tableDate) e caso queira calcular apenas uma ou outra estatística basta passar na chamada da função uma lista em que cada nó possui o nome da função a ser aplicada ao subconjunto de dados. E a saída é como algo mostrado na imagem abaixo.


Como podemos ver, a saída é algo bem parecido com a saída do tables, exceto o fato de a sintaxe aqui ser algo muito mais simples de ser entendida e reproduzida. Simplesmente são passadas as variáveis que se deseja obter as estatísticas, os grupos pelos quais serão estratificadas aquelas variáveis e a função a ser aplicada em cada um destes extratos. Uma descrição melhor do pacote pode ser encontrada aqui.


Introduzimos aqui uma série de pacotes certamente irão auxiliar na exportação dos resultados R para seus documentos LaTex e dependendo da situação, utilizar um ou outro pode ser uma experiência mais satisfatória. Se você tem um modelo de regressão, por exemplo, e quer inserí-lo em seu documento LaTex, o pacote pode ser uma ótima opção, ainda que o xtable seja muito prático. E é claro, as opções não se limitam as descritas aqui.

Um comentário:

  1. Olá pessoal, parabéns pelo blog! Cheguei aqui pela dica do Cinelli, e valeu muito a pena. Parabéns mesmo! Uma pequena sugestão pra esse post: o pacote stargazer também é muito bom e poderia estar aqui. Ele faz diversos tipos de tabelas, exporta para ascii or LaTeX e tudo mais. Segue o link: http://cran.r-project.org/web/packages/stargazer/index.html

    Abração!

    ResponderExcluir