Prática estatística letrada – Sweave

January 15, 2005
By

This post was kindly contributed by fernandohrosa.com.br » R - go there to comment and to read the full post.

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, 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:

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:

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:

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

Tags: ,

Comments are closed.