| This post was kindly contributed by fernandohrosa.com.br » R - go there to comment and to read the full post. |
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, seguido 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | \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:
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