Prática estatística letrada - Sweave

Data de modificação: 2008-07-06.
Data de criação: 2005-01-15.

Palavras-chave: LaTeX, R-Project.

Conteúdo

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:

Sweave = R/S-Plus + LaTeX

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:

\documentclass[a4paper]{article}
\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:

Imagem da saída final

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:

Páginas Relacionadas

Envie seus comentários a respeito


E-mail: Nome: