Prática estatística letrada - Sweave
Palavras-chave: LaTeX, R-Project.
Conteúdo
- Introdução
- Como usar e documentação
- Exemplo
- Automatização: uso de Makefiles
- Outras referências
- Páginas Relacionadas
Introdução
Durante um trabalho de análise estatística típico, estão envolvidas a etapa da análise dos dados, em um programa apropriado, seguida pela elaboração de um relatório com as principais conclusões obtidas na análise, geralmente em outro programa. O conjunto de comandos utilizados para realizar a análise é a descrição mais precisa do que foi feito, pois, junto com o conjunto de dados, permite a outras pessoas replicarem a análise conduzida. Como o resultado final do trabalho é entretanto o relatório, os dois são comumentes feitos em paralelo. Depois de muitas modificações nas duas etapas (no relatório e na análise), é possível que hajam incongruências entre os dois, o que complica o trabalho do responsável pela análise, que deve se preocupar com sua sincronização.
A partir desse problema surge o conceito da Prática estatística letrada (do inglês Literate statistical practice). Inspirada na Programação letrada e no conceito de arquivos noweb, a idéia dessa abordagem é a fusão da análise estatística e do relatório de análise em um arquivo só. Análise, dados e relatório estatístico são integrados em uma só etapa, o que resolve de imediato o problema da sincronização e dá muito mais flexibilidade ao analista.
O Sweave é uma implementação da Prática estatística letrada, que usa o R (ou S-Plus) como ferramenta de análise estatística, e o LaTeX como plataforma para elaboração do relatório. Assim podemos esquematicamente dizer que:
Os benefícios dessa interação são muitos, como a geração e inclusão automática de gráficos em relatórios, e a atualização da análise em questão de segundos, caso dados novos sejam modificados. Também é possível a re-utilização imediata de código e saber exatamente como foi feita cada análise no relatório, permitindo inclusive a reprodução passo a passo da análise.
Como usar e documentação
O Sweave vem por padrão em uma instalação normal do R, no pacote utils. Para utilizá-lo basta chamar a função Sweave(), especificando o nome do arquivo noweb (.Snw, ou .Rnw) contendo o código fonte da análise e relatório, que será gerado um arquivo LaTex .tex. Esse arquivo .tex deve ser então compilado no LaTeX como outro arquivo .tex usual, para se obter então o relatório com as saídas da análise processadas no R.
Na página do Fábio Rampazzo há um tutorial de Sweave, indicando passo a passo como criar seu primeiro arquivo Sweave e compilá-lo no R e LaTeX. Outra referência introdutória é o artigo Sweave, Part I: Mixing R and LaTeX de Friedrich Leisch (autor do Sweave), no jornal de notícias do R volume 2/3.
Exemplo
Considere o arquivo sweave_ex.Rnw, que pode ser visto logo abaixo:
\usepackage[brazilian]{babel}
\usepackage[ansinew]{inputenc}
\usepackage{amsthm,amsfonts,bm}
\usepackage{graphicx}
\usepackage[T1]{fontenc}
\usepackage{ae}
\title{Exemplo de Prática estatística letrada usando o \\Sweave}
\author{Fernando Henrique Ferraz Pereira da Rosa}
\date{}
\begin{document}
\maketitle
<<echo=false,results=hide>>=
if (require(xtable) == FALSE)
stop("Pacote xtable() necessário para rodar essa análise.")
options(digits=3)
@
Primeiro carregamos o conjunto de dados:
<<>>=
data(cars)
@
Começamos fazendo um diagrama de dispersão, que pode ser visto na Figura \ref{fig:scatter}
\begin{figure}[ht!]
\centering
<<echo=false,fig=true>>=
plot(cars)
@
\caption{Gráfico de diagrama de dispersão da distância de parada (pés) pela velocidade (milhas por hora).}
\label{fig:scatter}
\end{figure}
Ajustamos agora um modelo linear a esses dados, com o comando abaixo. Obtendo as estimativas indicadas na Tabela \ref{tab:z1}.
<<>>=
z1 <- lm(dist ~ speed,data=cars)
@
<<echo=false,results=tex>>=
xtable(z1,label="tab:z1",caption="Estimativas do modelo ajustado")
@
O coeficiente de determinação $R^2$ foi de \Sexpr{format(summary(z1)$r.squared)} - o que indica que o ajuste parece ter sido bem sucedido em explicar a variação dos dados. Na Figura \ref{fig:ajust} temos a reta ajustada indicada em vermelho.
\begin{figure}[ht!]
\centering
<<echo=false,fig=true>>=
plot(cars)
abline(z1,col='red')
@
\caption{Gráfico de diagrama de dispersão da distância de parada (pés) pela velocidade (milhas por hora), com a reta ajustada por mínimos quadrados.}
\label{fig:ajust}
\end{figure}
\end{document}
Processando esse arquivo através da função Sweave(), obtemos o arquivo sweave_ex.tex, que compilado então no LaTeX, nos retorna o arquivo sweave_ex.pdf, ilustrado abaixo:
Os blocos entre << opções >>= ... @ são interpretados pelo R quando é utilizado o comando Sweave(), gerando o .tex resultante. Também é possível usar dados da análise no meio do texto, através do comando \Sexpr{}, utilizado no exemplo acima para se referir ao coeficiente de determinação R2, no meio do texto.
Automatização: uso de Makefiles
O processo de escrita de um documento noweb em Sweave é bem simples, como foi ilustrado acima. Os passos entretanto necessários a cada compilação nova são repetitivos e requerem alguma dose de execução manual de comandos (chamar o Sweave dentro do R, chamar o LaTeX para gerar o .pdf a partir do .tex gerado, etc). Em um sistema operacional da família Unix (ou no Windows rodando um emulador do tipo Cygwin) é possível automatizar esse processo, de forma a obter o arquivo .pdf diretamente a partir do .Snw com apenas um comando.
Para isso utiliza-se o programa GNU Make, que é utilizado em geral para se manter grandes projetos de programação. O make funciona a partir da linha de comando, e funciona basicamente da seguinte maneira:
$ make target
Onde target é o nome do alvo que você quer gerar. Em um programa GNU é comum encontrar os alvos: all, install e clean, que: constroem todo o programa, instalam o programa no seu computador e limpam os arquivos intermediários, respectivamente.
O make entretanto só sabe como construir o target que você especificar se houver um arquivo no diretório onde o make está sendo chamado, de nome Makefile, com as instruções de como construir o dado target. Para usar o make para gerenciar um projeto de análise sendo escrito em Sweave, eu preparei o seguinte Makefile. Baixe ele para o mesmo diretório onde você baixou o arquivo sweave_ex.Rnw. Importante: salve o arquivo Makefile-Sweave com o nome Makefile, ou o renomeie depois que ele chegue. Tente então pedir para que ele crie o arquivo sweave_ex.pdf:
$ make sweave_ex.pdf
Outros targets úteis são:
- process: processa o arquivo .Snw, gerando o .tex e a partir dele o .dvi
- view: visualisa o arquivo .dvi (atualizando-o se necessário).
- all: os dois acima.
- clean: remove os arquivos temporários (figuras, gráficos).
- spellcheck: faz a checagem ortográfica, utilizando o GNU aspell.
- pdf: sinônimo de sweave_ex.pdf
Você pode usar esse mesmo Makefile para outros arquivos e projetos gerenciados pelo Sweave, para isso basta editar a primeira linha, ajustando SOURCEFILE para o nome do arquivo fonte em Sweave.
Outras referências
Para mais informações sobre os tópicos mencionados nessa página veja as referências abaixo:
- Sweave and Beyond: Computations on Text Documents. Friedrich Leisch.
- Sweave, Part II: Package Vignettes. Friedrich Leisch. Rnews Volume 3/2.
- Página oficial do Sweave
- How to write a Makefile
- GNU make
Páginas Relacionadas
- Sweave Syntax Highlighting in vim - 27/11/2006
- Localização do LaTeX - 14/02/2006
- Aprenda a usar o R - 06/07/2008