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.
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.
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 | \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:

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.
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:
1 | $ 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:
1 | $ make sweave_ex.pdf |
Outros targets úteis são:
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.
Para mais informações sobre os tópicos mencionados nessa página veja as referências abaixo:
Obrigada pelo post. Estou precisando urgentemente aprender a usar o Sweave. Assim que der vou ler os links relacionados e aqui novamente para fazer a primeira tentativa.
Ola Prof. Fernando
Executei seu exemplo com sucesso no Windows 7, porém não deu certo no Windows XP, ao executar o último passo “latex arquivo.tex” no DOS ele apresenta o erro “! LaTeX Error: File `teste-006\’ not found.”.
O Senhor saberia me dizer se há alguma restrição no XP para isso funcionar?
Adelia,
Até onde sei não tem incompatibilidade não. Você já conseguiu resolver o problema?
Fernando,