Sunteți pe pagina 1din 200

1

Luciane Ferreira Alcoforado

Orlando Celso Longo

Statistics with R: inovao no mercado profissional

1. Edio

Niteri-RJ
LFA
2017

2
UNIVERSIDADE FEDERAL FLUMINENSE
ESCOLA DE ENGENHARIA
PROGRAMA DE PS-GRADUAO EM ENGENHARIA CIVIL
Coordenador: Orlando Celso Longo
www.poscivil.uff.br

DATAUFF Ncleo de Pesquisas, Informaes e Polticas Pblicas


Diretora: Luciane Ferreira Alcoforado
www.uff.br/datauff

RUA PASSO DA PTRIA 156


SO DOMINGOS
NITERI RJ
CEP 242210-240
TEL. +55 21 2629-5410

Editorao e Capa:
Luciane Alcoforado

ISBN 978-85-922932-1-5

3
CONSELHO EDITORIAL

Ariel Levy UFF


Assed Naked Haddad UFRJ
Carlos Alberto Pereira Soares UFF
Emil de Souza Sanchez Filho UFF
Giovani Glaucio de Oliveira Costa -UFRRJ
Joel de Lima Pereira Castro Junior UFF
Jos Rodrigo de Moraes UFF
Luciane Ferreira Alcoforado UFF
Manuel Febrero Bande - USC/ES
Maysa Sacramento de Magalhes - ENCE/IBGE
Orlando Celso Longo UFF
Steven Dutt Ross UNIRIO

4
No o mais forte que sobrevive.

Nem o mais inteligente.

Mas o que melhor se adapta s mudanas

Charles Darwin

5
PREFCIO

A linguagem R tem recebido a ateno dos mais importantes centros de


pesquisa, tendo em vista a versatilidade de aplicaes para a anlise de dados e
apresentao dos resultados. Alm disso, a objetividade da programao em R
pode atrair o interesse e simplificar o ensino da estatstica para a chamada gerao
Z, por sua elevada capacidade de adaptao ao uso de aplicativos e que j habita
as nossas universidades. O R" pode-se aliar ao ensino de diferentes disciplinas,
representando uma inovao de custo reduzido e com elevado potencial
educao dessa nova gerao.

Existem diversos livros disponveis sobre R. Este livro, entretanto, traz


caractersticas diferentes: apresenta um caderno de resumos sobre aplicaes da
estatstica com R e se soma importante iniciativa da Universidade Federal
Fluminense com apoio de diversos autores, na disseminao de to relevante
conhecimento para a academia e sociedade. O texto abrangente no tema,
trazendo desde ensinamentos bsicos ao aprendizado da linguagem a clculos
avanados em uso no mercado profissional. Os captulos iniciais tratam da
instalao e dos comandos bsicos aos iniciantes em R, incluindo projetos de
monitoria, extenso e exemplos de aplicao que podem auxiliar docentes e
discentes no ensino da linguagem R. Os captulos posteriores apresentam
tpicos mais avanados, incluindo novos pacotes, anlises grficas de dados de
mercado, modelos empresariais e elaborao de relatrios com informaes
dinmicas.

Embora este livro priorize modelos utilizados no mercado, os comandos


em linguagem R so semelhantes para outras aplicaes, independentemente da
rea de estudo e da natureza dos dados coletados. Em geral, qualquer pesquisa
envolve a coleta de dados, elaborao de grficos e, finalmente, realizao de

6
anlises. Nesse contexto, os exemplos apresentados nos captulos podem ser teis
em diferentes nveis acadmicos, abrangendo desde iniciantes no tema, quanto
experientes pesquisadores e analistas de mercado.

Seja bem-vindo ao mundo do R e uma boa leitu(R)a !

Prof. Jos Rodrigues de Farias Filho


Pr-Reitor de Graduao - Universidade Federal Fluminense

7
APRESENTAO

com grande satisfao que levamos ao leitor o resultado desta obra, mais
um fruto do primeiro Seminrio Internacional de Estatstica com R ocorrido em
maio de 2016 na Universidade Federal Fluminense em Niteri.

O Seminrio foi projetado para promover um encontro anual de


pesquisadores que utilizam o software R como ferramenta de anlise de dados
aplicados as mais diversas aplicaes do mundo contemporneo.

Nestes encontros os participantes realizam importante troca de


conhecimentos, ampliando as possibilidades de uso desta ferramenta que se
renova a cada dia atravs de uma rede mundial de colaboradores que atuam nas
mais diversas reas do conhecimento, o que torna o R uma linguagem de aplicao
multidisciplinar promovendo a integrao entre reas que de outro modo no se
encontrariam.

Essa troca de conhecimentos amplifica as possibilidades de anlises entre


os pesquisadores e incentiva novas pesquisas, acolhendo pesquisadores que no
possuem familiaridade com o R ou que estejam iniciando seu aprendizado, atravs
de contato com renomados pesquisadores com profundo conhecimento no uso do
R.

Reunimos nesta obra a contribuio de renomados pesquisadores que


abrilhantaram a primeira edio deste seminrio pioneiro no Brasil na certeza de
que estamos atuando como veculos de disseminao de uma das mais importantes
linguagens computacionais, o R, que figura entre as primeiras de maior
popularidade do mundo.

Nossos agradecimentos Universidade Federal Fluminense, equipe da


Biblioteca da Escola de Engenharia e Capes que atravs do seu apoio ao evento
SER tornou possvel a realizao desta obra.

8
Agradecimento especial aos autores que prontamente responderam ao
convite de contribuir com os captulos que compem esta obra.

Orlando Celso Longo, professor titular do PPGEC/UFF.

Luciane Ferreira Alcoforado, professora adjunta do PPGEC/UFF

9
Sumrio

OS AVANOS DA LINGUAGEM R: DAS PESQUISAS ACADMICAS S GRANDES


EMPRESAS AUTORIA: ARIEL LEVY (UFF) 14

INTRODUO 14
O PONTO DE PARTIDA : A INSTALAO 18
INTERFACES 19
APRENDENDO NO AMBIENTE R COM O PACOTE SWIRL 20
OS AVANOS DA LINGUAGEM R: DAS PESQUISAS ACADMICAS AS GRANDES EMPRESAS 21
REFERNCIA BIBLIOGRFICA 24

ESTATSTICA COM R, AES PARA O APRENDIZADO DO R AUTORIA: LUCIANE


FERREIRA ALCOFORADO (UFF) 25

O QUE O R? 25
INTRODUO DO R NO CURSO DE ESTATSTICA DA UFF 27
CURIOSIDADES SOBRE O R 29
BASE PARA AS AES DO APRENDIZADO DO R 30
PROJETO DE MONITORIA: DESENVOLVENDO ATIVIDADES DE ENSINO EM ESTATSTICA BSICA 32
PROJETO DE EXTENSO: ESTATSTICA COM R! 34
PRODUO DE VDEO AULAS 37
EXEMPLO DE APLICAO UTILIZANDO OS RECURSOS DO PORTAL ESTATSTICA COM R! 39
REFERNCIA BIBLIOGRFICA 40

BRAZILIAN ECONOMIC TIME SERIES (BETS): R PACKAGE AUTORIA: PEDRO COSTA


FERREIRA, TALITHA F. SPERANZA E JONATHA A. DA COSTA (FGV/IBRE) 41

1. INTRODUO 41
2. BANCO DE DADOS E ESTRUTURA DO PACOTE 43
2.1 BANCO DE DADOS 43
2.2 FUNCIONALIDADES DO PACOTE 45
3. UTILIZANDO O BETS 48

10
3.1 GERENCIAMENTO DE DADOS 48
3.2 ALGUMAS FUNES ADICIONAIS 53
3.3 PAINIS DE INFLAO 56
4 RELATRIOS DINMICOS: MODELOS BOX & JENKINS E GRNN (REDES NEURAIS) 58
4.1 METODOLOGIA BOX & JENKINS 58
Preliminares 59
4.2 GENERAL REGRESSION NEURAL NETWORKS (GRNNS) 77
5. CONCLUSO 91
REFERNCIA BIBLIOGRFICA 93

ANLISE DE DADOS UTILIZANDO AS LIBRARIES SURVEY E CONVEY DO R AUTORIA:


DJALMA PESSOA (ENCE/IBGE) E GUILHERME JACOB (UNICEF BRASIL) 96

1. INTRODUO 96
2. PESQUISA NACIONAL POR AMOSTRA DE DOMICLIOS CONTNUA (PNADC) 98
3. LIBRARY SURVEY 102
4. O SITE ASDFREE.COM 103
5. TAXA DE DESOCUPAO 104
6. LIBRARY CONVEY 107
6.1 LINEARIZAO POR FUNO DE INFLUNCIA EXEMPLOS 108
6.2 EXEMPLOS DE USO DA LIBRARY CONVEY 109
6.3 INDICADOR FGT 112
6.4 CURVA DE LORENZ 114
6.5 NDICE DE GINI 116
REFERNCIA BIBLIOGRFICA 118

PLANEJAMENTO AMOSTRAL EM GEOESTATSTICA COM R AUTORIA: GUSTAVO DA


SILVA FERREIRA (ENCE/IBGE) 119

INTRODUO 119
GEOESTATSTICA 120
PLANEJAMENTO AMOSTRAL TIMO 124
APLICAO I: DADOS DE INFESTAO PELO MOSQUITO AEDES AEGYPTI NO RIO DE JANEIRO 126

11
APLICAO II: DADOS DE PRECIPITAO PLUVIOMTRICA NO RIO DE JANEIRO 127
DISCUSSO 129
REFERNCIA BIBLIOGRFICA 130

PAINIS NO R SHINY PELA EMPRESA MOBI2BUY AUTORIA: SAVANO PEREIRA E


PHILIPE RABELO (MOBI2BUY) 132

APRESENTANDO A MOBI2BUY 132


SISTEMA DE INFORMAO GERENCIAL (SIG) 133
PAINIS DE DADOS OU DASHBOARDS 134
O R SHINY 138
REFERNCIA BIBLIOGRFICA 140

INTELIGNCIA ARTIFICIAL COM R PARA PREDIO DE SRIES TEMPORAIS AUTORIA:


ALEX LAIER BORDIGNON (UFF) 141

PARTE 1 DEFININDO UM PROBLEMA DE REGRESSO 141


PARTE 2 RESOLVENDO O PROBLEMA DE REGRESSO COM REDES NEURAIS 147
PARTE 3 CARREGANDO SERIES TEMPORAIS DA INTERNET 154
PARTE 4 SERIES TEMPORAIS E REDES NEURAIS 157
PARTE 5 UM EXEMPLO COMPLETO 166

DYNAMIC REPORTS IN R (WITH LATEX OR HTML) AUTORIA: MANUEL FEBRERO-


BANDE (UNIV. DE SANTIAGO DE COMPOSTELA) 172

DYNAMIC REPORTS 172


INTRODUCTION 173
WHAT IS NEEDED? 175
LATEX --> PDF 177
FIRST STEPS. BEGINNING OUR FIRST DYNAMIC REPORT WITH LATEX 177
FUNCTIONS TO BE USED WITHIN R 179
OPTIONS FOR CHUNKS IN KNITR 180
SIMPLE EXAMPLES 182

12
GLOBAL OPTIONS AND HOOKS 182
TABLES 186
GRAPHICS 188
SIMPLE GRAPHICS (JPG) 188
CAIROPDF OR OTHER DEVICES 189
ANIMATIONS IN PDF 190
CACHE 191
PARENTS AND CHILDREN 193
HOOKS: WRITE YOUR OWN EXTENSIONS. 194
A COUPLE OF TRICKS FOR LATEX 197
R MARKDOWN 198
R MARKDOWN AND SHINY 198
REFERENCES 199

13
Os Avanos da Linguagem R: das Pesquisas Acadmicas
s Grandes Empresas
Autoria: Ariel Levy (UFF)

Introduo

Durante anos os pesquisadores utilizaram programas de computador para


realizar suas pesquisas quantitativas, muitos dos quais requerem licenas custosas
e demandam conhecimentos especficos de difcil assimilao.

Contudo, isso coisa do passado. Atualmente podem utilizar o R, definido


como um sistema para computao estatstica e grfica que consiste numa
linguagem que possibilita acesso em tempo real a um ambiente grfico e um
depurador. Assim, pode-se calcular o resultado desejado atravs da utilizao de
funes e obter resultados medida que se investiga os dados, ou reproduzir as
instrues por programas, conjuntos de instrues, que no ambiente do R so
denominados por scripts. Este sistema de licena livre, sem qualquer nus, e sua
assimilao pela comunidade acadmica permitiu que um grande nmero de
pessoas contribua para sua evoluo.

Diversos problemas foram investigados e mtodos formalizados em


programas que servem a outros pesquisadores. Estes conjuntos formam o que
denominamos por pacotes. O R atualmente possui mais de 9200 pacotes, que
auxilia as pesquisas em diversas reas da cincia.

Com atualizaes que ocorrem aproximadamente a cada semestre sua


evoluo pode ser observada a cada nova verso (de Vries, 2016), pelo
crescimento apresentado em termos de usurios e capacidade de anlise atravs
do crescimento exponencial dos pacotes.

14
Figura 1: Nmero de pacotes do R por ano e verso, presentes em verso final no
site principal de distribuio (de Vries, 2016).

A converso de usurios ligados a outros programas mais tradicionais ao


R deve-se principalmente pela forma integrada com que o R facilita a leitura e
organizao de dados, os procedimentos estatsticos e grficos para sua anlise, a
simplicidade na personalizao das sadas, a facilidade de produo e utilizao
repetida de comandos, e a facilidade na manipulao de matrizes.

A vantagem do R advm dele estar escrito em linguagem prpria o que no


acontece com programas como SPSS e SAS. O fato da linguagem ser aberta trs
a vantagens de que seus procedimentos podem ser modificados pelo usurio, se
assim for desejvel.

As diversas capacidades do R em extrair e manipular entradas e sadas


permitem uma excelente flexibilidade ao importar e exportar dados para diversos
formatos, inclusive dos outros softwares citados. Alm de produzir diretamente
relatrios, com o uso dos pacotes, para pginas em HTML, arquivos em TEX,
PDF e tantos outros editores.

Com o crescimento do nmero de usurios e desenvolvedores apareceram


os programas facilitadores do uso do R como o pacote R-Commander, RSTUDIO,
15
Analytic Flow. H ainda o RStudio-Shinny, porm destinado a profissionalizar e
personalizar as anlises atravs de aplicativos atendendo um pblico que no
domina o R.

O R possui um amplo sistema de ajuda ao usurio, desde a documentao


depositada no CRAN Comprehensive R Archive Network, uma rede em FTP e
servidores na Internet que armazena cpias idnticas do programa bsico, dos
pacotes e demais informaes.

Alm disso o sistema R conta com mais de 600 Blogs e Fruns de respostas
suportados pelos diversos usurios. Extensa tambm a relao de cursos, grtis
e pagos, disponveis tanto presencialmente como em EAD em sites como do
Coursera, EDX entre outros.

Diante disso, um grupo de pesquisadores de trs Departamentos da UFF,


Engenharia Civil, Estatstica e Administrao, resolveram criar o evento que
contou com o apoio de diversas outras entidades para divulgao do R dentre as
demais reas da universidade e facilitar o acesso e ensino deste sistema aos jovens
pesquisadores.

Com foco neste propsito o evento contou com uma mesa redonda, onde
se discutiram os caminhos do R e seu futuro junto ao mercado. Alm das diversas
palestras onde retrataram-se algumas aplicaes e mtodos aplicados, a iniciao
ao R esteve contemplada nas oficinas apresentadas e na degustao do R, onde os
participantes puderam experimentar as possibilidades do sistema e assistir
demonstraes.

Ainda com referncia a iniciao, durante o evento foi apresentada por


Sean Kross a palestra: O pacote SWIRL que objetiva ensinar o R no prprio
ambiente.

No poderamos deixar de mencionar a enorme relao de ttulos de livros


relacionados ao sistema, em sua maioria em lnguas estrangeiras. Em portugus
destacamos o livro de iniciao ao R da professora Luciane Alcoforado,
idealizadora do SER: Introduo ao R utilizando a Estatstica Bsica (2014) e
algumas tradues.

16
Na sequncia ilustraremos como o leitor pode dar seus primeiros passos
no R, acreditamos que assim estaremos dando sequncia ao objetivo da primeira
realizao deste evento que marcou a insero da UFF no calendrio internacional
anual de eventos destinados a ampliar e aprimorar os usurios deste sistema.

17
O Ponto de Partida : A Instalao

Como o R um programa livre (open source), no h qualquer licena a


ser protegida. Isto faz com que a instalao seja fcil, sem complicaes.

Como iniciante voc dever instalar a partir do https://cran.r-project.org/


seguindo as instrues. H pequenas diferenas de acordo com o sistema
operacional utilizado. Para o Windows, IOS e Linux h instaladores.

Ao abrir o endereo supracitado e escolher o sistema operacional voc


poder ser diretamente redirecionado a escolher um dos sites espelhos (mirrors),
escolha um prximo a voc. Escolha a instalao por arquivos, files se for
iniciante, assim tudo ser automtico.

No Windows o software instalar dois cones, um para 64 e outro para 32


bits. Normalmente se utilizar o de 32 bits, exceto quando necessria computao
paralela e a mquina dispor destes recursos. No MAC o link baixar o pacote
.dmg e procede-se com a instalao como qualquer outro aplicativo.

O R quando no for possvel instalar pode ser utilizado on-line, inclusive


em celulares e tablets. Embora, esteja limitado a facilidades conforme o provedor
e sistema.

Verifique se for o caso os seguintes documentos:

http://www.tutorialspoint.com/execute_r_online.php

http://pbil.univ-lyon1.fr/Rweb/Rweb.general.html

http://www.r-fiddle.org

Sendo que se realmente tiver de usar a partir de um celular sugerimos


utilizar o terceiro link.

18
Interfaces

O R funciona tradicionalmente em um console que parece um ambiente


antigo de programao. Assim, o usurio deveria aprender a linguagem, num alto
nvel de detalhes, para adequar sua utilizao.

Com o avano da comunidade de usurios de R apareceram os pacotes


facilitadores como o R-Commander e interfaces (front-end) como o RSTUDIO
(figura 3) e o R AnalyticFlow (figura 2).

Figura 2. Interfaces do Rcommander, R AnalyticFlow e Rstudio.


19
Aprendendo no Ambiente R com o Pacote Swirl

O pacote swirl foi idealizado para ensinar o R a estudantes no ambiente do


R. Foi criado por Nick Carchedi, Bill Bauer, Gina Grdina, e Sean Kross no Johns
Hopkins Data Science Lab. Atravs dele o console transformado num ambiente
virtual de aprendizagem, no requerendo que o estudante tenha qualquer noo de
programao. O objetivo proporcionar a oportunidade de aprender
programao, estatstica e cincia dos dados.

Ao promover num mesmo espao o aprendizado e a prtica do R facilita a


fixao dos novos conhecimentos e habilidades. Assim como o R o programa do
swirl de licena livre, e este comprometimento ser mantido pelos seus
idealizadores.

Um pacote complementar ao swirl, o swirlfly traz ferramentas para


professores e desenvolvedores de forma a prover a capacidade de qualquer um
criar e distribuir seus prprios cursos no swirl. Atualmente j prev capacidades
de edioo com os alfabetos latinos e temos alguns cursos em espanhol.

Voc mesmo pode experimentar e aprender. Basta que no console do R,


ou RStudio digite:

install.packages(swirl)
library(swirl)
install_course_github("swirldev","R_Programming_E")
swirl()

O professor Ariel Levy e outros esto trabalhando com Sean Kross para
traduzir as lies do R-Programming E, um dos cursos bsicos de programao
no R, para o portugus de forma a ampliar o acesso ao ensino do R nas graduaes
e mesmo no ensino mdio, todos esto convidados a unir-se ao esforo voluntrio.

20
Os Avanos da Linguagem R: das Pesquisas Acadmicas as Grandes
Empresas

Quando se trata de avano o R mostra a fora de sua comunidade. Segundo


Muechen (2015) o R j ultrapassou o SAS em uso com finalidade acadmica, ver
figura 3. O SPSS ainda dominante, como nos ltimos 15 anos.

Figura 3. Nmero de artigos acadmicos encontrados no ano completo de 2015


por programa de anlise utilizado (Muechen, 2015).

Contudo o R j se apresenta em segundo e com aproximadamente metade


do nmero de trabalhos do lder. Os seguidores SAS, Stata e MATLAb, de terceiro

21
a quinto respectivamente, encontram-se muito prximos. Esse ordenamento
mostra a fora que o sistema de anlise vem tomando nos ltimos anos.

Outro indicador da ascenso do R pode ser verificada pela evoluo de


ofertas de emprego quando comparamos os dois lderes do critrio anterior.
Segundo pesquisa no site www.indeed.com , figura 4, quanto a busca por
empregadores deste atributo verifica-se que o SPSS apresenta uma tendncia de
queda enquanto que o R de crescimento. Entretanto o nmero absoluto de busca
pelo primeiro ainda seja maior, essa diferena vem diminuindo.

O mercado de empresas de anlise de dados tambm reflete as mudanas


ocorridas nos programas. Recentemente KNudgets um site focado em Data
Mining, Big Data e Data Science publicou uma anlise do quadrante mgico do
Gartner 2015.

Figura 4. Empregos por Tipo de Software Demandado www.indeed.com

Nessa as movimentaes estratgicas esto refletidas para os anos 2014 e


2015. O destaque fica com a Microsoft com a aquisio da Revolution Analytics,
especialista em R modifica sua posio como grande visionria, ver figura 5.

22
No Brasil a retrao da economia fora tanto as Universidades quanto ao
mercado para solues que minimizem o custo. Assim, os especialistas presentes
a mesa acordaram que o R desponta como alternativa as carssimas licenas dos
programas de anlise de dados. Essa uma realidade que deve marcar tendncia
no futuro prximo.

Figura 5. Anlise dos quadrantes estratgicos de Gartner (in Piatetsky,2015)

23
Referncia Bibliogrfica

EF-PRIME, Inc. RAnalyticFlow:Designed for data analysis. Great for everyone.


Disponvel em http://r.analyticflow.com/en/, Acesso em 10/07/2016.

INDEED, R and spss Job Trends. Disponvel em:


http://www.indeed.com/jobtrends/q-R-q-spss.html acesso em 02/09/2016.

MUECHEN Robert A. The Popularity of Data Analysis Software, URL


http://r4stats. com/popularity, 2012, disponvel em
http://r4stats.com/articles/popularity/ acesso 09/05/2016.

PIATETSKY, Gregory. Gartner 2015 Magic Quadrant for Advanced Analytics


Platforms: who gained and who lost disponvel em
http://www.kdnuggets.com/2015/02/gartner-2015-magic-quadrant-advanced-
analytics-platforms.html acesso 09/05/2016.

R ANALYTICFLOW. Designed for data analysis, Ef-prime Inc, 2017


disponvel em http://r.analyticflow.com/en/, acesso em 05/01/2017.

RCOMMANDER. A grafical interface for R, 2017, disponvel em


http://www.rcommander.com/ acesso em 05/01/2017.

R_FIDDLE. Fiddle around with R in the cloud! Discponvel em http://www.r-


fiddle.org/#/, acesso em 09/05/2106.

RPROJECT.ORG. The Comprehensive R Archive Network disponvel em:


https://cran.r-project.org/ acesso em 09/05/2016

RWEB, Run R on the Web, disponvel em http://pbil.univ-


lyon1.fr/Rweb/Rweb.general.html acesso, 09/05/2106

RSTUDIO. Take Control of your R Code, 2016 disponvel em


https://www.rstudio.com/products/RStudio/,acesso em 09/05/2016

RSTUDIO. Teach Yourself Shiny, disponvel em


http://shiny.rstudio.com/tutorial/, acesso em 09/05/2016.

SWIRLSTATS, SWIRL Learn R in R. Disponvel em: http://swirlstats.com/,


09/05/2016.

TUTORIALSPOINT, Learn R Programming: Simply easy Learning, 2016


disponvel em https://www.tutorialspoint.com/r/index.htm acesso 09/05/2016.

24
Estatstica com R, aes para o aprendizado do R
Autoria: Luciane Ferreira Alcoforado (UFF)

O que o R?

Meu primeiro contato com o R foi em 2006 quando procurei a ENCE


(Escola Nacional de Cincias Estatsticas do IBGE) para me atualizar e qualificar.
Desde o primeiro momento percebi muitas possibilidades de realizao e passei a
me dedicar ao aprendizado desta linguagem.
Para quem no do meio estatstico, fica a pergunta, mas o que o R?
No apenas uma letra, apesar de ter sido nomeado de forma to simplificada,
trata-se hoje do software livre mais utilizado no mundo para anlises estatsticas.
Sua popularidade iniciou no ano 2000 quando professores de Estatstica da
Nova Zelndia tornavam pblica a primeira verso do software R. Talvez por
coincidncia, as iniciais do nome destes professores iniciam pela letra R, Ross
Ihaka e Robert Gentleman, uma boa hiptese para o terem nomeado de R.
O software R foi projetado especificamente para anlise estatstica, um
projeto de cdigo aberto, sendo continuamente melhorado, atualizado, aprimorado
e expandido por uma comunidade global de usurios e desenvolvedores.
A linguagem R encontra-se em processo contnuo de expanso,
alcanando em 2015 a posio de sexta colocada entre as linguagens
computacionais mais populares do mundo, segundo a revista online IEEE
Spectrum.
Neste mesmo ano de 2015, a Linux Foundation, a Microsoft e o time de
desenvolvedores da linguagem R, firmaram um consrcio, o R consortium,
tornando o uso da linguagem ainda mais dinmica e acessvel aos usurios.
A ideologia do software livre surge como um novo paradigma, no para
excluir os instrumentos anteriores, mas sim para agregar, possibilitando uma
escalada de conhecimento, baseando-se no princpio do compartilhamento de
conhecimento, (Santos e Carvalho, 2014).

25
Assim, o R consortium conta com a adeso de membros da R Foundation,
da Microsoft, do RStudio dentre outros, formando uma grande associao de
contribuidores.

26
Introduo do R no curso de Estatstica da UFF

Quando terminei o doutorado em 2009, fui convidada a ministrar as


disciplinas obrigatrias de Mtodos Computacionais para o curso de graduao
em Estatstica e de Matemtica Aplicada Engenharia no programa de Mestrado
e Doutorado do Programa de Ps-Graduao em Engenharia Civil.
No ano de 2010 introduzi o aprendizado do R para os futuros Estatsticos,
alguns deles j formados pela UFF e atuantes no mercado de trabalho. Para quem
est ingressando na Universidade o primeiro contato com a linguagem, at
mesmo no meio dos alunos de Ps-Graduao em Engenharia Civil, o R pouco
difundido.
Assim, em 2010 observei que, tanto alunos de graduao como de ps-
graduao, apresentavam dificuldade no aprendizado do R, algo a ser vencido j
que no dispnhamos de muitos recursos didticos na lngua portuguesa. Naquela
poca no havia livros publicados sobre o R no Brasil.
Com a proposta de produzir material de apoio ao aprendizado da
linguagem R, iniciei em 2010 um projeto de monitoria, que acabou por gerar um
livro lanado pela Eduff em 2014.
Esse projeto de monitoria impulsionou o desenvolvimento do portal
denominado Estatstica com R! e a produo de vdeos-aulas sobre a
linguagem R.
Atravs da unio entre estes dois projetos de extenso e o projeto de
monitoria, contando com uma pequena equipe de professores e alunos de
graduao em Estatstica, produzimos diversos materiais como a manuteno do
portal Estatstica com R!, vdeo-aulas que so disponibilizadas no portal, alm
de tutorial e publicaes peridicas sobre pacotes e recursos disponveis no
ambiente R.
Trabalhando junto aos alunos de graduao e ps-graduao, percebi que
havia uma grande lacuna entre a formao acadmica e a realidade do mercado de
trabalho destes profissionais, especialmente no que diz respeito as ferramentas
estatsticas disponveis. Assim, iniciamos a elaborao do projeto do Seminrio
de Estatstica com R em maio de 2015 e o resultado desta iniciativa foi a

27
realizao, aps um ano de intenso trabalho, especificamente em maio de 2016,
do SER Seminrio Internacional de Estatstica com R.

28
Curiosidades sobre o R

A linguagem R foi inspirada na linguagem S com o objetivo de se tornar uma


ferramenta de domnio pblico para anlises estatsticas e visualizao de dados.

Em maio de 2016 eram 8362 pacotes disponveis, este nmero cresce a cada dia.
Pacotes so bibliotecas para funes especficas ou reas de estudo especficas.

O rseek.org um motor de busca, que recebeu mais de 3,4 milhes de


visualizaes. Criado por Sasha Goodman, um especialista na linguagem R,
til para pesquisas especficas sobre funes da linguagem R.

No Brasil a porta de entrada do R foi atravs da Universidade Federal do Paran


(UFPR) que administra o grupo de discusso sobre o R, o R-BR.

Na rede social do facebook destacam-se os seguintes grupos e pginas com as


respectivas quantidades de curtidas (dados de maio de 2016): grupo aberto R
Brasil Programadores, 2.200; Users of R Statistical Packageo, 12.600; RData
Mining & Analytics, 400; R UNIRIO; 110; as pginas Estatstica usando o R,
1700; Estatstica com R, 450; R Mining, 220.

H uma coleo denominada Use R! da editora Springer com 58 ttulos publicados


at maio/2016.

Outra srie curiosa da Springer: Quantitative Methods in the Humanities and


Social Sciences com o ttulo Text analysis with R for Students of Literature para
estudantes que no possuam nenhuma experincia com programao mas que
desejem utilizar o R para fazer anlise de textos.

29
Base para as aes do aprendizado do R

Os projetos voltados para o aprendizado do R esto baseados nas diretrizes


curriculares do curso de Estatstica estabelecidos pelo MEC:

Capacidade crtica;
Assimilar novos conhecimentos cientficos e/ou tecnolgicos;
Capacidade de trabalhar em equipe multidisciplinar;
Desenvolver habilidade computacional.

No que diz respeito ao desenvolvimento de habilidade computacional


destacam-se: informtica bsica, pacotes estatsticos, domnio de uma linguagem
de programao, conhecimento de sistemas de bancos de dados.

Todas estas habilidades so contempladas com o uso do ambiente


computacional R. Nele o usurio pode dominar a linguagem de programao,
desenvolver funes especficas para atender seu objetivo de anlises estatsticas,
contribuir com a criao de novos pacotes ou utilizar os pacotes existentes para
produzir anlises relevantes atravs de modelagem estatstica.

Alm disso o RStudio proporciona uma ampla integrao do R com


produo de relatrios no formato pdf, word e html, facilitando o uso da
linguagem durante sua execuo.

A transmisso de informao tornou-se tarefa fcil com as tecnologias


disponveis e podem ajudar o professor no seu trabalho, se forem bem planejadas
e estruturadas.

A dificuldade reside justamente em como utilizar os recursos de forma


eficiente, uma vez que as tecnologias permitem mostrar vrias formas de captar e
mostrar o mesmo objeto, representando-o sob ngulos e meios diferentes: pelos
movimentos, cenrios, sons, integrando o racional e o afetivo, o dedutivo e o
indutivo, o espao e o tempo, o concreto e o abstrato, (Moran, 2007).

No conjunto de todas estas combinaes, o projeto Estatstica com R vem


investigando e construindo cenrios para o aproveitamento da tecnologia atravs

30
de diversos formatos: site, rede social, produo de vdeo, publicao dos vdeos
na rede, planejamento de jogos e aplicativos, produo de materiais em meio
digital, dentre outros.

31
Projeto de Monitoria: Desenvolvendo atividades de ensino em
Estatstica Bsica

Desde 2010 este projeto de monitoria se volta ao aprendizado da


linguagem R para iniciantes no curso de graduao em Estatstica. O objetivo do
projeto produzir material de apoio didtico e dentre os materiais produzidos
pelos monitores durante a execuo do mesmo podemos destacar:

Utilizao do R no Ensino da Estatstica Bsica I, apostila desenvolvida no ano


de 2010 pela monitora Carolina Valani Cavalcante abordando desde a criao de
vetores, matrizes e data frames at comandos bsicos para produo de grficos.
Apostila sobre grficos, desenvolvida no ano de 2011 pela monitora Paola da
Silva Martins abordando detalhadamente os comandos para elaborao de
grficos.
Leitura, Manipulao e Armazenamento de Dados com o R, apostila desenvolvida
no ano de 2012 pela monitora Juliana Freitas de Melo e Silva abordando
especialmente o pacote xlsReadWrite para leitura de planilhas no formato xls do
Excel.
Manipulando Imagens atravs da Representao Matricial: uma abordagem
curiosa, tutorial desenvolvido no ano de 2014 pelo monitor Lucas Meireles T. de
Alvarenga, utilizando pacotes para leitura de imagens e manipulao das mesmas
como abordagem inovadora do efeito dos comandos de manipulao de um banco
de dados, ora representados pela matriz da imagem.
Produo de Objetos de Aprendizagem Aplicados ao Treinamento da Linguagem
R, jogo de palavras cruzadas desenvolvido no ano de 2015 pelo monitor Leonardo
Filgueira com a proposta de proporcionar o treinamento dos comandos do R
divididos por sees temticas e apostila intitulada Explorando as
funcionalidades do R Commander elaborada pelo monitor George Amarante
Melo, exploradando anlises descritivas e leitura de bases de dados de uma
maneira geral.

32
Elaborao de roteiros para apoio ao projeto de produo de vdeo-aulas,
desenvolvido pelos monitores Leonardo Filgueira e Ronaldo Lacerda, durante o
ano de 2016.

Estes materiais produzidos foram inicialmente disponibilizados no site do


departamento de Estatstica da UFF, porm em 2015 quando iniciamos o projeto
do portal, estes materiais passaram a ser disponibilizados no domnio
www.estatisticacomr.uff.br

FIGURA 1: RECORTE DE MATERIAIS DE APOIO PRODUZIDOS POR PROJETO DE MONITORIA COORDENADO PELA
PROFA. LUCIANE ALCOFORADO

33
Projeto de Extenso: Estatstica com R!

A ideia do projeto de extenso surgiu ao final de 2014, quando percebemos


a necessidade de promover o aprendizado do R para a comunidade acadmica,
procurando interagir com professores e alunos de outras Instituies de Ensino e
Pesquisa.

Foi ento elaborado um projeto que produzisse a estrutura de um portal de


aprendizagem para abrigar todos os objetos de aprendizagem que utilizem o
software R como ferramenta computacional e que sejam produzidos por
professores e alunos colaboradores.

Paralelamente construo do portal, iniciamos a produo de vdeo-aulas


sobre o R, criamos um canal no youtube e medida que os vdeos so publicados
ficam disponveis tambm no portal de aprendizagem Estatstica com R!.

Assim, o portal Estatstica com R! funciona como uma central que agrega
todo material produzido pelos colaboradores, seja no formato de vdeos, tutoriais,
jogos, eventos ou postagens na forma de blog.

O portal hoje consta dos seguintes itens:

Home: onde so publicadas postagens na forma de blog com periodicidade


mensal;

Conhecendo o R: informando como o R surgiu;

Vdeo aulas: acervo com as vdeo-aulas produzidas no projeto

Tutoriais local que abrigar os materiais produzidos em forma de texto, como


apostilas, tutoriais e outras publicaes.

SER informaes sobre o evento SER Seminrio Internacional de Estatstica


com R

Passatempo no R local que abriga palavras cruzadas online que auxiliam no


aprendizado dos comandos do software R

34
Equipe-Contato

FIGURA 2: PORTAL ESTATSTICA COM R!

Todas as atividades do portal so anunciadas na pgina correspondente do


facebook, j que as redes sociais so o melhor canal de comunicao para sinalizar
as atualizaes do portal.

No perodo de maio de 2015 a maio de 2016 contabilizamos um total de


45 publicaes com alcance mdio de aproximadamente 300 visualizaes,
atingindo um mximo de 1300 quando da publicao de 22/07/2015 com o ttulo:
J pensou em ter o R no seu celular?.

O perfil do pblico que curte a pgina do projeto no facebook na maioria


formado por homens (55%) com idade variando entre 18 e 34 anos (41%). A
maioria do Brasil, da cidade do Rio de Janeiro, conforme pode ser visto na Figura
3.

35
FIGURA 3: PERFIL DAS PESSOAS QUE CURTEM A PGINA DO PORTAL ESTATSTICA COM R! NO FACEBOOK.

36
Produo de vdeo aulas

Quando iniciamos o projeto de produo de vdeos com o objetivo de


aprendizagem e treinamento na linguagem R percebia-se uma demanda crescente
de alunos interessados nesta linguagem, havia alguns canais de vdeo sobre o tema
na lngua inglesa e espanhola, porm na lngua portuguesa encontramos uma
produo que se iniciava no canal da Fundao Getlio Vargas (FGV).

Percebemos que os vdeos disponveis tinham a caracterstica de durao


prolongada para ensinar ou explicar os contedos, duraes em geral com tempo
superior a 15 minutos para explicar por exemplo como instalar o software,
explicao que no nosso entendimento poderia ser realizada em menos de 3
minutos.

A proposta a de produzir vdeos de curta durao, com tempo mdio de


3 minutos para explicar contedo especfico, facilitando o acesso e aprendizado,
alm de proporcionar ferramentas de ensino para professores elaborarem um plano
de aula de forma prtica medida que os contedos so disponibilizados de forma
atomizada.

O tempo de exibio dos contedos nos vdeos est norteado pelos


seguintes aspectos:

O processo de ateno do ser humano que uma habilidade fundamental


para a seleo e filtragem da informao relevante, possibilitando ao
indivduo lidar de modo eficaz com os estmulos, tanto internos, como
aqueles oriundos dos sistemas de memria, quanto externos, informaes
que a todo momento bombardeiam seus rgos dos sentidos (Karling,
1991);
O tempo que um professor consegue deter a ateno do estudante durante
uma aula presencial, de acordo com minha percepo estabelecida pelos
anos de atuao no magistrio superior, gira em torno de 10 a 20 minutos
para cada novo assunto abordado;

37
Vdeos curtos possibilitam o acesso imediato ao contedo abordado,
otimizando o tempo de exposio do aluno informao do seu foco de
interesse;
O professor ao planejar sua aula pode selecionar os vdeos que julgar de
interesse, podendo combinar diversas possibilidades de contedo,
formando uma estrutura maior com os assuntos a serem tratados.

Entre os anos de 2015 e 2016 foram publicados os seguintes vdeos:

1. O que vem por a, vinheta de 0:16 min anunciando o incio do projeto. Este vdeo
foi publicado em 10/05/2015 em http://youtu.be/18dg9Fa9DrA
2. Como instalar o R e o RStudio, com 3:30 min publicado em 03/07/2015 em
http://youtu.be/8LnZNC4hxdQ
3. R-Fiddle, com 1:50 min explica como ter acesso remoto ao R, um recurso pouco
conhecido entre os usurios, publicado em 18/09/2015 em http://youtu.be/Eb9-
gp8lp3Y
4. Leitura de dados csv no R, com 4:56 min publicado em 23/11/2015 em
http://youtu.be/Xdtq82tMLql
5. Vetor do tipo Caractere, com 3:33 min publicado em 29/11/2016 em
http://www.youtube.com/watch?v=-TaLdPO4WA8
6. Vetor do tipo Numrico, com 2:28 min publicado em 28/12/2016 em
http://www.youtube.com/watch?v=GWspGA7WK9U

O canal de vdeos encontra-se no endereo www.youtube.com/estatisticacomr


contemplando este pequeno acervo de vdeos que dever ser ampliado atravs de
recursos das agncias de fomento.

38
Exemplo de aplicao utilizando os recursos do portal Estatstica com
R!

O portal funciona como uma central de recursos didticos disponveis para


estudos. Assim, tanto o professor como o aluno podero elaborar uma estratgia
de composio, utilizando os mltiplos recursos disponveis.
Como exemplo ilustrativo, mostraremos como utilizar os recursos
disponveis para elaborar uma estratgia individualizada de aprendizado para
leitura de dados em arquivo excel.
Objetivo: aprender como fazer a leitura de um banco de dados em arquivo
do tipo csv

1- Se voc j possui o programa R instalado, v para o item 5;


2- Caso contrrio assista o vdeo Como instalar o R e o Rstudio em
http://youtu.be/8LnZNC4hxdQ;
3- Instale o programa no seu computador;
4- Caso no seja possvel instalar o programa, assista o vdeo R-Fiddle que mostra
como utilizar o R remotamente em http://youtu.be/Eb9-gp8lp3Y;
5- Assista o vdeo Como ler um arquivo csv em http://youtu.be/Xdtq82tMLql;
6- Faa o script de leitura do arquivo csv e rode-o no console do R;
7- Salve seu trabalho em arquivo apropriado.

Este exemplo demonstra como um professor pode rapidamente montar um


plano de estudos para atingir um objetivo especfico. Um aluno que siga este plano
levar de 15 a 30 minutos para completar esta tarefa, partindo do princpio que
no tenha nenhum conhecimento sobre o assunto. J um aluno que tenha o
conhecimento at o item 2, poder atingir seu objetivo em menos de 10 minutos.

Desse modo, fica evidente que o processo de aprendizagem pode ser


moldado de acordo com a necessidade do indivduo, e o tempo no ser o mesmo
pois o processo pode ser individualizado, otimizando o tempo para se atingir o
objetivo proposto.

39
Referncia Bibliogrfica

ALCOFORADO, L.F., CAVALCANTE, C.V., Introduo ao R utilizando a


Estatstica Bsica, RJ, Eduff, 2014.
ALCOFORADO, L.F. et al, Portal Estatstica com R! Disponvel em
www.estatisticacomr.uff.br. Acesso em 27/8/15.
BRASIL. Ministrio da Educao. Resoluo n 8, de 28 de novembro de 2008. Institui
as Diretrizes Curriculares Nacionais do curso de Estatstica, de graduao plena, em nvel
superior, 2008.

CASS, STEPHEN, The 2015 top 10 Programming Languages in IEEE Spectrum.


Disponvel em http://spectrum.ieee.org/computing/software/the-2015-top-ten-
programming-languages. 2015.

KARLING, A.A., A didtica necessria, SP, Ibrasa, 1991.


MORAN, J., Desafios na Comunicao Pessoal, 3 Ed., SP, Paulinas, 2007.
SANTOS, A.C.O., CARVALHO, R.F., Polticas pblicas voltadas para o software livre
na educao superior, Revista Eptic, vol. 2, n. 16, 2014.

R Development Core Team (2015). R: A language and environment for statistical


computing. R Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-
07-0, URL http://www.R-project.org

RSTUDIO Team (2015). RStudio: Integrated Development for R. RStudio, Inc., Boston,
MA URL http://www.rstudio.com

40
Brazilian Economic Time Series (BETS): R package
Autoria: Pedro Costa Ferreira, Talitha F. Speranza e
Jonatha A. da Costa (FGV/IBRE)

1. Introduo

O pacote BETS (sigla para Brazilian Economic Time Series) para o R (R


Core Team, 2012) fornece, de maneira descomplicada, as mais relevantes sries
temporais econmicas do Brasil e diversas ferramentas para analis-las. O BETS
preenche uma lacuna no processo de obteno de dados no Brasil, na medida em
que unifica os pontos de acesso s sries e oferece uma interface bastante simples,
flexvel e robusta.

As sries presentes na base de dados do pacote so produzidas por trs


importantes e respeitados centros: o Banco central do Brasil (BACEN), o Instituto
Brasileiro de Geografia e Estatstica (IBGE) e o Instituto Brasileiro de Economia
da Fundao Getlio Vargas (FGV/IBRE).

Originalmente, o BETS deveria apenas reunir em um s lugar o maior


nmero possvel de sries destes centros, dada a dificuldade com que o
pesquisador poderia se defrontar para obt-las. Este objetivo foi cumprido e hoje
o pacote disponibiliza mais de 39 mil sries econmicas brasileiras.

Por conta do vasto tamanho da base de dados, o BETS foi expandido para
prover mecanismos que auxiliem o analista na pesquisa, extrao e exportao das
sries. A partir da a formulao do pacote se transformou e o BETS caminhou
para tornar-se um ambiente integrado de anlise e aprendizado.

Foram incorporadas diversas funcionalidades ausentes do universo R, com


a inteno de facilitar ainda mais a modelagem e a interpretao das sries
fornecidas. Ademais, algumas funes j incluem a opo de gerar sadas
inteiramente didticas, incentivando e auxiliando o usurio a ampliar seus
conhecimentos.

41
Ao longo do captulo ser descrito a estrutura e mostrado algumas das
principais funcionalidades do BETS. Alguns exemplos tpicos de uso tambm
sero exibidos, passo a passo. Na prxima seo, veremos em mais detalhe no que
consiste a base de dados. Em seguida, o arcabouo do pacote ser visto em mais
detalhe, explicando como ele est dividido atualmente.

Introduzimos, tambm, as formas bsicas de uso do BETS, mostrando


como feita a busca, a leitura e o armazenamento das sries. As funes mais
avanadas tambm sero apresentadas, junto com dois estudos de caso completos:
a anlise da srie de produo de bens intermedirios do Brasil e do ndice de
Preos ao Consumidor Amplo (IPCA), utilizando as ferramentas do BETS.

42
2. Banco de dados e estrutura do pacote

2.1 Banco de dados

A figura 1 esquematiza o banco de dados do BETS tal como hoje. Cerca


de 61% da base composta pelas sries produzidas pelo FGV/IBRE, ao passo que
as 39% restantes pertencem ao IBGE e ao BACEN.

Tradicionalmente, o analista poderia obter as sries do IBRE no sistema


FGV Dados, onde esto presentes sries livres e pagas, alm de toda a produo
estatstica da FGV e um conjunto selecionado de indicadores de outros centros.
Para adquirir as sries pagas, necessrio ser assinante e no apenas cadastrado.
Com o BETS, possvel acessar todas estas sries, porm com uma defasagem de
vinte meses para as sries que so pagas.

FIGURA 1: SRIES PRESENTES NO BANCO DE DADOS DO BETS

Uma discusso importante durante a fase de concepo do BETS foi a localizao


da base de dados. A opo de distribuir os dados juntamente com o pacote foi descartada,
j que o CRAN no aceita arquivos de dados (.rdas) muito grandes. Ento, restaram duas
alternativas: coletar os dados dinamicamente, atravs das APIs externas dos sistemas do
Banco Central, do IBGE e do IBRE ou manter um banco de dados utilizando um SGBD.
Da forma que hoje, o pacote implementa uma soluo mista. As sries do IBGE e do
BACEN so adquiridas on the fly, atravs de suas APIs. Para as sries do FGV/IBRE,

43
esse procedimento no necessrio, pois os dados so fornecidos diretamente pela
instituio, que apoia o projeto. As sries so mantidas em uma base de dados construda
com o MySQL.

Tal diviso invisvel ao usurio, que no precisa saber em qual banco deve fazer
suas buscas e sempre ter acesso aos dados mais atuais (com exceo das sries pagas do
IBRE). Esta arquitetura facilita a implementao e a manuteno das estruturas e aumenta
a eficincia do pacote. Usando servidores, a atualizao dos dados feita por uma equipe
de mantenedores, livrando o usurio da obrigao de obter os novos dados manualmente.
Entretanto, torna-se obrigatrio estar conectado internet para obter os dados.

Como j ressaltamos, uma das principais vantagens do BETS a facilidade de


acesso s mais de 39 mil sries histricas em sua base. Isto no teria sido possvel sem
uma tabela de metadados que possusse informaes como a descrio, a periodicidade,
a unidade em que os dados foram representados e as datas de incio e fim de todas as
sries acessveis atravs do pacote. Esta tabela tambm mantida na base MySQL. Nela,
cada srie possui um cdigo nico, tratado como ndice pelo SQL. O pacote auxiliar
RMySQL atua na interface, possibilitando a conexo do R com bancos MySQL.

A estrutura do BETS parecida com a de uma DMP (Data Management Platform).


O conceito de DMP mais aplicado aos grandes sistemas de coleta, armazenamento e
processamento de dados direcionados ao marketing, mas guarda fortes semelhanas com
o que apresentado aqui. O DMP pode ser definido como uma estrutura onde os dados
so centralizados, mesclados e acionados por diversas plataformas. A composio desta
estrutura se d em trs etapas. Primeiro, os dados so coletados por uma API externa.
Ento, eles so organizados de acordo com determinados temas e de modo a otimizar o
tempo de acesso dos algoritmos de busca. Finalmente, o acionamento das informaes
pelo usurio final se d atravs de alguma outra API.

44
2.2 Funcionalidades do Pacote

As funcionalidades do BETS podem ser divididas em quatro grupos


(figura 2). So eles:

Gerenciamento de dados: ferramentas para obter as sries e informaes

sobre elas, englobando tanto a API privada de extrao dos dados diretamente das

fontes quanto a API pblica de recuperao dos dados da base do pacote.

Relatrios dinmicos: documentos que reportam a anlise e as previses

de uma srie escolha, de acordo com algum mtodo bem estabelecido. So

gerados automaticamente, bastando que o usurio fornea o cdigo da srie nas

bases do BETS e alguns parmetros adicionais. Atualmente, esto disponveis a

anlise de modelos SARIMA e a aplicao de redes neurais do tipo GRNN (ver

seo 2.5). Os documentos possuem, obrigatoriamente, comentrios didticos. No

entanto, a prxima verso do BETS dar a opo de gerar relatrios puramente

tcnicos.

Painis de Inflao: documento de anlise de conjuntura, contendo uma

seleo de grficos estilizados das sries histricas mais utilizadas para prever e

controlar a inflao no Brasil. Em verses futuras, o BETS incluir painis para

outros pases e abrangendo outros temas alm da inflao.

Funes adicionais: completam o escopo do pacote, introduzindo

mtodos que auxiliem os analistas e, de modo mais geral, ajudem o usurio a

interagir com as informaes contidas nas sries.

45
FIGURA 2: GRUPOS DE FUNCIONALIDADES DO BETS

O BETS possui, ainda, um outro aspecto funcional que no se encaixa nos


grupos apresentados, por atuar uma nica vez. Quando o pacote instalado,
diversos pacotes teis anlise de dados tambm so instalados. Uma lista
completa destes pacotes exibida na tabela 1. A ideia que o ambiente do usurio
fique totalmente equipado para a manipulao das sries temporais disponveis.
Vrios destes pacotes so utilizados para implementar o prprio BETS, como ser
visto ao longo do texto.

TABELA 1: ALGUNS DOS PACOTES QUE SO INSTALADOS COM O BETS

Nome Descrio Autor


Implementao dos testes de raiz unitria e cointegrao
urca Pfaff et al. (2016)
na anlise economtrica aplicada.
Mtodos e ferramentas para exibio e anlise univariada
de previses de sries temporais, incluindo suavizao
forecast Hyndman (2015)
exponencial atravs de modelos de espao de estado e
modelagem automtica de modelo ARIMA.
ggplot2 um sistema de plotagem de R, com base na Wickham and
ggplot2
gramtica de grficos. Chang (2015)
Traduz grficos feitos com o pacote ggplot2 para uma
Sievert et
plotly verso interativa baseada na web e/ou cria visualizaes al.(2016)
personalizadas baseadas na web diretamente a partir de R.
Grothendieck
sqldf Manipula base de dados no R usando SQL. (2015)
Bivand et
foreign Funes para ler e gravar dados. al.(2016)
Uma classe S3 com mtodos totalmente ordenados para
observaes indexadas. Destina-se particularmente a
sries irregulares de vetores/matrizes numricas e fatores.
Zeileis et al.
zoo As metas de design chaves do pacote so a independncia (2016)
de uma determinada classe de ndice/data/hora e
consistncia com ts e base R, fornecendo mtodos para
estender padres genricos.

46
A interface do usurio com o banco de dados bastante intuitiva. H uma
funo para busca, uma para extrao de dados e uma classe de funes para
armazenamento externo (tabela 2), para que os dados sejam processados por
softwares populares como o Microsoft Excel, o SaS, o Stata ou o SPSS.

TABELA 2: FUNES PARA A INTERAO DO USURIO COM O BANCO DE DADOS DO BETS

Nome Descrio
BETS.search Realiza pesquisa de sries por diferentes caractersticas.
BETS.get Extrai totalmente a srie do banco de dados e carrega para o ambiente R
BETS.save.spss Exporta a srie temporal em um arquivo com extenso .spss
BETS.save.sas Exporta a srie temporal em um arquivo com extenso .sas
BETS.save.stata Exporta a srie temporal em um arquivo com extenso .dta
BETS.save.xlsx Exporta a srie temporal em um arquivo com extenso .xlsx

Com as informaes apresentadas at aqui, fica certamente mais ntida a


promessa que o BETS representa. Extrapolando o bsico fornecimento de dados
com uma quantidade considervel de ferramentas para o estudo das sries, o
pacote pioneiro em permitir que qualquer programador iniciante, de qualquer
parte do mundo, tenha condies de analisar o cenrio econmico do pas. Todo
o poder do BETS estar ao passo de um simples comando de instalao, o
install_packages:

> install_packages("BETS")

47
3. Utilizando o BETS

Discutiremos algumas formas bsicas de uso do pacote. As funes que


no so apresentadas nesta seo sero tratadas nos estudos de caso, com
aplicaes reais. J as funes possivelmente mais importantes do pacote
figuraro em ambas as sees, porm o nvel de detalhamento ser maior aqui.

3.1 Gerenciamento de dados

BETS.search

Devido ao tamanho considervel da base de dados, foi necessrio criar um


modo de pesquisa por sries a partir de seus metadados, isto , uma ferramenta de
busca que utilizasse uma ou mais informaes das sries como palavras-chave.

A funo BETS.search realiza as pesquisas por cada campo da tabela de


metadados descrita mais a frente. A BETS.search naturalmente possibilita
combinaes destas caractersticas, tornando a busca mais flexvel. Ressaltamos
que o acesso base do BETS feito atravs do pacote sqldf, o que torna o tempo
de processamento das buscas suficientemente rpido e mantm a alta performance
do pacote em qualquer ambiente.

O prottipo da BETS.search tem a forma:

BETS.search(description,src,periodicity,unit,code,view =
TRUE,lang = "en")

Onde os argumentos recebem, respectivamente:

description - Um character. String de busca com os termos que devem ou no estar

presentes na descrio da srie desejada.

src - Um character. A fonte dos dados.

periodicity Um character. A frequncia na qual a srie observada.

unit - Um character. A unidade na qual os dados foram medidos.

48
code - Um integer. O cdigo nico da srie na base do BETS.

view - Um boolean. Por padro, TRUE. Se FALSE, os resultados sero mostrados

direto no console do R.

lang - Um character. Idioma da pesquisa. Por padro, 'en', para ingls. Tambm

possivel fazer a pesquisa em portugus, bastando mudar o valor para 'pt'.

Para refinar as buscas, h regras de sintaxe para o parmetro description:

1. Para procurar palavras alternativas, separe-as por espaos em branco. Exemplo:

description = 'ncleo ipca' significa que a descrio da srie deve conter

'ipca' e 'ncleo'.

2. Para procurar expresses inteiras, basta cerc-las com aspas simples. Exemplo:

description = 'ndice 'ncleo ipca'' significa que deve conter na

descrio da srie 'ncleo ipca' e 'ndice'.

3. Para excluir palavras da busca, insira um ~ (o caracter til) antes de cada um delas.

Exemplo: description = 'ipca ~ ncleo' significa que a descrio da srie

deve conter 'ipca' e no pode conter 'ncleo'.

4. Para excluir todas as expresses da busca, de forma semelhante ao item anteiror,

basta cerc-los com ~ e inserir um antes de cada uma delas. Exemplo:

description = 'ndice ~ 'ncleo ipca'' significa que a descrio da

srie deve conter codendice e no pode conter 'ncleo ipca'.

5. possvel pesquisar ou negar vrias palavras ou expresses, desde que sejam

respeitadas as regras precedentes.

6. O espao em branco aps o sinal de negao (~) no necessrio. Mas os espaos

em branco depois de expresses ou palavras so necessrios.

49
Alguns exemplos de uso podem ser vistos abaixo. No necessrio mostrar
os resultados em alguns casos, pois a sada pode ser uma tabela demasiada extensa.
Contudo, garantimos que todas as chamadas funcionam e convidamos o leitor a
test-las.

> BETS.search(description = "sales ~ retail")


> BETS.search(description = "'sales volume index' ~ vehicles")
> BETS.search(description = "'distrito federal'", periodicity = 'A', src = 'IBGE')

> BETS.search(description = "gdp accumulated", unit = "US", view = F)

## Codes Description
## 1 4192 GDP accumulated in the last 12 months - in US$ million
## 2 4386 GDP accumulated in the year - in US$ million
## Periodicity start source unit
## 1 M 01/31/1990 BCB-Depec US$ (million)
## 2 M 01/31/1990 BCB-Depec US$ (million)

> BETS.search(description = "consumption ~ 'seasonally adjusted' ~ private", view = F)

## Codes Description
## 1 7332 Quarterly GDP - observed data (1995=100) - Government
consumption
## 2 22101 Quarterly GDP - observed data (2010=100) - Government
consumption
## Periodicity start source unit
## 1 Q 03/31/1991 IBGE Index
## 2 Q 03/31/1995 IBGE Index

Para mais informaes sobre a BETS.search, incluindo os valores vlidos


em cada campo, consulte o manual de referncia, digitando ?BETS.search no
console do R.

BETS.get

A BETS.get funciona unicamente atravs do cdigo de referncia da srie,


obtido com as consultas feita com a BETS.search. Sua assinatura :

BETS.get(code,data.frame = FALSE)

50
O parmetro code , obviamente, obrigatrio. O argumento opcional
data.frame representa o tipo do objeto que ser retornado. Por padro, seu valor
FALSE, indicando que o objeto devolvido pela funo ser um objeto do tipo ts
(time series). Caso data.frame = TRUE, a srie ser armazenada em um objeto
do tipo data.frame.

Vamos extrair duas das sries pesquisadas anteriormente.

> # Obter a serie do PIB acumulado em 12 meses, em dolares


> gdp_accum = BETS.get(4192)
> window(gdp_accum, start = c(2014,1))

## Jan Feb Mar Apr May Jun Jul


Aug
## 2014 2462906 2468910 2467247 2460576 2458893 2452748 2447154
2437977
## 2015 2365163 2311430 2263498 2210154 2154889 2106212 2051067
1996712
## 2016 1749556 1730334
## Sep Oct Nov Dec
## 2014 2434635 2428324 2421043 2415916
## 2015 1939427 1880209 1823847 1768770
## 2016

> # Obter a serie do PIB do Distrito Federal, a precos de mercado


> gdp_df = BETS.get(23992, data.frame = T)
> head(gdp_df)

## dates GDPamp(2-DF
## 1 2010-04-07 1.441684e+11
## 2 2011-04-07 1.544683e+11
## 3 2012-04-07 1.638808e+11
## 4 2013-04-07 1.753628e+11

BETS.save

Para conferir versatilidade s formas de armazenamento das sries do


BETS, h a possibilidade de criar arquivos com as sries em formatos
proprietrios, isto , formatos que pertencem a softwares pagos.

Basicamente, a BETS.save extrai a srie temporal da base de dados do


pacote na forma de um data.frame e cria um arquivo no formato especificado. No

51
arquivo, h uma tabela onde a primeira coluna conter as datas e a segunda, os
dados.

A funo possui quatro variaes:

BETS.save.sas(code,data = NULL,file.name = "series")

BETS.save.spss(code,data = NULL,file.name = "series")

BETS.save.xlsx(code,data = NULL,file.name = "series")

BETS.save.stata(code,data = NULL,file.name = "series")

Novamente, o parmetro code recebe o cdigo da srie. O usurio pode


fornecer sua prpria srie atravs do argumento data, que pode ser um data.frame
ou um ts. No necessrio acrescentar a extenso ao nome do arquivo no
parmetro file.name.

Alguns exemplos tpicos de uso seriam:

> #Salvar a srie da dvida pblica lquida no formato padro do


Excel
> BETS.save.xlsx(code = 2078, file.name = "series_excel.xlsx")
>
> # Salvar uma srie qualquer no formato do SPSS
> BETS.save.spss(data = myseries, file.name = "series_spss")

52
3.2 Algumas Funes Adicionais

A maior parte das funes adicionais ser coberta nos estudos de caso.
Aqui, falaremos das restantes. Algumas das funes mais especiais do BETS esto
entre elas.

BETS.chart

A BETS.chart foi inicialmente projetada para ser uma funo privada,


auxiliar da BETS.dashboard. No entanto, pode ser de grande valia para o usurio
dispor de um meio de obter os grficos dos dashboards separadamente, de modo
a poder incorpor-los em seus trabalhos.

O prottipo da BETS.chart o que se segue:

BETS.chart(alias,lang = "en",out = "png",file = NULL,start


= c(2006,1),ylim = NULL)

O parmetro alias pode receber uma dentre as vrias opes de grfico.


O segundo parmetro, lang , por padro, 'en', para ingls. Mas, como no caso da
BETS.search, esse valor pode ser modificado para 'pt'. H tambm a opo de
alterar a extenso da sada para 'pdf', redefinindo o argumento out. O parmetro
start especifica qual deve ser a data de incio da srie. Uma vez que se trata de um
grfico de conjuntura, a data de fim no pode ser alterada e sempre o ltimo
dado disponvel. Caso o usurio deseje redimensionar o eixo y, pode determinar
o valor de ylim.

Abaixo dois exemplos de uso da BETS.chart.

> BETS.chart(alias = 'ipca_with_core', file = "images/ipca", out


= "pdf")

53
FIGURA 3: GRFICO DO IPCA (NDICE NACIONAL DE PREOS AO CONSUMIDOR AMPLO) FEITO COM A
BETS.CHART.

> BETS.chart(alias = 'ulc', start = c(2008,1), file = "images/ul


c", out = "pdf")

FIGURA 4: GRFICO DO CUSTO UNITRIO DO TRABALHO FEITO COM A BETS.CHART

54
Para uma lista completa dos grficos disponveis, consulte o manual de
referncia da BETS.chart.

55
3.3 Painis de inflao

BETS.dashboard

Anteriormente, foi dito que o BETS possui uma poderosa ferramenta de


anlise de conjuntura, os painis de inflao. Atualmente, apenas os dados do
Brasil esto disponveis, ento s possvel gerar painis da situao domstica.
Posteriormente, sero incorporados os dados do Banco Mundial e do FMI (Fundo
Monetrio Internacional), de forma que painis internacionais podero ser criados.
Tambm planeja-se expandir o escopo dos painis para alm do tema da inflao.

Vemos abaixo que a estrutura da funo j est preparada para receber as


verses futuras do BETS. Ento, embora os parmetros type e country estejam
presentes, eles ainda no podem ser modificados.

BETS.dashboard(type = "inflation",country = "BR",parameters


= NULL,saveas = NA)

Supondo que tenhamos um arquivo text.txt com o texto que desejamos


incluir no dashboard, chamamos a BETS.dashboard e obtemos um arquivo pdf
cuja primeira pgina ser semelhante mostrada na figura 7. O texto opcional.
Os grficos que sero exibidos tambm so de escolha do usurio, atravs do
parmetro charts (por default, seu valor 'all'). O manual de referncia possui uma
lista completa dos grficos disponveis.

O autor do texto deve fornecer seu nome e seu site e/ou e-mail. O logo no
obrigatrio.

> parameters = vector(mode = "list")


> parameters$author = "FGV/IBRE"
> parameters$url = "http://portalibre.fgv.br/"
> parameters$logo = "logo_ibre.png"
> parameters$text = "text.txt"
> BETS.dashboard(type = "inflation", parameters = parameters)

56
FIGURA 5: PRIMEIRA PGINA DO PAINEL DE INFLAO, COM TEXTO FORNECIDO EXTERNAMENTE ATRAVS DE
UM ARQUIVO .TXT

57
4 Relatrios dinmicos: modelos Box & Jenkins e Grnn (redes neurais)

A partir de agora sero relatados dois casos tpicos de uso do BETS,


procurando modelar as sries presentes no pacote a partir da abordagem de Box
& Jenkins e de redes neurais. H uma funo no BETS que efetua as anlises
exatamente da maneira que ser feita aqui, com um cdigo idntico em muitos
pontos. A sada da funo um relatrio automtico com os resultados e
comentrios didticos. Ao longo do texto, ser explicado como ela pode ser
utilizada.

Antes de comear cada anlise, necessrio examinar muito brevemente


as metodologias empregadas. Para um tratamento mais abrangente dos tpicos
desenvolvidos, consultar Montgomery et al. (2015), Box and Jenkins (1970),
Specht (1991) e Ferreira (2016).

4.1 Metodologia Box & Jenkins

O mtodo de Box & Jenkins permite que os valores futuros da srie em


estudo sejam previstos somente com base nos valores passados e presentes da
mesma srie, isto , as previses so feitas a partir de modelos univariados.

Estes modelos so chamados SARIMA, uma sigla para o termo em ingls


Seasonal Auto-Regressive Integrated Moving Average, e tm a forma:

P (B) p (B) d D Zt = Q (B) q (B) at (1)

onde

Zt a srie em estudo

at um rudo branco

d = (1 B)d o operador de diferenas e d o nmero de razes unitrias

58
D = (1 B s )D o operador de diferenas na frequncia sazonal s e D o nmero

de razes unitrias sazonais

p (B) o polinmio autorregressivo

P (B) o polinmio autorregressivo sazonal

q (B) o polinmio de mdias mveis

Q (B) o polinmio de mdias mveis sazonal

Em sua concepo original, que ser adotada aqui, a metodologia de Box &
Jenkins se divide em trs estgios iterativos:

(i) Identificao e seleo dos modelos: verificao da estacionariedade e da

sazonalidade, com as devidas correes para os casos no estacionrios e

sazonais, e determinao das ordens dos polinmios descritos acima, fazendo uso

das funes de autocorrelao (FAC) e autocorrelao parcial (FACP).

(ii) Estimao dos parmetros do modelo, usando mxima verossimilhana ou

regresso dinmica.

(iii)Diagnstico da conformidade do modelo, atravs de testes estatsticos.

Se o modelo no for aprovado na fase (iii), volta-se ao passo (i). Caso

contrrio, o modelo pode ser utilizado para fazer previses. Na prxima seo,

conforme o exemplo for evoluindo, cada um desses estgios ser observado de

perto e mais ser dito sobre a metodologia.

Preliminares
Vamos trabalhar com a srie de cdigo 21864, a srie de produo de bens

intermedirios do Brasil (PBI). O primeiro passo encontr-la na base de dados

59
do BETS. Como visto anteriormente, isso pode ser feito com a funo

BETS.search. O comando e sua sada so mostrados abaixo.

> # Busca em portugus pela srie de produo de bens intermedi


rios
> BETS.search(description = "'bens intermedirios'", lang = "pt"
, view = F)

## Codes
## 1 1334
## 2 11068
## 3 21864
## 4 ST_1004829
## 5 ST_1007055
## 6 ST_1007057
## 7 ST_1331145
## 8 ST_1331148
##
Description
## 1 Indicadores da produo (1991=100) - Por categoria de uso
- Bens intermedirios
## 2 Indicadores da produo (2002=100) - Por categoria de uso
- Bens intermedirios
## 3 Indicadores da produo (2012=100)
- Bens intermedirios
## 4 IPA-EX-DI - Bens Intermedirios exceto Combustveis e Lubri
ficantes para Produo
## 5 IPA-EX-10- Bens Intermedirios exceto Combustveis e Lubri
ficantes para Produo
## 6 IPA-EX-M - Bens Intermedirios exceto Combustveis e Lubri
ficantes para Produo
## 7
...BENS INTERMEDIRIOS
## 8
...BENS INTERMEDIRIOS
## Periodicity start source unit
## 1 M 31/01/1975 IBGE ndice
## 2 M 31/01/1991 IBGE ndice
## 3 M 01/01/2002 IBGE ndice
## 4 M #N/D FGV|IBRE indice
## 5 M #N/D FGV|IBRE indice
## 6 M #N/D FGV|IBRE indice
## 7 M 01/12/1997 FGV|IBRE indice
## 8 M 01/12/1997 FGV|IBRE indice

Agora, carregamos a srie atravs da funo BETS.get e guardamos


alguns valores para, posteriormente, comparar com as previses do modelo que
ser estabelecido. Tambm criaremos um grfico (figura 6), pois ele ajuda a
formular hipteses sobre o comportamento do processo estocstico subjacente.

60
> # Obteno da srie de cdigo 21864 (Produo de Bens Intermed
irios, IBGE)
> data <- BETS.get(21864)> # Grfico da srie
> plot(data, main = "", col = "royalblue", ylab = "PBI (Nmero
ndice)")
> abline(v = seq(2002,2016,1), col = "gray60", lty = 3)

FIGURA 6: GRFICO DA SRIE DE PRODUO DE BENS INTERMEDIRIOS NO BRASIL.

Quatro caractersticas ficam evidentes. Primeiramente, trata-se de uma


srie homocedstica e sazonal na frequncia mensal. Este ltimo fato
corroborado pelo grfico mensal da srie (figura 7), que mostra o nvel de
produo por ms (a mdia a linha tracejada)

> # Grfico mensal da srie


> monthplot(data, labels = month.abb, lty.base = 2, col = "red",
ylab = "PBI (Nmero ndice)")

61
FIGURA 7: GRFICO MENSAL DA SRIE EM ESTUDO.

Um terceiro aspecto marcante da srie a quebra estrutural em novembro


de 2008, quando ocorreu a crise financeira internacional e a confiana dos
investidores despencou. A quebra impactou diretamente na quarta caracterstica
importante da srie: a tendncia. Incialmente, a tendncia era claramente
crescente, mas no explosiva. A partir de novembro de 2008, porm, parece que
o nvel da srie se manteve constante ou at mesmo decresceu. Em um primeiro
momento, a quebra estrutural ser desconsiderada na estimao dos modelos, mas
logo o benefcio de lev-la em conta explicitamente ficar claro.

Antes de iniciarmos a modelagem de Box & Jenkins, um passo crucial a


determinao da existncia de razes unitrias no polinmio autorregressivo no-
sazonal e sazonal do modelo. De posse desses resultados, obtemos uma srie
estacionria atravs da diferenciao da srie original (caso seja necessrio).
Assim, poderemos identificar a ordem dos parmetros atravs da FAC e FACP,
pois isso deve ser feito atravs de sries estacionrias de segunda ordem.

A funo BETS.ur_test executa o teste Augmented Dickey Fuller (ADF


- Dickey and Fuller (1979)). Ela foi construda em cima da funo ur.df do pacote
urca (Pfaff et al., 2016), que instalado juntamente com o BETS, como explicado
na seo 2.2. A vantagem da BETS.ur_test a sada, desenhada para que o
usurio visualize rapidamente o resultado do teste e tenha todas as informaes de
que realmente necessita. Trata-se de um objeto com dois campos: uma tabela

62
mostrando as estatsticas de teste, os valores crticos e se a hiptese nula rejeitada
ou no, e um vetor contendo os resduos da equao do teste. Esta equao
mostrada abaixo.

yt = + 1 t + 2 yt1 + 1 yt1 + + p1 yt p+1 + t (2)

As estatsticas de teste da tabela do objeto de sada se referem aos


coeficientes (mdia ou drift), 1 (tendncia determinstica) e 2 (raiz unitria).
A incluso da mdia e da tendncia determinstica opcional. Para controlar os
parmetros do teste, a BETS.ur_test aceita os mesmos parmetros da ur.df,
alm do nvel de significncia desejado.

> df = BETS.ur_test(y = diff(data), type = "drift", lags = 11,


+ selectlags = "BIC", level =
"1pct")
>
> # Exibir resultado dos testes
> df$results

## statistic crit.val result

## tau2 -3.024107 -3.46 TRUE


## phi1 4.598267 6.52 FALSE

> # Fazer FAC dos resduos, com intervalo de confiana de 99%


> BETS.corrgram(df$residuals,ci=0.99,style="normal",lag.max = 11
)

FIGURA 8: FUNO DE AUTOCORRELAO DOS RESDUOS DO TESTE DE DICKEY-FULLER

63
Portanto, para a srie em nvel, observa-se que no se pode rejeitar a
hiptese nula de existncia de uma raiz unitria ao nvel de confiana de 95%,
pois a estatstica de teste maior do que o valor crtico. A FAC dos resduos da
equao do teste evidencia que ele foi bem especificado, pois a autocorrelao no
significativa at a dcima primeira defasagem. Este grfico da FAC foi feito com
uma funo do BETS que ser apresentada em breve.

Agora, iremos aplicar a funo diff srie repetidas vezes e verificar se a


srie diferenciada possui uma raiz unitria.

> ns_roots = 0
> d_ts = diff(data)
>
> # Loop de testes de Dickey-Fuller.
> # A execuo interrompida quando no for possvel rejeitar a
hiptese nula
> while(df$results[1,"statistic"]> df$results[1,"crit.val"]){

Logo, para a srie em primeira diferena, rejeita-se a hiptese nula de que


h raiz unitria a 5% de significncia.

Um outro pacote bastante til que instalado com o BETS o forecast


(Hyndman, 2015). Usare-mos a funo nsdiffs deste pacote para realizar o teste
de Osborn-Chui-Smith-Birchenhall (Osborn et al., 1988) e identificar razes
unitrias na frequncia sazonal (em nosso caso, mensal).

> library(forecast)
>
> # Testes OCSB para razes unitrias na frequencia sazonal
> nsdiffs(data, test = "ocsb")

## [1] 0

Infelizmente, a nsdiffs no fornece nenhuma outra informao sobre o


resultado do teste alm do nmero de diferenas sazonais que devem ser tiradas

64
para eliminar as razes unitrias. Para o caso da srie em anlise, o programa indica
que no h raiz unitria sazonal, no sendo necessria, portanto, diferenas da
parte sazonal da srie temporal.

A seguir, criaremos um modelo para a srie escolhida de acordo com os


passos definidos na anteriormente.

a. Identificao

As concluses anteriores so corroboradas pela funo de autocorrelao


da srie em primeira diferena (figura 9). Ela mostra que autocorrelaes
estatisticamente significativas, isto , fora do intervalo de confiana, no so
persistentes para defasagens mltiplas de 12 e no entorno destas, indicando a
ausncia da raiz unitria sazonal.

As funes do BETS que utilizamos para desenhar correlogramas a


BETS.corrgram. Diferente-mente de sua principal alternativa, a Acf do pacote
forecast, a BETS.corrgram retorna um grfico atraente e oferece a opo de
calcular os intervalos de confiana de acordo com a frmula proposta por Bartlett
(Bartlett, 1946). Sua maior vantagem, contudo, no pde ser exibida aqui, pois
depende de recursos em flash. Caso o parmetro style seja definido como 'plotly',
o grfico torna-se interativo e mostra todos os valores de interesse
(autocorrelaes, defasagens e intervalos de confiana) com a passagem do
mouse, alm de oferecer opes de zoom, pannins e para salvar o grfico no
formato png.

> # Correlograma de diff(data)


> BETS.corrgram(diff(data), lag.max = 48, mode = "bartlett",
style = "normal")

65
FIGURA 9: FUNO DE AUTOCORRELAO DE ZT

O correlograma acima ainda no suficiente para determinamos um


modelo para a srie. Faremos, ento, o grfico da funo de autocorrelao parcial
(FACP) de Zt (definido como a primeira diferena de Zt). A BETS.corrgram
tambm pode ser utilizada para este fim.

> # Funo de autocorrelao parcial de diff(data)


> BETS.corrgram(diff(data), lag.max = 36, type = "partial",
style="normal")

FIGURA 10: FUNO DE AUTOCORRELAO PARCIAL DE ZT

A FAC da figura 9 e a FACP da figura 10 podem ter sido geradas por um


processo SARIMA(0,0,2) (1,0,0). Esta conjectura se baseia na observao de que

66
as defasagens mltiplas de 12 parecem apresentar corte brusco na FACP a partir
da segunda (isto , a de nmero 24) e decaimento exponencial na FAC. Alm
disso, as duas primeiras defasagens da FAC parecem significativas, enquanto as
demais, no. H, ainda, alguma evidncia de decaimento exponencial na FACP,
exceto na frequncia sazonal. Os dois ltimos fatos indicam que o polinmio de
mdias mveis (no sazonal) pode ter ordem 2. Por estas razes, o primeiro
modelo proposto para Zt ser um SARIMA(0,1,2)(1,0,0)[12].

b. Estimao

Para estimar os coeficientes do modelo SARIMA(0,1,2)(1,0,0)[12], ser


aplicada a funo Arima do pacote forecast. Os testes t sero feitos atravs da
funo BETS.t_test do BETS, que recebe um objeto do tipo arima ou Arima,
o nmero de variveis exgenas do modelo e o nvel de significncia desejado,
devolvendo um data.frame contendo as informaes do teste e do modelo
(coeficientes estimados, erros padro, estatsticas de teste, valores crticos e
resultados dos testes).

> # Estimacao dos parmetros do modelo


> model1 = Arima(data, order = c(0,1,2), seasonal = c(1,0,0))
>
> # Teste t com os coeficientes estimados
> # Nvel de significncia de 1%
> BETS.t_test(model1, alpha = 0.01)

## Coeffs Std.Errors t Crit.Values Rej.H0


## ma1 -0.2357448 0.07507782 3.140005 2.606518 TRUE
## ma2 0.2506416 0.08508626 2.945735 2.606518 TRUE
## sar1 0.8261948 0.03945109 20.942257 2.606518 TRUE

Conclui-se pela coluna Rej.H0 que os dois coeficientes do modelo, quando


estimados por mxima verossimilhana, so estatisticamente significativos a 99%
de confiana.

67
c. Testes de Diagnstico

O objetivo dos testes de diagnstico verificar se o modelo escolhido


adequado. Neste trabalho, duas conhecidas ferramentas sero empregadas: a
anlise dos resduos padronizados e o teste de Llung-Box (Ljung and Box, 1978).

O grfico dos resduos padronizados (figura 13) ser feito com o auxlio
da funo BETS.std_resid, que foi implementada especificamente para isso.

> # Grfico dos resduos padronizados


> resids = BETS.std_resid(model1, alpha = 0.01)
>
> # Evidenciar outlier
> points(2008 + 11/12, resids[84], col = "red")

FIGURA 11: RESDUOS PADRONIZADOS DO PRIMEIRO MODELO PROPOSTO

Observamos que h um outlier proeminente e estatisticamente


significativo em novembro de 2008. Este ponto corresponde data da quebra
estrutural que identificamos na figura 11. Portanto, foi proposto um segundo
modelo, que inclui uma dummy definida como se segue:

0, < 2008
= { 1, 2008 2008 (3)
0, > 2008

68
Esta dummy pode ser criada com a funo BETS.dummy, como mostramos
abaixo. Os parmetros start e end indicam o incio e o fim do perodo coberto pela
dummy, que nada mais que uma srie temporal cujos valores podem ser apenas
0 ou 1. Os campos from e to indicam o intervalo em que a dummy deve assumir
valor 1.

> dummy = BETS.dummy(start = c(2002,1), end = c(2015,10), from =


c(2008,9), to = c(2008,11))
> dummy

## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2002 0 0 0 0 0 0 0 0 0 0 0 0
## 2003 0 0 0 0 0 0 0 0 0 0 0 0
## 2004 0 0 0 0 0 0 0 0 0 0 0 0
## 2005 0 0 0 0 0 0 0 0 0 0 0 0
## 2006 0 0 0 0 0 0 0 0 0 0 0 0
## 2007 0 0 0 0 0 0 0 0 0 0 0 0
## 2008 0 0 0 0 0 0 0 0 1 1 1 0
## 2009 0 0 0 0 0 0 0 0 0 0 0 0
## 2010 0 0 0 0 0 0 0 0 0 0 0 0
## 2011 0 0 0 0 0 0 0 0 0 0 0 0
## 2012 0 0 0 0 0 0 0 0 0 0 0 0
## 2013 0 0 0 0 0 0 0 0 0 0 0 0
## 2014 0 0 0 0 0 0 0 0 0 0 0 0
## 2015 0 0 0 0 0 0 0 0 0 0

Como pode ser visto nos resultados da execuo do trecho de cdigo a


seguir, a estimao deste modelo atravs de mxima verossimilhana resultou em
coeficientes estatisticamente diferentes de 0 ao nvel de significncia de 5%,
inclusive para a dummy. O grfico dos resduos padronizados dos valores
ajustados pelo novo modelo (figura 12) tambm mostra que a incluso de Dt foi
adequada, uma vez que no h mais evidncia de quebra estrutural.

> # Estimacao dos parmetros do modelo com a dummy


> model2 = Arima(data, order = c(0,1,2), seasonal = c(1,0,0),
xreg = dummy)
>
> # Teste t com os coeficientes estimados
> # Nvel de significncia de 1%
> BETS.t_test(model2, alpha = 0.01)

## Coeffs Std.Errors t Crit.Values Rej.H0


## ma1 -0.2512842 0.07264346 3.459144 2.606518 TRUE
## ma2 0.3193920 0.09022771 3.539843 2.606518 TRUE

69
## sar1 0.8361212 0.03822978 21.870938 2.606518 TRUE
## dummy 5.1090010 1.29719620 3.938495 2.606518 TRUE

> # Grfico dos resduos padronizados


> resids = BETS.std_resid(model2, alpha = 0.01)
>
> # Evidenciar novembro de 2008
> points(2008 + 11/12, resids[84], col = "red")

FIGURA 12: RESDUOS PADRONIZADOS DO MODELO PROPOSTO APS A DETECO DE QUEBRA ESTRUTURAL

> # Mostrar BIC dos dois modelos estimados


> model1$bic

## [1] 847.3404

> model2$bic

## [1] 838.2246

Notamos, ainda, que o Bayesian Information Criteria (BIC - Schwarz


(1978)) do modelo com a dummy menor. Logo, tambm por este critrio, o
modelo com a dummy deve ser preferido ao anterior.

O teste de Ljung-Box para o modelo escolhido pode ser executado atravs


da funo Box.test do pacote stats. Para confirmar o resultado dos testes, fazemos
os correlogramas dos resduos e vemos se h algum padro de autocorrelao.

> # Teste de Ljung-Box nos resduos do modelo com a dummy


> boxt = Box.test(resid(model2), type = "Ljung-Box",lag = 11)
> boxt

70
##
## Box-Ljung test
##
## data: resid(model2)
## X-squared = 10.867, df = 11, p-value = 0.4545

> # Correlograma dos resduos do modelo com a dummy


> BETS.corrgram(resid(model2), lag.max = 20, mode = "bartlett",
style = "normal")

FIGURA 13: FUNO DE AUTOCORRELAO DOS RESDUOS DO MODELO COM A DUMMY.

O p-valor de 0.4545 indica que h grande probabilidade de a hiptese nula


de que no h autocorrelao nos resduos no seja rejeitada. Parece ser o caso,
como mostra a figura 13. Conclumos, ento, que o modelo foi bem especificado.

d. Previses

O BETS fornece uma maneira conveniente para fazer previses de


modelos SARIMA e de GRNNs. A funo BETS.predict recebe os parmetros
da funo forecast do pacote homnimo ou da BETS.grnn.test (a ser tratada
adiante, no segundo estudo de caso) e devolve no apenas os objetos contendo as
informaes da previso, mas tambm um grfico da srie com os valores
preditos. Essa visualizao importante para que se tenha uma ideia mais

71
completa da adequao do modelo. Opcionalmente, podem tambm ser mostrados
os valores efetivos do perodo de previso.
Fazendo uso da BETS.predict para gerar as previses do modelo
proposto. Os parmetros object (objeto do tipo arima ou Arima), h (horizonte de
previso) e xreg (a dummy para o perodo de previso) so herdados da funo
forecast. Os demais so da prpia BETS.predict, sendo todos parmetros do
grfico, com exceo de actual, os valores efetivos da srie no perodo de
previso.

> new_dummy = BETS.dummy(start = start(data_test), end = end(dat


a_test))
>
> preds = BETS.predict(object = model2, xreg = new_dummy, actual
= data_test,
+ xlim = c(2012, 2016.2), ylab = "Milhes de Reais",
style = "normal")

FIGURA 14: GRFICO DAS PREVISES DO MODELO SARIMA PROPOSTO.

As reas em azul em torno da previso so os intervalos de confiana de


85% (azul escuro) e 95% (azul claro). Parece que a aderncia das previses foi
satisfatria. Para dar mais significado a esta afirmao, podemos verificar vrias
medidas de ajuste acessando o campo 'accuracy' do objeto retornado.
> preds[['accuracy']]

## ME RMSE MAE MPE MAPE


ACF1
## Test set -3.453861 3.74175 3.453861 -4.254888 4.254888 -0.215

72
4201
## Theil's U
## Test set 0.8359621

O outro campo deste objeto, 'predictions', contm o objeto retornado pela


forecast (ou pela BETS.grnn.test, se for o caso). Na realidade, este campo
ainda conta com um dado adicional: os erros de previso, caso sejam fornecidos
os valores efetivos da srie no perodo de previso.

O uso da BETS.report para a modelagem SARIMA

A funo BETS.report executa toda a modelagem Box & Jenkins para


qualquer srie presente no banco de dados do BETS e gera um relatrio com os
resultados, como foi dito no incio desta seo. Ela aceita trs parmetros,
descritos na tabela 3, abaixo.

TABELA 3: PARMETROS DA FUNO BETS.REPORT

Nome Tipo Descrio

Cdigos das sries no banco do BETS ou objetos do


ts list
tipo ts

Tipo da modelagem a ser efetuada. Atualmente, pode


mode character
ser SARIMA ou GRNN

parameters list Parmetros do relatrio

report.file character Diretrio e nome do arquivo de sada

Tipo do arquivo para salvar a srie em estudo mais as


series.saveas character
previses do modelo.

Se utilizarmos a modelagem SARIMA, a lista parameters dever ser


composta dos seguintes campos:

73
TABELA 4: CAMPOS DA LISTA PARAMS DA FUNO BETS.REPORT CASO A ANLISE SEJA DO TIPO SARIMA
Nome Tipo Descrio
lag.max integer Defasagem mxima dos correlogramas
n.ahead integer Nmeros de passos frente nas previses

Para modelar a srie de produo de bens intermedirios de maneira


bastante similar que fizemos neste artigo, no necessrio sequer carregar os
dados, bastando executar o trecho de cdigo que mostramos a seguir.

> parameters = list(


+ lag.max = 48,
+ n.ahead = 12 )
>
> BETS.report(ts = 21864, params = parameters)

74
FIGURA 15: INCIO DO ARQUIVO DE SADA DA FUNO BETS.REPORT PARA A SRIE EM ESTUDO.

O resultado abre automaticamente, na forma de um arquivo .html. Um


trecho deste arquivo pode ser visto na figura 15. Ele contm muito mais do que
pode ser visto na figura, a saber:

75
As informaes da srie tal como se encontram na tabela de

metadados do BETS. O grfico da srie, feito com o pacote

dygraphs (Vanderkam et al., 2016).

Os passos envolvidos na identificao de um possvel modelo:

testes de raiz unitria (por enquanto, apenas os testes ADF e o

OCSB) e correlogramas da srie original, da srie diferenciada (se

for o caso) e sazonalmente diferenciada (se for o caso).

A estimao dos parmetros e o resultado da seleo automtica do

modelo pela funo auto.arima do pacote forecast.

Teste de Ljung-Box para autocorrelao nos resduos.

As previses n passos frente utilizando a funo forecast e um

grfico da srie original com os valores previstos e os intervalos de

confiana, tambm feito com o dygraphs

76
4.2 General Regression Neural Networks (GRNNs)

A BETS.report tambm produz relatrios que aplicam a metodologia de


redes neurais. Em particular, de redes do tipo GRNN (General Regression Neural
Network), tal como proposta por Specht (1991). O treinamento e as previses das
redes so feitos com o auxlio do pacote grnn (Chasset, 2013). Neste mtodo,
outras sries podem ser utilizadas como regressoras, isto , como variveis
explicativas.
A figura 16 ilustra a estrutura de uma GRNN. A primeira camada, chamada
camada de distribuio, apenas uma representao dos vetores de entrada. Na
segunda camada, h um neurnio para cada padro de treinamento. Suas funes
de ativao so gaussianas multivariadas centradas no correspondente vetor de
treinamento.
A camada seguinte possui um neurnio que calcula o numerador da
equao geral da GRNN (equao 4), onde os pesos so os prprios vetores de
treinamento. O segundo neurnio desta camada calcula o denominador da equao
e utiliza pesos de valor 1. A funo do denominador normalizar a sada.
2
=1 exp( )
() = 2 2 (4)
2
=1 exp( 2 )
2

onde D2 = (Z Xi ) T (Z Xi ) e tal que Xi o vetor de treinamento i, i [1, n]. Z um


i
vetor de entrada, Y(Z) a sada e o campo receptivo dos neurnios.

77
FIGURA 18: ESQUEMA DE UMA GRNN

FIGURA 16: ESQUEMA DE UMA GRNN

Nota-se que quanto mais distante o vetor de entrada estiver do padro de


treinamento de determinado neurnio, mais baixa ser sua contribuio para o
termo correspondente nos somatrios. importante observar que a performance
melhora consideravelmente se os vetores de entrada forem normalizados, pois isso
evita distores causadas por diferentes escalas ou valores discrepantes.

Como mencionado, h apenas um parmetro a ser definido na GRNN. Este


parmetro o campo receptivo, (sigma), o desvio padro das funes de
ativao.

A seguir, a anlise, como mencionado anteriormente, da srie do ndice de


Preos ao Consumidor Amplo (IPCA) a partir de uma GRNN, usando ferramentas
providas pelo BETS.

Preliminares

Pretende-se modelar a srie do IPCA a partir da noo da Curva de Phillips


(Phillips, 1958). Uma verso da curva a representada pela equao 5. Ela busca

78
explicar como a taxa de inflao efetiva formada. A hiptese bsica que ela
proporcional a uma combinao linear da inflao, da meta da inflao e do hiato
do produto, todos avaliados no perodo anterior.

t = t1 + (1 ) t1 + y t1 (5)

onde

a taxa de inflao
a persistncia da taxa de inflao
a elasticidade da inflao em relao ao hiato do produto
y o hiato do produto

No entanto, h indcios de que modelos lineares no captam muito bem a


relao entre estas variveis. Felizmente, problemas no lineares podem ser
facilmente resolvidos com o uso de redes neurais artificiais, como faremos aqui.

Todas as sries de que necessitamos esto presentes nas bases do BETS,


bastando utilizar a BETS.get para obt-las.

> # Srie do PIB nominal acumulado em 12 meses


> gdp = BETS.get(4382)
>
> # Srie do IPCA acumulado em 12 meses
> ipca = BETS.get(13522)
>
> # Srie das metas de inflao medida pelo IPCA
> target = BETS.get(13521)

A srie das metas de inflao medida pelo IPCA anual e termina em


2016, mas como as demais so mensais e terminam em novembro de 2016,
devemos efetuar uma transformao para tornar os dados mensais.

> target_monthly = vector(mode = "numeric")


>
> for(t in target){
+ target_monthly = c(target_monthly, rep(t,12))
+ }
>
> target = ts(target_monthly, start = c(1999,1), end = c(2016,11
), frequency = 12)

79
A srie do PIB tambm deve ser transformada. Deve-se trabalhar com os
valores reais do hiato do produto, ou seja, teremos que deflacionar a srie do PIB
utilizando algum ndice de inflao e calcular seu desvio em relao tendncia
observada. A primeira operao ser realizada com uma funo do BETS, a
BETS.deflate. O deflator selecionado foi o prprio IPCA. O argumento type
indica que a srie do IPCA est em ponto percentual (tambm possvel
deflacionar com sries que estejam em porcentagem ou em nmero ndice).

> gdp_real = BETS.deflate(gdp, ipca, type = "point.perc")

A tendncia ser encontrada atravs de um filtro HP (Hodrick and Prescott,


1997). Este filtro est disponvel no pacote mFilter (Balcilar, 2016).

> library(mFilter)
> trend = fitted(hpfilter(gdp_real))
> h_gdp_real = gdp_real - trend

Por fim, ser construdo um grfico das duas principais sries que sero
utilizadas daqui para a frente: o IPCA e o hiato do PIB real. Mostraremos apenas
os dados aps 1996, uma vez que o Plano Real, de 1994, resultou em uma quebra
estrutural muito significativa e os valores discrepantes entre os dois perodos
dificultam a visualizao.

> h_gdp_real = window(h_gdp_real, start = c(1996,1))


> ipca = window(ipca, start = c(1996,1))
>
> plot(h_gdp_real,type="l",col="firebrick3", ylab = "Milhes de
Reais")
> par(new=TRUE)
> plot(ipca, type="l",col="royalblue",xaxt="n",yaxt="n",xlab="",
ylab="")
> axis(4)
> mtext("%",side=4,line=3)
> legend("topright",col=c("firebrick3","royalblue"),
+ lty=1,legend=c("Hiato do PIB Real","IPCA"), cex = 0.7)

80
FIGURA 17: GRFICO DO IPCA E DO HIATO DO PIB REAL

Observa-se que h uma ntida relao, embora complexa, entre as duas


sries, o que sugere que o hiato do PIB real de fato tem poder explicativo sobre o
IPCA. Enxergamos uma relao pouco intuitiva, pois aparenta ser negativa. Isso,
evidentemente, ocorre por haver uma defasagem do impacto do hiato na inflao.

A relao da meta da inflao com a inflao efetiva mais difcil de notar,


j que as metas variam muito pouco. Por essa razo, no chegamos a exibir um
grfico mostrando as duas sries. Entretanto, sabemos o efeito que as metas tm
sobre a formao das expectativas de inflao e, ento, no podemos ignor-las
em nossa anlise.

Normalizao

A normalizao dos valores de entrada um passo muito importante se


estivermos trabalhando com redes neurais. Normalizar significa padronizar os
valores das sries de modo a suavizar sua variabilidade e aumentar a acurcia da
computao numrica, removendo redundncias. O efeito da normalizao,
portanto, melhorar a performance das redes, ajudando a evitar falhas de
simulao e tornando-as mais eficientes.

81
Os procedimentos de normalizao foram considerados relevantes o
suficiente para que fosse criada uma funo especfica que os executasse. Esta
funo a BETS.normalize. Sua estrutura bastante simples e h apenas trs
parmetros: os dados que devem ser padronizados, o tipo de normalizao e o
intervalo em que os valores devem ficar. O segundo parmetro pode receber os
valores 'maxmin' ou 'scale'. O terceiro s faz sentido se for utilizada a
normalizao 'maxmin' e seu valor default c(0,1).

Aqui, ser aplicado o outro tipo de normalizao diponvel, o scale, que


realiza duas operaes: subtrai de cada elemento a mdia da srie e os divide pelo
desvio padro. Vamos, tambm, guardar a mdia e o desvio padro da srie do
IPCA, de modo a posteriormente obter os valores preditos pela GRNN na escala
original.

> # Normalizao dos valores das sries


> h_gdp_real.norm = BETS.normalize(h_gdp_real, mode = "scale")
> ipca.norm = BETS.normalize(ipca, mode = "scale")
> target.norm = BETS.normalize(target, mode = "scale")
>
> ipca.mean = mean(ipca)
> ipca.sd = sd(ipca)

Treinamento

Antes de treinarmos a rede, necessrio inicializar os parmetros aceitos


pela funo de treinamento, a BETS.grnn.train. Ela tem o seguinte prottipo:

BETS.grnn.train = function(train.set,sigma,step =
0.1,select = TRUE,criterion = "MAPE")

O argumento train.set uma lista de objetos do tipo ts (sries temporais),


onde a primeira deve ser a varivel dependente (no nosso caso, o IPCA) e as
demais, os regressores. Cada defasagem deve ser fornecida como um regressor
adicional. Trabalharemos com as primeiras duas defasagens do IPCA (que

82
daremos o nome de ipca_1 e ipca_2), do hiato do produto (h_gdp_1 e h_gdp_2) e
da meta de inflao (target_1 e target_2). Se o valor do parmetro select for
mantido como o default (TRUE), cada possvel combinao de regressores
formar uma rede a ser treinada e avaliada de acordo com seus valores ajustados.
A medida de ajuste pode especificada pelo argumento criterion, cujo valor padro
o MAPE. Caso select seja FALSE, apenas uma rede ser treinada, utilizando
todos os regressores da lista.

Os campos sigma e step se referem ao parmetro , o campo receptivo dos


neurnios. O valor de sigma pode ser nico ou um intervalo (um vetor com dois
nmeros). Caso seja um intervalo, ser variado (sigma[2]-sigma[1])/step vezes,
sendo portanto o tamanho da variao determinado por step (por padro, 0.1). Isto
significa que, para cada conjunto de regressores, sero treinadas tantas redes
quanto forem os valores de sigma. Novamente, o melhor resultado ser definido
de acordo com critrio estabelecido pelo parmetro criterion.

Como a srie da meta de inflao comea em janeiro de 1999 e usaremos


duas defasagens, trabalharemos apenas com janelas de maro de 1999 a janeiro de
2016, para todas as sries. Os demais dados sero aproveitados para fazer
previses, na fase de teste das redes.

> # Prepara uma lista com as sries originais


> series = vector(mode = "list")
> series[[1]] = ipca.norm
> series[[2]] = h_gdp_real.norm
> series[[3]] = target.norm
>
> # Cria a lista que conter as sries originais e as defasadas
> complete = vector(mode = "list")
> complete[[1]] = ipca.norm
>
> # Determina o nmero maximo de defasagens (2)
> lag.max = 2

>
> # Preenche a lista com as defasagens
> nvars = length(series)
>
> for(i in 1:nvars){
+ s = 1 + (i-1)*lag.max
+ for(j in 1:lag.max){
+ complete[[s + j]] = lag(series[[i]],-j)

83
+ }
+ }
>

> # Redimensiona e nomeia as sries, colocando-as no conjunto de


treinamento
> train = vector(mode = "list")
> names = c("ipca","ipca_1", "ipca_2","h_gdp_1","h_gdp_2","targe
t_1","target_2")
>
> for(i in 1:length(complete)){
+ train[[i]] = window(complete[[i]], start = c(1999,3), end =
c(2016,1))
+ }

Finalmente, a BETS.grnn.train acionada. A funo retorna uma lista


de at 20 resultados, cada um representando uma rede treinada e suas informaes.
Eles so ordenados de acordo com a medida de ajuste, do melhor resultado para o
pior. O objeto que representa um resultado possui vrios campos, descritos na
tabela 5.

> results = BETS.grnn.train(train, sigma = c(0.1,1.6), step = 0.


1)

#> [1] "General Regression Neural Network"


#> id mape regs sigma
#> 63 63 6.595498 2,3,4,5,6,7 0.06
#> 57 57 6.690169 2,3,4,5,6 0.06
#> 58 58 6.980813 2,3,4,5,7 0.06
#> 61 61 9.656826 2,4,5,6,7 0.06
#> 48 48 9.769265 2,4,5,6 0.06
#> 42 42 10.088099 2,3,4,5 0.06
#> 49 49 10.274599 2,4,5,7 0.06
#> 62 62 12.177389 3,4,5,6,7 0.06
#> 52 52 12.390618 3,4,5,6 0.06
#> 53 53 12.602462 3,4,5,7 0.06
#> 59 59 13.520017 2,3,4,6,7 0.06
#> 43 43 13.626602 2,3,4,6 0.06
#> 44 44 13.919934 2,3,4,7 0.06
#> 60 60 15.515526 2,3,5,6,7 0.06
#> 45 45 15.696302 2,3,5,6 0.06
#> 46 46 15.939323 2,3,5,7 0.06
#> 22 22 16.541114 2,3,4 0.06
#> 23 23 17.733671 2,3,5 0.06
#> 26 26 18.493072 2,4,5 0.06
#> 32 32 19.112481 3,4,5 0.06

84
FIGURA 18: GRFICO DAS PREVISES DA GRNN

Nota-se que o valor do MAPE aumenta quase que exponencialmente com


o aumento do campo receptivo , com um aparente limite superior de 140. O
grfico sugere, ainda, que o limite inferior do intervalo para a variao do s seja
diminudo, de forma a tornar o MAPE do ajuste menor. Entretanto, esbarramos
em um problema: tipicamente, valores muito baixos de costumam levar ao
overfitting (supertreinamento, isto , a rede incorpora o rudo ao seu aprendizado).
Na prtica, isso significa que as previses sero piores, mesmo que o MAPE dos
valores ajustados seja muito baixo, ou seja, a rede no aprende a generalizar.

TABELA 5: CAMPOS DA LISTA DE RESULTADOS RETORNADOS PELA FUNO BETS.GRNN.TRAIN


Nome Tipo Descrio
Valor da medida de desempenho da rede, calculada atravs
accuracy numeric dos valores ajustados e dos valores efetivos da srie em
estudo. Por default, o valor do MAPE.
Valores ajustados pela rede, isto , valores previstos pela
fitted vector rede um passo frente, aps o treinamento e utilizando como
entradas os valores dos regressores
Objeto retornado pela funo grnn, representando uma rede
net list
treinada.
sigma numeric Parmetro
regressors vector ndices dos regressores no conjunto de treinamento original
Medida de ajuste versus sigma de cada rede treinada com os
sigma.accuracy data.frame
mesmos regressores, mas variando o .
residuals vector Resduos, ou seja, valores efetivos menos valores ajustado

Na tabela 5, fica evidente que o uso da BETS.grnn.train traz muitas


vantagens em relao funo de treinamento do pacote grnn. No apenas os

85
regressores podem ser automaticamente escolhidos, mas o parmetro pode ser
variado e, ao final, so fornecidas as mais diversas informaes sobre os
resultados do treinamento das melhores redes. Alm disso, a funo retorna mais
dois objetos: um grfico mostrando a evoluo do desempenho contra o sigma das
redes que utilizam o conjunto de regressores que resultou na melhor performance
e uma tabela resumindo os resultados.

Testes

H tambm uma funo que executa os testes das redes separadamente, a


BETS.grnn.test. Ela recebe a lista de resultados gerada pela funo de treinamento
e uma lista de sries de entrada, onde a primeira srie deve conter os valores
efetivos da varivel dependente e as demais, os valores dos regressores no perodo
de previso. importante que a ordem dada s sries desta lista siga a ordem da
lista que representou o conjunto de treinamento. O uso da BETS.grnn.test
exemplificado abaixo.

> # Preparao da lista de sries


> test = vector(mode = "list")
>
> for(i in 1:length(complete)){
+ test[[i]] = window(complete[[i]], start = c(2016,2), end = c
(2016,11))
+ }
>
> # Testes
> best.net = BETS.grnn.test(results,test)
>
> # Campo 'accuracy' do objeto best.net (MAPE)
> best.net[['accuracy']]

## [1] 36.48025

> # Regressores da melhor rede em termos de previso


> regs = best.net[['regressors']]
> names[regs]

## [1] "ipca_1" "ipca_2" "h_gdp_1" "target_2"

86
interessante notar que os regressores escolhidos incluem o prprio IPCA
e a primeira defasagem do hiato do PIB real, como previsto pela Curva de Phillips.
Entretanto, a meta da inflao parece no ter muito poder explicativo, ao contrrio
do que espervamos. Este pode ser um indicativo, ainda que muito tnue, de que
os comunicados do Banco Central no so tidos como crveis pelo mercado, de
maneira geral, mas o modelo demasiado simples para que cheguemos a alguma
concluso deste tipo.

A BETS.grnn.test retorna uma lista com informaes sobre a melhor


rede em termos do critrio de avaliao das previses. Por padro, esse critrio
novamente o MAPE, calculado a partir dos valores previstos e efetivos. A lista
retornada compatvel com a esperada pela BETS.predict e, portanto, tambm
poderamos utiliz-la para efetuar as previses. Para isso, passamos os mesmos
parmetros da BETS.grnn.test, tal como fizemos no caso da modelagem
SARIMA.

Assim, possvel visualizar o grfico das previses, com uma vantagem


adicional: a BETS.predict permite que os valores sejam desnormalizados,
bastando que a mdia e o desvio padro sejam fornecidos atravs do parmetro
unnorm. Isto facilita a apreciao dos valores e permite que um novo clculo da
medida de ajuste seja feito. A medida calculada com os valores desnormalizados
mais significativa, pois representa os desvios na escala em que os valores foram
de fato observados.

> preds = BETS.predict(results, test, actual = test[[1]],


+ unnorm = c(ipca.mean, ipca.sd), xlim = c(
2013, 2016 + 11/12),
+ ylab = "%", style = "normal")

> preds[['accuracy']]

## ME RMSE MAE MPE MAPE ACF1


## Test set -0.3325575 0.6120629 0.5200998 -3.557437 5.872089 0.161466
## Theil's U
## Test set 1.096037

87
FIGURA 19: GRFICO DAS PREVISES DA GRNN

Como foi avaliado se o MAPE de 5.87 um resultado satisfatrio? Uma


boa estratgia comparar com o MAPE de um modelo linear. Isto pode ser feito
rapidamente atravs da funo auto.arima do pacote forecast. Ela busca selecionar
automaticamente o melhor modelo SARIMA para uma determinada srie. Nem
sempre o melhor resultado possvel encontrado, mas uma boa maneira de se
ter uma ideia de qual seria um modelo linear razovel.

> model = auto.arima(train[[1]])


>
> bm = BETS.predict(model, h=9, actual = test[[1]],
+ unnorm = c(ipca.mean, ipca.sd), style = "non
e")
>
> bm[['accuracy']]

## ME RMSE MAE MPE MAPE ACF1


## Test set -0.7686467 0.8546816 0.7686467 -9.196929 9.196929 0.2820672
## Theil's U
## Test set 1.096037

Se consultarmos o campo arma do objeto retornado pela auto.arima,


vemos que o modelo selecionado foi um SARIMA(1,1,0)(2,0,2)[12], com um
MAPE de 9.2. um MAPE maior que os das previses da GRNN, mas antes de
fazermos qualquer afirmao sobre a preciso relativa das previses dos dois
modelos, precisamos estabelecer se elas so estatisticamente diferentes entre si.

88
Isto pode ser feito atravs do teste do sinal (Lehmann, 1998), definido como se
segue.

[ ] 0.5
= ~(0,1)
0.5 (6)
0 : [ ] = 0.5, 1 : [ ] > 0.5

onde

- sign a estatstica de teste;


- E[Sn] o valor esperado do nmero de vezes em que os erros de um
dado modelo so maiores que os erros do outro modelo;
- N tamanho do vetor de erros.

O cdigo para executar o teste do sinal com os erros dos nossos modelos
seria:

> errors.sarima = bm$forecasting.errors


> errors.grnn = preds$forecasting.errors
>
> dif = errors.sarima - errors.grnn
> E = sum(sapply(dif, function(x){return(x > 0)}))
> mean = 0.5*10
> std = 0.5*sqrt(10)
> sign = (E - mean)/std
> p.value = 1 - pnorm(sign)

O p-valor de p.value = 0.03 indica que a hiptese nula de igualdade dos


erros seria rejeitada ao nvel de significncia de 5%, o que nos leva a crer que h,
sim, diferenas estatsticas entre as previses dos dois modelos.

O modelo linear ainda apresenta algumas desvantagens. Com a GRNN no


foi necessrio adotar nenhuma hiptese sobre o comportamento do IPCA, alm de
sua dependncia do hiato do PIB, para construir a rede neural. Tal no o caso
dos modelos SARIMA. Alm da bvia restrio de linearidade, deve-se formular

89
suposies sobre vrios outros aspectos da srie em estudo, como a sazonalidade,
a tendncia e os ciclos.

O uso da BETS.report para a modelagem atravs de uma GRNN

Para a modelagem atravs de uma GRNN, a lista de parmetros que


argumento da BETS.report deve possuir os campos apresentados abaixo (tabela
6).

TABELA 6: CAMPOS DA LISTA PARAMS DA FUNO BETS.REPORT CASO A ANLISE SEJA DO TIPO GRNN
Nome Tipo Descrio
Cdigo da srie que funcionar como varivel dependente
code integer
(a srie que objeto de estudo).-
Indica se a prpria varivel dependente deve ser usada
auto.reg boolean
como regressor
Indica se os valores presentes dos regressores devem
present.regs boolean
entrar como variveis explicativas.
lag.max integer Defasagem mxima dos regressores.
Vetor de cdigos das sries que devem funcionar como
variveis explicativas. As defasagens de cada uma sero
regs integer
escolhidas por busca exaustiva e apresentadas no
relatrio
start.train integer Perodo de incio do conjunto de treinamento.
end.train integer Perodo de fim do conjunto de treinamento.
start.test integer Perodo de incio do conjunto de testes.
end.test integer Perodo de fim do conjunto de testes.
Intervalo em que o nico parmetro da GRNN, o
sigma.interval numeric (sigma), deve ser variado. Se apenas um valor for
fornecido, no ser variado
sigma.step numeric Tamanho da variao do parmetro .

Lembramos que a utilizao da BETS.report foi explicada


anteriormente nesta seo, quando descrevemos seu uso no caso de modelos
SARIMA.

90
5. Concluso

Demonstramos neste captulo que o BETS possui uma proposta inovadora,


ao permitir no apenas que diferentes tipos de usurios tenham acesso rpido e
fcil a milhares de sries histricas da economia brasileira, mas tambm que
interajam com elas das mais diversas maneiras.

Isto especialmente interessante no momento em que vivemos. Toda


classe de informaes se encontra amplamente dispersa e seu volume cresce em
ritmo acelerado, o que exige conhecimentos multidisciplinares da parte dos
analistas. O processo de aprendizado pode ser cansativo, frustrante e at mesmo
ineficiente: usa-se muito tempo capacitando-se para atividades meio (como, por
exemplo, o uso de tecnologias de computao) e relativamente pouco tempo para
exercitar a atividade fim (como a anlise dos dados via mtodos estatsticos e a
interpretao conjuntural dos resultados).

Portanto, qualquer ideia que facilite a passagem do meio para o fim muito
bem-vinda. E, claro, simplificar a atividade fim tambm tem imenso valor.
precisamente nestes dois sentidos que o BETS atua.

Futuramente, sero ampliados os relatrios dinmicos, dando ao usurio


novas opes. Uma delas j est prevista na estrutura da funo: o modo de
visualizao que no inclui explicaes sobre a metodologia, assumindo tom mais
tcnico e sucinto. Alm de desenvolver novos mtodos de modelagem, como
Holt-Winters, lgica fuzzy, Box & Jenkins com funes de transferncia e outras
arquiteturas de redes neurais, planejamos refinar as anlises em si.

No relatrio SARIMA seria interessante, por exemplo, implementar outros


testes de raiz unitria bem estabelecidos, como o KPSS (Kwiatkowski et al., 1992)
e o Phillips-Perro , (Phillips and Perron, 1988), e testes de diagnstico como o de
BreuschGodfrey para autocorrelao nos resduos (Breusch,1978; Godfrey,
1978) e o de Chow para quebras estruturais (Chow, 1960). Outra funcionalidade
sem dvida proveitosa seria a de decomposio das sries, que poderia ser feita
atravs do seasonal (Sax, 2016), um pacote que oferece uma interface para o X-
13-ARIMA-SEATS (Bureau, 2015).

91
s estas novas etapas se somar o contato direto com os usurios, a fim de
ouvir sugestes e crticas. Todas as funcionalidades ficaro sempre sujeitas a
aprimoramentos, e neste ponto a avaliao e as ideias do pblico so cruciais.

92
Referncia Bibliogrfica

M. Balcilar. mFilter: Miscellaneous time series filters, 2016. URL http://cran.r-


project.org/package=
mfilter.

M. S. Bartlett. On the theoretical specification and sampling properties of autocorrelated


time series. Supplement to the Journal of the Royal Statistical Society, 1946.

R. Bivand, V. J. Carey, S. DebRoy, S. Eglen, R. Guha, N. Lewin-Koh, M. Myatt, B. Pfaff, B.


Quistorff, F. Warmerdam, and S. Weigand. foreign: Technical Trading Rules, 2016. URL
http://cran.r- project.org/package=foreign.

R. Bivand, V. J. Carey, S. DebRoy, S. Eglen, R. Guha, N. Lewin-Koh, M. Myatt, B. Pfaff, B.


Quistorff, F. Warmerdam, and S. Weigand. foreign: Technical Trading Rules, 2016. URL
http://cran.r- project.org/package=foreign.

G. E. P. Box and G. M. Jenkins. Time Series Analysis forecasting and control. Holden Day,
San Francisco, 1970.

T. S. Breusch. Testing for autocorrelation in dynamic linear models. Australian Economic


Papers, 1978.

U. C. Bureau. X13-arima-seats reference manual acessible html output version. 2015. URL
https:
//www.census.gov/ts/x13as/docX13AS.pdf.

R Core Team. R: A Language and Environment for Statistical Computing. R Foundation


for Statistical Computing, Vienna, Austria, 2012. URL http://www.R-project.org/. ISBN 3-
900051-07-0.

P. Chasset. grnn: General regression neural network, 2013. URL http://cran.r-


project.org/package=
grnn.

G. C. Chow. Tests of equality between sets of coefficients in two linear regressions.


Econometrica, 1960.

D. A. Dickey and W. A. Fuller. Distribution of the estimators for autoregressive time series
with a unit root. Journal of the American Statistical Association, 74, 1979.

P. G. C. Fereira, D. Mattos, D. Almeida, I. de Oliveira, and R. Pereira. Anlise de Sries


Temporais Usando o R: um curso introdutrio. FGV/IBRE, Rio de Janeiro, RJ, 2016

L. G. Godfrey. Testing against general autoregressive and moving average error models
when the regressors include lagged dependent variables. Econometrica, 1978.

R. J. Hodrick and E. C. Prescott. Postwar u.s. Business cycles: An empirical investigation.


Journal of

93
Money, Credit, and Banking, 1997.

R. J. Hyndman. forecast: Forecasting Functions for Time Series and Linear Models, 2015.
URL http://cran.r-project.org/package=forecast.

D. Kwiatkowski, P. C. B. Phillips, P. Schmidt, and Y. Shin. Testing the null hypothesis of


stationarity against the alternative of a unit root. Journal of Econometrics, 1992.

E. L. Lehmann. Nonparametrics: Statistical methods based on ranks. Prentice Hall, Upper


Saddle River, NJ, 1998.

G. M. Ljung and G. E. P. Box. On a measure of a lack of fit in time series models. Biometrika,
65, 1978.

D. C. Montgomery, C. L. Jennings, and M. Kulahci. Introduction to Time Series Analysis and


Forecasting. Wiley, Arizona, 2015.

D. Osborn, A. Chui, J. Smith, and C. Birchenhall. Seasonality and the order of integration for
consumption. Oxford Bulletin of Economics and Statistics, 1988.

J. Ooms, D. James, S. DebRoy, H. Wickham, and J. Horner. RMySQL: Database Interface and
MySQLDriver for R, 2016. URL http://cran.r-project.org/package=RMySQL

B. Pfaff, E. Zivot, and M. Stigler. urca: Unit Root and Cointegration Tests for Time Series
Data, 2016. URLhttp://cran.r-project.org/package=urca.

A. W. Phillips. The relationship between unemployment and the rate of change of money
wages in the united kingdom 1861-1957. Economica, 1958.

P. C. Phillips and P. Perron. Testing for a unit root in time series regression. Biometrika, 1988.

C. Sax. seasonal: R Interface to X-13-ARIMA-SEATS, 2016. URL https://cran.r-


project.org/web/
packages/seasonal/index.html.

G. Schwarz. Estimating the dimension of a model. Annals of Statistics, 6, 1978.

C. Sievert, C. Parmer, T. Hocking, S. Chamberlain, K. Ram, M. Corvellec, and P. Despouy.


plotly: CreateInteractive Web Graphics via plotly.js, 2016. URL http://cran.r-
project.org/package=plotly. [p4] D. F. Specht. A general regression neural network. IEEE
Transactions on Neural Networks, 1991.

D. Vanderkam, J. J. Allaire, J. Owen, D. Gromer, P. Shevtsov, and B. Thieurmel. dygraphs:


Interface to Dygraphs Interactive Time Series Charting Library, 2016. URL https://cran.r-
project.org/web/ packages/dygraphs/index.html.

H. Wickham and W. Chang. ggplot2: An Implementation of the Grammar of Graphics,


2015. URL http://cran.r-project.org/package=ggplot2.

94
A. Zeileis, G. Grothendieck, J. A. Ryan, and F. Andrews. zoo: S3 Infrastructure for Regular
and Irregular Time Series (Zs Ordered Observations), 2016. URL http://cran.r-
project.org/package=zoo.

95
Anlise de Dados Utilizando as Libraries survey e convey
do R
Autoria: Djalma Pessoa (ENCE/IBGE) e Guilherme
Jacob (UNICEF BRASIL)

1. Introduo

Neste captulo, apresentamos exemplos de utilizao das libraries


survey e convey do R para estimar caractersticas populacionais a partir de
dados obtidos atravs de amostras complexas.

Para amostras complexas, os seguintes aspectos so relevantes:

1. probabilidades distintas de seleo das unidades


2. conglomerao das unidades
3. estratificao
4. no-resposta e outros ajustes

As ferramentas de anlise devem refletir a complexidade usualmente


envolvida nas pesquisas amostrais de populaes finitas.

Este captulo est estruturado da seguinte forma: na Seo 2, apresentamos


uma descrio sumria da Pesquisa Nacional por Amostra de Domiclios Contnua
(PNADC), cujos dados so utilizados no texto para exemplificar o uso da library
survey do R.

Na Seo 3 descrevemos a library survey, especializada para anlise de dados


que incorpora as caractersticas do plano amostral utilizado na coleta dos dados.

96
Para a leitura e anlise dos microdados da PNADC, na estimao da taxa de
desocupao, foram utilizados scripts do R contidos em asdfree.com, conforme
descrito na Seo 4.

Na Seo 5, usando funes da library survey do R, replicamos a estimativa


da taxa de desocupao do trimestre Out-Nov-Dez de 2015, divulgada pelo IBGE,
obtida a partir de dados da Pesquisa Nacional por Amostra de Domiclios
Contnua (PNADC).

Finalmente na Seo 6, apresentamos vrios exemplos de aplicao da


library convey para estimar medidas de pobreza e concentrao de renda. A
estimao de varincia desses indicadores feita por linearizao, utilizando
funo de influncia, bem como por replicao de pesos (bootstrap).

97
2. Pesquisa Nacional por Amostra de Domiclios Contnua (PNADC)

A PNADC utiliza uma amostra probabilstica com as caractersticas


mencionadas na introduo. Sem apresentar detalhes do plano amostral adotado
na seleo das unidades(domiclios), reproduzimos a descrio resumida da
PNADC contida no site da PNADC do IBGE:

"A pesquisa destina-se a produzir informaes contnuas sobre a


insero da populao no mercado de trabalho associada a
caractersticas demogrficas e de educao, e, tambm, para o
estudo do desenvolvimento socioeconmico do Pas, agregando a
produo de resultados anuais sobre temas permanentes da
pesquisa (como trabalho infantil e outras formas de trabalho,
migrao, fecundidade etc.) e outros aspectos relevantes
selecionados de acordo com as necessidades de informao.

realizada por meio de uma amostra de domiclios, extrada de


uma amostra mestra, de forma a garantir a representatividade dos
resultados para os diversos nveis geogrficos definidos para sua
divulgao. A cada trimestre, so investigados 211.344
domiclios particulares permanentes, em aproximadamente
16.000 setores censitrios, distribudos em cerca de 3.500
municpios.

Tem periodicidade mensal, para um conjunto restrito de


indicadores relacionados fora de trabalho e somente para o
nvel geogrfico de Brasil; trimestral, para indicadores
relacionados fora de trabalho; anual, para os demais temas
permanentes da pesquisa e indicadores complementares
relacionados fora de trabalho; e varivel, para outros temas ou
tpicos dos temas permanentes a serem pesquisados com maior
periodicidade ou ocasionalmente.

98
Sua abrangncia geogrfica : Brasil, Grandes Regies, Unidades
da Federao, 20 Regies Metropolitanas que contm Municpios
das Capitais (Manaus, Belm, Macap, So Lus, Fortaleza,
Natal, Joo Pessoa, Recife, Macei, Aracaju, Salvador, Belo
Horizonte, Vitria, Rio de Janeiro, So Paulo, Curitiba,
Florianpolis, Porto Alegre, Vale do Rio Cuiab, e Goinia),
Municpios das Capitais e Regio Integrada de Desenvolvimento
da Grande Teresina."

A PNADC uma amostra de domiclios de abrangncia nacional e por no


se dispor de cadastro de domiclios para o pas inteiro, a Amostragem Aleatria
Simples (A.A.S.) no seria factvel. A Amostra Complexa permite espalhar as
unidades de modo a obter preciso adequada das estimativas em domnios
especificados e operacionalmente mais eficiente, embora o efeito de
conglomerao na amostra complexa possa diminuir a preciso das estimativas.

A Figura 1, originalmente apresentada no Wall Street Journal, fornece um


excelente resumo grfico da estrutura de um plano amostral complexo.

99
FIGURA 1. AMOSTRAGEM COMPLEXA SEGUNDO O WALL STREET JOURNAL

100
Um ponto fundamental para estimar a preciso das estimativas que a
amostra seja probabilstica, ou seja, a partir do mecanismo de seleo das unidades
deve ser possvel determinar a probabilidade de seleo das possveis amostras.

Em geral, as unidades tm probabilidades distintas de seleo e isso


implica em pesos distintos das unidades no clculo de estimativas. Devido ao
plano amostral adotado, cada unidade da amostra tem um peso, que se no for
considerado, dar origem a estimativas viciadas.

Para estimar a varincia das estimativas usa-se no s o peso das unidades,


mas todo o mecanismo de seleo: estratificao e conglomerao em vrios
estgios. No clculo de estimativas de varincias comum fazer algumas
aproximaes: mtodo do conglomerado primrio e linearizao de Taylor.

101
3. Library survey

Estimativas e precises podem ser obtidas por meio da library survey


do R, cujas funes produzem estimativas que incorporam as caractersticas do
plano amostral.

O site da library survey contm uma descrio completa dos recursos


disponveis, exemplos de uso e tutoriais.

Resumidamente, a library survey contm funes para estimar:

Mdias, totais, razes, quantis, tabelas de contingncia, modelos de regresso,


modelos loglineares, curvas de sobrevivncia, testes de postos, para a amostra
inteira e para domnios
Varincias por linearizao de Taylor ou por pesos replicados (BRR, jackknife,
bootstrap, multistage bootstrap, ou fornecido pelo usurio).

102
4. O site asdfree.com

O site da PNADC do IBGE contm o link asdfree.com para analisar


microdados da pesquisa usando o R. No site asdfree.com h scripts para ler e
analisar dados de pesquisas amostrais usando a library survey do R. H um
repositrio para cada uma das seguintes pesquisas do IBGE:

Amostra do Censo Demogrfico


Pesquisa Nacional por Amostra de Domiclios (PNAD)
Pesquisa Mensal de Emprego (PME)
Pesquisa de Oramentos Familiares (POF)
Pesquisa Nacional por Amostra de Domiclios Contnua (PNADC)
Pesquisa Nacional de Sade (PNS)

O primeiro passo executar o script download all microdata.R contido no


repositrio da PNADC no asdfree.com para ler os microdados para todos os
trimestres disponveis da PNADC.

Os microdados do IBGE esto em formato fixo e so lidos com uso do arquivo


SAS input file por meio da library SAScii. No arquivo pnadc 2015 04.rda
est salvo o data frame x com os dados do quarto trimestre de 2015.

103
5. Taxa de desocupao

Depois de ler os dados, usamos o script unemployment rate.R para


estimar a taxa de desocupao para o quarto trimestre de 2015. Reproduzimos a
seguir alguns comandos do script unemployment rate.R do repositrio da
PNADC no asdfree.com. Inicialmente, carregamos os dados da PNADC do quarto
trimestre de 2015.

#setwd("C:/Djalma/SER")
load("pnadc 2015 04.rda")

O ambiente de trabalho contm o data frame.

ls()

## [1] "x"

que tem os seguinte nmero de registros e de variveis

dim(x)

## [1] 562871 123

O passo inicial para utilizar a library survey criar um objeto de desenho


que incorpora as caractersticas do plano amostral adotado na pesquisa. Para isto,
carregamos a library survey.

library(survey)
options( survey.lonely.psu = "adjust" ) # opo para lidar com e
stratos com um s psu

104
Agora, criamos um objeto de desenho preliminar da PNADC:

pre_w <- svydesign(ids =~upa, strata=~estrato, weights=~v1027, d


ata = x, nest=TRUE)

O IBGE usa reponderao para ajustar por no-resposta. Os pesos so


recalculados de modo que as estimativas de certos totais coincidam com os totais
conhecidos na populao, atravs de censo ou de projeo a partir de valores
conhecidos.

A funo postStratify da library survey executa a ps-estratificao do


desenho preliminar, gerando um novo objeto de desenho que ser usado nas
estimativas. Para isso, deve ser criado um data frame especificando a identidade
dos ps-estratos e seus totais populacionais

# especifica totais de ps-estratos na populao

df_pos <-data.frame(posest=unique(x$posest),
Freq=unique(x$v1029))

# ps-estratifica objeto de desenho

w <-postStratify(pre_w, ~posest, df_pos)

Para calcular a taxa de desocupao, o IBGE considera pessoas de 14 anos ou


mais (PIA) na semana de referncia da pesquisa e calcula a razo de dois totais,
definidos a partir das variveis derivadas vd4002 e vd4001.

A varivel vd4002 definida como a condio de ocupao na semana de


referncia da pesquisa para pessoas de 14 anos ou mais de idade com nveis:

1. Pessoas ocupadas;
2. Pessoas desocupadas e
3. No aplicvel.

105
A varivel vd4001 definida como a condio em relao fora de trabalho
na semana de referncia da pesquisa para pessoas de 14 anos ou mais de idade
com nveis:

1. Pessoas na fora de trabalho


2. Pessoas fora da fora de trabalho e
3. No aplicvel

A taxa de desocupao a razo entre o total de pessoas desocupadas


(vd4002==2) e total de pessoas na fora de trabalho (vd4001==1)

Usando a library survey, estimamos a taxa de desocupao bem como a


preciso da estimativa:

taxa_des <- svyratio(~ vd4002=="2" , ~ vd4001 == "1" , w , na.rm


= TRUE)
round(100*coef(taxa_des),2) # estimativa

## vd4002 == "2"/vd4001 == "1"


## 8.96

round(100*SE(taxa_des),2) # erro padro

## vd4002 == "2"/vd4001 == "1"


## 0.1

round(100*cv(taxa_des),2) # coeficiente de variao

## vd4001 == "1"
## vd4002 == "2" 1.1

106
6. Library convey

A library convey tem por objetivo estimar medidas de pobreza e concentrao


de renda. H pelo menos duas libraries que j abordam esse assunto: vardpoor e
Laeken. Diferentemente dessas duas libraries, a library convey utiliza
intensivamente a library survey.

Algumas medidas de pobreza e concentrao de renda so definidas por


funes no-diferenciveis de modo que no possvel utilizar linearizao de
Taylor para estimar suas varincias. Uma alternativa utilizar Funes de
Influncia como descritas em Deville (1999) e Osier (2009). A library convey
implementa esta metodologia para trabalhar com objetos desenho de classe
survey.design e tambm de classe svyrep.design.

So exemplos dessas medidas:

Linha de pobreza:

= .60.50
onde, .50 a mediana de renda;

Taxa de pobreza


=1 1 ( )
= . 100

Razo de participao de quintis


=1 1 ( > .80 )
=

=1 1 ( .20 )

Coeficiente de Gini

2
=1 =1
= 1
=1

onde, o posto de , ordenada crescentemente.

107
Observe que no possvel utilizar linearizao de Taylor para estimar a
varincia essas medidas, pois elas dependem de quantis e o indicador de Gini
definido como um funo dos postos das rendas observadas. A linearizao pode
ser feita utilizando a abordagem proposta por Deville (1999), baseada em Funes
de Influncia, inicialmente utilizadas para analisar a robustez de estimadores.

Segundo Deville (1999), a varincia do estimador pode ser aproximada


por:

() ( )
=1

onde a varivel linearizada a Funo de Influncia do estimador .

6.1 Linearizao por funo de influncia Exemplos

Linha de pobreza:

= 0.6
onde a mediana da renda.

0.6 1
= [( 0.5)]
()
Taxa de pobreza:


=1 ( )
= . 100
=1

1 0.6 ()
= [( ) ] [( ) 0.5]
()
onde:

- tamanho da populao;

- linha de pobreza;

- rendimento da pessoa ;
108
- rendimento mediano;

- funo de densidade da distribuio de renda.

6.2 Exemplos de uso da library convey

Nos exemplos a seguir usaremos o conjunto de dados eusilc contidos nas


libraries vardpoor e Laeken.

library(vardpoor)
data(eusilc)

Em seguida, criamos um objeto de classe survey.design utilizando a


funo svydesign da library survey:

library(survey)
des_eusilc <- svydesign(ids = ~rb030, strata =~db040, weights =
~rb050, data = eusilc)

Imediatamente aps a criao do objeto de desenho des_eusilc, devemos


usar a funo convey_prep que guarda as informaes necessrias para calcular
estimativas em domnios, baseadas numa linha de pobreza estimada para o pas
inteiro.

library(convey)
des_eusilc <- convey_prep( des_eusilc )

Para estimar a taxa de pobreza usamos a funo function svyarpr:

109
svyarpr(~eqIncome, design=des_eusilc)

arpr SE
eqIncome 0.14444 0.0028

Para estimar a taxa de pobreza para domnios definidos pela varivel


db040, usamos

svyby(~eqIncome, by = ~db040, design = des_eusilc, FUN = svyarpr


, deff = FALSE)

db040 eqIncome se
Burgenland Burgenland 0.1953984 0.017202243
Carinthia Carinthia 0.1308627 0.010610622
Lower Austria Lower Austria 0.1384362 0.006517660
Salzburg Salzburg 0.1378734 0.011579280
Styria Styria 0.1437464 0.007452360
Tyrol Tyrol 0.1530819 0.009880430
Upper Austria Upper Austria 0.1088977 0.005928336
Vienna Vienna 0.1723468 0.007682826
Vorarlberg Vorarlberg 0.1653731 0.013754670

Utilizando o mesmo conjunto de dados, estimamos a razo de


participao dos quintis:

# para a populao inteira


svyqsr(~eqIncome, design=des_eusilc, alpha= .20)

qsr SE
eqIncome 3.97 0.0426

# para domnios
svyby(~eqIncome, by = ~db040, design = des_eusilc,
FUN = svyqsr, alpha= .20, deff = FALSE)

db040 eqIncome se
Burgenland Burgenland 5.008486 0.32755685
Carinthia Carinthia 3.562404 0.10909726
Lower Austria Lower Austria 3.824539 0.08783599
Salzburg Salzburg 3.768393 0.17015086
Styria Styria 3.464305 0.09364800

110
Tyrol Tyrol 3.586046 0.13629739
Upper Austria Upper Austria 3.668289 0.09310624
Vienna Vienna 4.654743 0.13135731
Vorarlberg Vorarlberg 4.366511 0.20532075

Essas funes so usadas como mtodos S3 para a classes survey.design


e svyrep.design.

Vamos criar um objeto de desenho de classe svyrep.design e aplicar a


funo convey_prep:

des_eusilc_rep <- as.svrepdesign(des_eusilc, type = "bootstrap")


des_eusilc_rep <- convey_prep(des_eusilc_rep)

e ento utilizar a funo svyarpr para estimar a taxa de pobreza:

svyarpr(~eqIncome, design=des_eusilc_rep)

arpr SE
eqIncome 0.14444 0.003

svyby(~eqIncome, by = ~db040, design = des_eusilc_rep, FUN = svy


arpr, deff = FALSE)

db040 eqIncome se.eqIncome


Burgenland Burgenland 0.1953984 0.017771575
Carinthia Carinthia 0.1308627 0.011605566
Lower Austria Lower Austria 0.1384362 0.006813080
Salzburg Salzburg 0.1378734 0.011760546
Styria Styria 0.1437464 0.007247973
Tyrol Tyrol 0.1530819 0.010311169
Upper Austria Upper Austria 0.1088977 0.004488114
Vienna Vienna 0.1723468 0.009027444
Vorarlberg Vorarlberg 0.1653731 0.011426802

As funes da library convey so aplicadas de maneira similar s funes


da library survey.

111
6.3 Indicador FGT

Foster et al. (1984) propuseram uma famlia de indicadores para medir


pobreza.

A classe de medidas FGT, pode ser definida por:


1
= ( , ),

=1

onde,

( )
( , ) = [ ] { },

sendo: a linha de pobreza; a funo indicadora que atribui valor 1 se a
condio { } for satisfeita e 0 caso contrrio, e uma constante no
negativa.

Quando = 0, pode ser interpretado como a taxa de pobreza e para


1, o peso das pessoas pobres cresce com o valor de , (Foster et all, 1984).

O indicador FGT de pobreza implementado na library convey por meio


da funo svyfgt. O argumento thresh_type desta funo define o tipo de linha
de pobreza adotada. H trs escolhas possveis:

1. abs -- fixa e dada pelo argumento thresh_value


2. relq -- uma proporo de um quantil definida pelo argumento proportion e o
quantil definido pelo argumento order.
3. relm -- uma proporo da mdia definida pelo argumento proportion

O quantil e a mdia envolvidas na definio da linha de pobreza so


estimados para a populao inteira. Quando = 0 e = .6 a medida
igual ao indicador arpr calculado pela funo svyarpr.

112
Em seguida, apresentamos alguns exemplos de utilizao da funo
svyfgt para estimar valores do indicador FGT de pobreza.

Inicialmente, consideremos uma linha de pobreza fixada ( = 0) no valor10000.


A taxa de pobreza (FGT0)

svyfgt(~eqIncome, des_eusilc, g=0, abs_thresh=10000)

fgt0 SE
eqIncome 0.11444 0.0027

O indicador de hiato de pobreza (FGT1) ( = 1) para a linha de pobreza


fixada no mesmo valor

svyfgt(~eqIncome, des_eusilc, g=1, abs_thresh=10000)

fgt1 SE
eqIncome 0.032085 0.0011

Para estimar o FGT0 com a linha de pobreza estimada em 0.6 ,


definimos o argumento type_thresh="relq" e usamos os valores default para
percent e order:

svyfgt(~eqIncome, des_eusilc, g=0, type_thresh= "relq")

fgt0 SE
eqIncome 0.14444 0.0028

que coincide com a estimativa obtida por meio de

svyarpr(~eqIncome, design=des_eusilc, .5, .6)

arpr SE
eqIncome 0.14444 0.0028

113
Para estimar o hiato de pobreza(FGT1) com a linha de pobreza definida
por 0.6 usamos:

svyfgt(~eqIncome, des_eusilc, g=1, type_thresh= "relm")

fgt1 SE
eqIncome 0.051187 0.0011

6.4 Curva de Lorenz

A curva de Lorenz um instrumento para analisar desigualdade de renda,


associando o percentual da renda total apropriado por uma frao da populao.
Usando a frmula da soma parcial () enunciada em Langel e Till (2011),
temos o seguinte estimador:

^
^1
=1 ( ) 0, se < 0
() =
, onde () = {, se 0 < 1
^
1, se 1
Utilizando a funo de linearizao deste indicador, podemos fazer o
grfico da curva de Lorenz com o intervalo de confiana:

svylorenz( ~eqIncome, des_eusilc )

114
## $quantiles
## 0 0.1 0.2 0.3 0.4 0.5
0.6
## eqIncome 0 0.03426951 0.0893711 0.1563201 0.232591 0.3186511
0.4148917
## 0.7 0.8 0.9 1
## eqIncome 0.522865 0.6450681 0.7882367 1
##
## $CIs
## , , eqIncome
##
## 0 0.1 0.2 0.3 0.4 0.5
0.6
## (lower 0 0.03355202 0.08829109 0.1549113 0.2308875 0.3166566
0.4126325
## upper) 0 0.03498700 0.09045110 0.1577288 0.2342945 0.3206456
0.4171509
## 0.7 0.8 0.9 1
## (lower 0.5203820 0.6424213 0.7856360 1
## upper) 0.5253481 0.6477148 0.7908374 1

vlido ressaltar ainda que a diagonal entre os pontos 0 e 1 representa o


caso de igualdade perfeita. Isto fica mais claro quando notamos que, neste caso,
aumentos em geram aumentos idnticos em ().

115
6.5 ndice de Gini

A diferena entre o () e d a ideia da desigualdade existente na


populao, entretanto no propriamente uma medida capaz de sintetizar o perfil
da desigualdade de renda em um nmero facilmente comparvel. Partindo dessa
ideia, o ndice de Gini uma medida de desigualdade proporcional rea entre as
curvas = () = e a () propriamente dita, transformando as informaes de
desigualdade contidas na curva de Lorenz em um nico nmero. O estimador do
ndice de Gini utilizado por Osier (2009) definido como:

2
=1 =1
= 1
=1

onde o posto da observao .

Com a respectiva funo de linearizao tambm proposta em Osier


(2009), podemos calcular a varincia do ndice de Gini. De fato, isto feito atravs
da funo svygini, como no exemplo abaixo:

svygini(~eqIncome, des_eusilc )

gini SE
eqIncome 0.26497 0.0019

Como em outras funes, tambm podemos lidar com valores ausentes


atravs da opo na.rm = TRUE. Comparando a curva de Lorenz com

svygini(~py010n, des_eusilc, na.rm = TRUE )

gini SE
py010n 0.64606 0.0036

Observando os dois ndices, podemos ver que a varivel py010n mais


desigual do que eqIncome, portanto de se esperar que a curva de Lorenz de

116
py010n fique mais distante da curva de igualdade. Assim, comparando as duas
curvas de Lorenz que embasam as estimativas acima, temos:

svylorenz( ~eqIncome, des_eusilc, empirical = TRUE, alpha = 0 )


svylorenz( ~py010n, des_eusilc, alpha = 0, empirical = TRUE, na.
rm = TRUE, curve.col = "blue", add = TRUE )
legend( "topleft", c("eqIncome", "py010n"), lwd = c(1,1), col =
c("red", "blue"))

117
Referncia Bibliogrfica

Berger, Y.G. e C.J. Skinner (2003) Variance Estimation for a Low-Income


Proportion. Social Statistics Research Center. University of Southhampton.
Methodology Working Paper M03/03.http://eprints.soton.ac.uk/7792/1/7792-
01.pdf

Damico, A. - asdfree: analyze survey data for free .

Pessoa, Djalma Anthony Damico e Guilherme Jacob (2016). convey: Income


Concentration Analysis with Complex Survey Samples. R package version 0.2.0.
https://github.com/djalmapessoa/convey

Pessoa, Djalma G.C e Pedro L. N. Silva (1998) Anlise de Dados Amostrais


Complexos, 13 SINAPE, ABE.

Foster, K., J. Greer e E. Thorbecke (1984) - A Class of Decomposable Poverty


Measures. Econometrica, 52, 761-766.

Guillaume Osier (2009). Variance estimation for complex indicators of poverty


and inequality. , Vol.3, No.3, pp. 167-195, ISSN 1864-3361, URL
http://ojs.ub.uni-konstanz.de/srm/article/view/369.

Jean-Claude Deville (1999). Variance estimation for complex statistics and


estimators: linearization and residual techniques. Survey Methodology, 25, 193-
203, URL http://www5.statcan.gc.ca/bsolc/olc-cel/olc-cel?lang=eng&catno=12-
001-X19990024882.

Langel, Matti e Yves Till (2011). Statistical inference for the quintile share ratio.
Journal of Statistical Planning and Inference, 141:26762985.

Lumley, T (2014) - "survey: analysis of complex survey samples". R package


version 3.30.

Lumley, T (2004) - Analysis of complex survey samples. Journal of Statistical


Software 9(1): 1-19.

R Core Team - R: A language and environment for statistical computing. R


Foundation for Statistical Computing, Vienna, Austria. Version 3.0.2.

118
Planejamento amostral em Geoestatstica com R
Autoria: Gustavo da Silva Ferreira (ENCE/IBGE)

Introduo

O processo de escolha tima de novos locais para amostragem, tambm


conhecido como design timo ou desenho amostral timo, bastante difundido na
literatura. Sua aplicao no contexto de Geoestatstica possui inmeros artigos
recentes, como os trabalhos de Zidek et al. (2000), Fernandez et al. (2005), Zhu e
Stein (2005), Diggle e Lophaven (2006), Gumprecht et al. (2007), Mller e Stehlk
(2008), Boukouvalas et al. (2009), entre outros.

Este processo de escolha costuma se basear na Teoria da Deciso, onde o


pesquisador define uma funo utilidade (ou funo perda) que bonifica os
possveis candidatos a ponto amostral de acordo com um critrio pr-estabelecido.
Aps definida esta funo utilidade, a metodologia para obteno do planejamento
amostral timo passa a ser uma atividade de otimizao de funes.

Os avanos produzidos por Mller (1999), Mller et al. 2004 e Mller et


al. (2007), por incorporarem de forma natural a abordagem Bayesiana e a
utilizao de mtodos de simulao intensivos, tornam-se bastante vantajosos para
a obteno de planejamentos amostrais timos no contexto da Geoestatstica.

Neste captulo detalha-se uma metodologia para obteno do planejamento


amostral timo utilizando uma abordagem baseada em maximizao de funes
utilidades, a qual pode ser aplicada integralmente no software R (R Core Team,
2014). So avaliadas situaes onde a deciso do pesquisador baseia-se na reduo
da varincia preditiva do processo subjacente ou nos casos em que existe o
interesse no monitoramento de eventos extremos.

119
Geoestatstica

Um processo estocstico definido sobre uma regio D do espao


chamado de processo espacial. A Geoestatstica a rea da Estatstica que lida
com processos espaciais geralmente definidos em regies do ou 2 . Seguindo
a abordagem de Geoestatstica baseada em modelos (Diggle et al., 1998),
podemos supor que estamos interessados em estudar as caractersticas de um
processo estocstico {(): }, onde D representa uma regio qualquer no
espao k-dimensional. Adicionalmente podemos supor que S(x) possui varincia
constante 2 e funo de autocorrelao ((), ( + ); ), , a qual pode
depender de um ou mais parmetros representados por . Vamos supor tambm
que o processo S Gaussiano, estacionrio e isotrpico. Assim, alm de varincia
constante, o processo possui funo de autocorrelao ((), ( + ); ) =
(||||; ). Assumindo que dispomos de observaes , i= 1,...,n, onde

= + ( ) + e E[ ] = 0, Var[ ] = 2 , i,

podemos interpretar = (1 , , ) como uma verso do processo S observada


com rudo. Adicionalmente, vamos supor que Z normalmente distribudo e
independente do processo S.

A Figura 1 apresenta um exemplo de srie temporal com dados


geoestatsticos. Mais especificamente, o exemplo refere-se aos dados de
infestao pelo mosquito Aedes aegypti no municpio do Rio de Janeiro,
mensurados pelo Levantamento de ndice Rpido de Infestao por Aedes aegypti
LIRAa, realizado pela Secretaria Municipal de Sade do Rio de Janeiro RJ no
perodo de 2005 a 2010. Estes dados foram previamente analisados em Ferreira
(2015) e foram considerados como realizaes de um processo gaussiano.

120
FIGURA 1: VALORES OBSERVADOS DA SRIE TEMPORAL DE INFESTAO DO AEDES AEGYPTI NO RIO DE
JANEIRO. FONTE: FERREIRA (2015).

Outro exemplo de dados geoestatsticos apresentado na Figura 2. Estes


dados foram obtidos junto ao Instituto Pereira Passos RJ e representam a
precipitao pluviomtrica observada em 32 estaes monitoradoras no municpio
do Rio de Janeiro no ms de Outubro de 2005. Estes dados foram analisados em
profundidade por Ferreira e Gamerman (2015).

121
FIGURA 2: PRECIPITAO PLUVIOMTRICA NA CIDADE DO RIO DE JANEIRO EM OUT/2005 (AGRUPADAS DE
ACORDO COM OS QUANTIS DE 20%, 40%, 60% E 80% REPRESENTADOS PELAS CORES AZUL, VERDE, AMARELO,
MARROM E VERMELHO, RESPECTIVAMENTE). FONTE: FERREIRA E GAMERMAN (2015).

Sob a abordagem Frequentista, os parmetros deste modelo podem ser


estimados pelos tradicionais mtodos de mxima verossimilhana ou mnimos
quadrados. Por outro lado, sob o enfoque Bayesiano, precisamos obter as
distribuies a posteriori para fazer inferncia acerca dos parmetros do modelo.
Assim, supondo que represente o conjunto de parmetros desconhecidos do
modelo, complementamos a verossimilhana p( ) com uma distribuio a
priori p() a fim de obtermos a posteriori p( ). Como as distribuies a
posteriori destes parmetros no possuem forma fechada, podemos aproxim-las
utilizando mtodos de Monte Carlo via Cadeias de Markov (MCMC) ou realizar
discretizaes nos parmetros de interesse a fim de obter-se formas fechadas para
determinados parmetros.

No software R, o pacote geoR (Ribeiro Jr. e Diggle, 2001) uma boa opo
para a realizao de anlises em Geoestatstica. A Figura 3 apresenta os valores
preditos e os respectivos intervalos de 95% credibilidade para os dados de
infestao obtidos por meio do pacote geoR utilizando a funo krige.bayes.

122
FIGURA 3: VALORES OBSERVADOS (CRCULOS), VALORES PREDITOS (LINHA CHEIA) E RESPECTIVOS IC 95%
(LINHA TRACEJADA) PARA OS DADOS DE INFESTAO DO AEDES AEGYPTI NO RIO DE JANEIRO. FONTE: FERREIRA
(2015).

123
Planejamento Amostral timo

A definio do planejamento amostral timo uma tarefa que costuma


envolver metodologias para obteno de mximos e mnimos de funes objetivo.
Quando o fenmeno de interesse do pesquisador estudado por meio da suposio
de modelos estatsticos subjacentes, a metodologia para obteno do planejamento
amostral timo costuma se basear no conceito de Teoria da Deciso. Para isto,
necessrio definir uma funo utilidade u(, , ), onde d representa o novo
ponto do plano amostral e representa o vetor de futuras observaes oriundas
deste novo ponto amostral, a qual ser considerada como a funo objetivo. Aps
a definio da funo utilidade, temos que o ponto amostral timo aquele que
maximiza a funo

U() = u(, , )p ( , )p( )d d .

Em outras palavras, U(d) uma funo que retorna a utilidade esperada do


local d, levando-se em conta as incertezas associadas a e y, e que maximizada
quando = .

Em Geoestatstica comum o foco do pesquisador concentrar-se mais na


predio espacial do processo subjacente do que na inferncia a respeito de seus
parmetros. Partindo-se deste princpio uma escolha natural de funo utilidade
considerar uma funo que bonifique redues na varincia preditiva do processo
estocstico subjacente, isto ,

u(, , ) = [V(() , ) V(() , , )]d,

a qual pode ser interpretada como o ganho obtido ao se utilizar para reduo
da incerteza associada ao processo S. Dando seguimento ao procedimento de
escolha do planejamento amostral timo, necessrio maximizar a funo

U() = u(, , )p ( , )p( )dd .

Adicionalmente, em Geoestatstica tambm usual a escolha de funes


utilidade baseadas na reduo de custos ou ainda baseadas na reduo ou aumento
da probabilidade de observao de eventos extremos.

124
Com relao s estratgias para otimizao da utilidade esperada, podemos
destacar o mtodo de MCMC em modelo aumentado (Mller, 1999). Neste
mtodo, o novo local do planejamento amostral considerado como um parmetro
a ser estimado no modelo. Sendo assim, considera-se que d pode assumir valores
dentro de uma regio fechada D, que u(, , ) no-negativa e limitada e
define-se a distribuio artificial

h(, , ) u(, , )p ( )p().

Neste caso, alm dos parmetros , localizaes d tambm so amostradas


durante o processo iterativo para obteno das amostras a posteriori dos
parmetros do modelo. Ao final do processo, a avaliao da pseudo-distribuio
a posteriori de d permitir a obteno de sua moda, a qual corresponder ao local
timo para amostragem. Isto acontece pois a pseudo-densidade h(d)
proporcional a

h() u(, , )p ( )p()dd = U().

Outra estratgia para reduo de custo computacional e simplificao da


inferncia consiste em aplicar uma discretizao da regio em estudo D em M sub-
regies a fim de avaliar a integral existente na expresso da funo utilidade.

125
Aplicao I: Dados de infestao pelo mosquito Aedes aegypti no Rio de
Janeiro

Aplicando a metodologia de obteno do planejamento amostral timo aos


dados de infestao apresentados na Figura 1. Ferreira (2015) avaliou uma janela
de 240 dias existentes entre a realizao do ltimo LIRAa em nov/2009 e o final
do ms de jun/2010 a fim de obter o momento timo para realizao de uma nova
coleta amostral. Para isto, considerou uma funo utilidade baseada na reduo da
varincia preditiva e tambm penalizando os pontos amostrais associados a
instantes de tempo onde a probabilidade de ocorrncia de surtos de dengue era
muito elevada ou muito reduzida.

A Figura 4 apresenta a pseudo-distribuio d, onde possvel observar que


a moda da distribuio encontra-se no intervalo [130, 140], o qual se refere ao
perodo de 12/mar a 22/mar de 2010. Assim, o instante timo para realizao de
nova coleta ocorre em torno de 135 dias aps a realizao do LIRAa anterior.

FIGURA 4: HISTOGRAMA DA DISTRIBUIO A POSTERIORI ARTIFICIAL DE D, ONDE O EIXO DAS ABSCISSAS


REPRESENTA O NMERO DE DIAS APS A REALIZAO DO LTIMO LIRAA. FONTE: FERREIRA (2015).

126
Aplicao II: Dados de Precipitao Pluviomtrica no Rio de Janeiro

Ferreira e Gamerman (2015) aplicaram a metodologia de obteno do


planejamento amostral timo aos dados de precipitao pluviomtrica no Rio de
Janeiro apresentados na Figura 2. Para a inferncia, particionou-se o municpio do
Rio de Janeiro em M=332 sub-regies e para a escolha do planejamento amostral
timo foi utilizada uma funo utilidade baseada na seguinte probabilidade

u(, , ) = P[( ) > 200 , ],

onde representa o local associado a . Esta funo associa maior utilidade


para locais onde exista maior probabilidade de que o nvel de chuva seja elevado,
isto , com precipitao total superior a 200 mm.

Esta funo utilidade pode ser bastante til quando o interesse do


pesquisador detectar o incio da estao chuvosa por meio da alocao de
estaes de monitoramento em pontos da cidade mais sensveis aos impactos desta
alterao climtica.

A Figura 5 apresenta a utilidade esperada para cada um dos 332 candidatos


a ponto amostral. Analisando o resultado, possvel notar que os valores elevados
da utilidade esperada concentram-se sobre uma pequena rea da cidade onde as
precipitaes esperadas eram mais elevadas.

127
FIGURA 5: UTILIDADES ESPERADAS U(D) OBTIDAS PARA OS DADOS DE PRECIPITAO PLUVIOMTRICA NO RIO DE
JANEIRO. FONTE: FERREIRA E GAMERMAN (2015).

128
Discusso

Este captulo apresentou uma metodologia para obteno de planejamento


amostral timo via software R utilizando recentes desenvolvimentos na rea de
teoria da deciso aplicada Amostragem. Apesar dos exemplos apresentados
referirem-se s situaes onde o pesquisador deseja-se adicionar apenas 1 (uma)
nova observao ao conjunto de dados existentes, esta metodologia permite o
planejamento de = (1 , , ), m > 1, novos locais amostrais (ver Ferreira e
Gamerman, 2015).

Outras extenses podem ser realizadas, como a suposio de no-


normalidade da varivel resposta ou ainda a suposio de um processo estocstico
dinmico subjacente. Em relao a este ltimo, a realizao de planejamentos
amostrais de apenas 1 (um) local sequencialmente no tempo pode ser uma opo
simples e vlida, apesar de no garantir que a amostra final resultante seja tima.

A abordagem de Mller (1999) possui vantagens computacionais em


comparao com outros mtodos tradicionais de otimizao e pode ser facilmente
implementada no software R.

O tempo computacional para obteno do planejamento amostral timo


ainda se configura como uma barreira para o desenvolvimento de pacotes ou
rotinas automticas para dados geoestatsticos. Neste sentido, o uso combinado do
pacote geoR com outros pacotes j existentes para simulao de processos
estocsticos, a realizao de programao em paralelo ou o uso de outros pacotes
de estatstica espacial pode permitir alguns avanos.

Dentre uma variada gama de pacotes teis para a anlise de dados


geoestatsticos e obteno de planos amostrais timos, podemos citar os pacotes
RandomFields (Schlather et al, 2015), foreach (Analytics e Weston, 2013),
mvtnorm (Genz e Bretz, 2009), maptools (Bivand e Lewin-Koh, 2013) e spdep
(Bivant et al, 2013).

129
Referncia Bibliogrfica

[1] Analytics, R. e Weston, S. (2014). foreach: Foreach looping construct for R.


R package version, 1.4.2.

[2] Bivand, R., Hauke, J. e Kossowski, T. (2013). Computing the Jacobian in


Gaussian spatial autoregressive models: an illustrated comparison of available
methods. Geographical Analysis, 45(2), 150-179.

[3] Bivand, R. e Lewin-Koh, N. (2015). maptools: Tools for reading and handling
spatial objects. R package version 0.834.

[4] Boukouvalas A., Cornford D., Stehlk M. (2009). Approximately Optimal


Experimental Design for Heteroscedastic Gaussian Process Models. Unassigned
Technical Report from the Neural Computing Research Group, Aston University,
Birmingham, UK, nov.

[5] Diggle P.J., Lophaven S. (2006) Bayesian geoestatistical design. Scandinavian


Journal of Statistics, 33, p. 53-64.

[6] Diggle P.J., Tawn J.A., Moyeed R.A. (1998) Model-based geostatistics.
Applied Statistics, 47, p. 299-350.

[7] Fernandez J.A., Real C., Couto J.A., Aboal J.R., Carballeira A. (2005) The
effect of sampling design on extensive bryomonitoring surveys of air pollution.
Science of the Total Environment, 337, 11-21.

[8] Ferreira, G.S. (2015) Planejamento Amostral timo em Estudos de Infestao


de Aedes aegypti. Revista Brasileira de Estatstica, v.76, n. 241, p.7-21, jan/dez.

[9] Ferreira, G.S. e Gamerman, D. (2015). Optimal design in geostatistics under


preferential sampling. Bayesian Analysis, 10(3), 711-735.

[10] Genz, A. e Bretz, F. (2009). Computation of Multivariate Normal and t


Probabilities, Lecture Notes in Statistics, vol 195.

[11] Gumprecht D., Mller W.G., Rodrguez-Daz J.M. (2007) Optimal design for
detecting spatial dependence. IFAS Research Paper Series - Johannes Kepler
University Linz, 20, jan.

130
[12] Mller P. (1999) Simulation-based optimal design. Em Bayesian Statistics 6
(eds J.M. Bernardo, J.O. Berger, A.P. Dawid e A.F.M. Smith), p. 459-474.
Oxford: Oxford University Press.

[13] Mller P., Berry D., Grieve A., Smith M., Krams M. (2007). Simulation-
based sequential Bayesian design. Journal of Statistical Planning and Inference,
137, p. 3140-3150.

[14] Mller P., Sans B., De Iorio M. (2004). Optimal Bayesian design by
inhomogeneous Markov Chain simulation. Journal of the American Statistical
Association, 99(467), p. 788-798.

[15] Mller W.G., Stehlk M. (2008) Compound optimal spatial designs. IFAS
Research Paper Series - Johannes Kepler University Linz, 37, out.

[16] R Core Team (2014). R: A language and environment for statistical


computing. R Foundation for Statistical Computing, Vienna, Austria. URL
http://www.R-project.org/.

[17] Ribeiro Jr, P.J. e Diggle, P.J. (2001). geoR: a package for geostatistical
analysis. R news, 1(2), 14-18.

[18] Schlather, M., Malinowski, A., Menck, P. J., Oesting, M. e Strokorb, K.


(2015). Analysis, simulation and prediction of multivariate random fields with
package RandomFields. Journal of Statistical Software, 63(8), 1-25.

[19] Zhu Z., Stein M.L. (2005) Spatial sampling design for parameter estimation
of the covariance function. Journal of Statistical Planning and Inference, 134,
583-603.

[20] Zidek J.V., Sun W., Le N.D. (2000) Designing and integrating composite
networks for monitoring multivariate Gaussian pollution fields. Applied Statistics,
49, p. 63-79.

131
Painis no R Shiny pela empresa Mobi2buy
Autoria: Savano Pereira e Philipe Rabelo (Mobi2buy)

Apresentando a Mobi2buy

A Mobi2buy surgiu em 2012, quando identificou-se a necessidade de

desenvolver um produto que criasse, para as operadoras de telefonia, um canal

alternativo de relacionamento que fosse inovador e apresentasse uma reduo

relevante de custos e o aumento de resultado. O objetivo era divulgar ofertas de

produtos aos clientes com maior probabilidade de engajamento.

A empresa se props a suprir a necessidade do mercado a partir da

aplicao de inteligncia big data para execuo de campanhas. A Mobi2buy

executa todo o processo de relacionamento com os clientes. A contratante, apenas,

fornece sua base de dados. A empresa, ao passo que executa as campanhas,

enriquece o mailing com informaes relevantes obtidas atravs dos contatos com

os clientes. Desse modo, h uma segmentao que permite a interao

personalizada e, com isso, melhores resultados de engajamento e contato.

Alm dessa operao, que resulta na reduo relevante de custo para as

companhias, a Mobi2buy tambm faz o acompanhamento e repasse dirio dos

resultados para os contratantes. Assim, a inteligncia tambm totalmente

aplicada para mensurar o desempenho das campanhas a fim de aprimorar as

estratgias utilizadas nos contatos dirios.

132
Sistema de Informao Gerencial (SIG)

Basicamente os sistemas de informaes gerenciais so conjuntos de

dados que so transformados em informaes organizadas e estruturadas de forma

que possam ser utilizadas para dar suporte ao processo decisrio da empresa,

proporcionando, ainda, a sustentao administrativa para aprimorar os resultados

esperados. A ilustrao a seguir mostra um esquema simples de SIG.

O Amazon Redshift um DBMS (Sistema de Gerenciamento de Banco de Dados)

da Amazon, que permite manipular grandes conjuntos de dados armazenados pelo

princpio do banco de dados orientado coluna. Ou seja, o sistema de

gerenciamento de banco de dados armazena as tabelas em colunas, ao invs de

linhas. Ambos usam linguagens tradicionais como o SQL, entretanto, o banco

orientado coluna acessa mais precisamente os dados para responder determinada

pergunta, aumentando o desempenho para processamento massivo de

informaes.

O programa R acessa o Redshift gerando os resultados que so

apresentados em formato de painis de dados, utilizando o pacote R Shiny. Antes

133
de apresentarmos o pacote R Shiny, faremos uma breve introduo do que so

painis de dados e como so construdos.

Painis de dados ou dashboards

Painis de dados ou dashboards transformam dados em informaes teis,

representando, de forma ilustrada, o desempenho da organizao. Quando

planejados de forma correta, podem alinhar esforos, agilizar processos

decisrios, ajudando no acompanhamento dos resultados, e aumentando o retorno

sobre investimento (ROI) de sua organizao. Ainda assim, os painis so

subestimados e mal utilizados. Desde a sua elaborao, so cometidos erros que

geram ineficincia, impreciso e perda de tempo.

O entendimento do cenrio comercial, como um todo, se faz necessrio

para a tomada de decises rpidas e embasadas. Assim sendo, necessrio

elaborar painis que apresentem, de fato, o que est ocorrendo nos diversos

conjuntos de dados, correlacionando padres entre as diversas mtricas utilizadas

e fornecendo, ao mesmo tempo, resumos e anlises visuais com detalhamento de

desempenho.

Os painis ideais para as metas da equipe e da empresa precisam oferecer

uma conexo de dados agnsticos que permitam combinar diversas fontes de

informao. Eles tambm devem apresentar os dados visualmente, a fim de

agilizar o entendimento das informaes. Tambm podem ser compartilhados e

disponibilizados em verses para dispositivos mveis, visando maior

convenincia, comodidade e melhor colaborao.

134
A criao de painis adequados pode ser guiada pelas seguintes prticas:

I. Conecte-se a todos os dados existentes na organizao:

A. As empresas possuem dados armazenados em diversos locais. Conecte-se

a todos os dados (externos e internos) que possam ter informaes que

respondam aos questionamentos propostos;

B. Acesse todos os dados, independentemente de onde estejam, seja na

nuvem ou DW local;

C. No centralize os dados. Ter apenas um grupo restrito para decises no

funciona. O ideal que diferentes reas acessem os dados pois, diferentes

pessoas fazem questionamentos variados.

II. Combine seus dados:

A. Combine diferentes conjuntos de dados em um campo comum. Assim,

possvel obter uma viso geral de vrios elementos, como desempenho e

acompanhamento das metas em cada etapa do processo;

B. Combine dados quantitativos e qualitativos;

C. Seja qual forem os tipos de dados, combine-os em um campo para

melhorar o entendimento das informaes e ajude no processo decisrio.

III. Escolha mtricas relevantes:

A. A mtrica deve ser relevante para o trabalho em questo;

B. Nem todas as mtricas devem ser utilizadas;

C. Considere o seguinte ao escolher as mtricas:

135
1. Como cada mtrica ajuda a atingir as metas?

2. possvel desenvolver uma mtrica que mensure a necessidade?

3. Esta mtrica essencial para os objetivos?

4. possvel criar um mtodo de medio sistemtico e contnuo?

5. Se o mercado for extremamente competitivo, considere incorporar

mtricas das fatias de mercado de terceiros;

6. As mtricas escolhidas de forma correta devem ser possveis de

explicar com clareza como cada uma delas est relacionada aos

objetivos da organizao.

IV. Use visualizaes melhores

A. Painis devem ser fceis e rpidos de serem lidos;

B. No podem faltar nas visualizaes modernas:

1. Variedade: Nem tudo precisa ser grfico de pizza e barras;

2. Um painel com diversos filtros permite o entendimento rpido e o

compartilhamento do panorama completo para chegar a raiz de

todas aquelas perguntas, que os relatrios comuns no conseguem

prever.

C. Dados atualizados e interatividade:

1. Dados em tempo real beneficiaro suas operaes;

2. Painis interativos com fluxo de dados atualizados permitem a

execuo de tarefas e anlises importantes;

3. Resposta imediata a qualquer pergunta inesperada.

D. Capacidade de previso:

136
1. Representaes visuais para analisar uma linha de tendncia para

influncia sazonal que permite a realizao de previses para

criao de um planejamento adequado.

V. Acesso seus dados de onde estiver:

A. Menos tempo no escritrio, porm, trabalha-se mais;

B. Relatrios em tempo real compartilhados em toda a cadeia de processos.

VI. Compartilhe para promover a colaborao:

A. Painis foram feitos para serem compartilhados;

B. Todos recebem a mesma informao;

C. Usurios diferentes interagindo com os mesmos conjuntos de dados tero

perguntas diferentes sobre o assunto.

137
O R Shiny

O R Shiny proporciona uma interface web que permite a anlise interativas

de informaes por meio de painis de dados, sem conhecimento prvio das

linguagens HTML, CSS, Javascript ou Node.js.

A estrutura bsica do Shiny app formada por dois componentes: interface

do usurio e o server script. A interface do usurio controla o layout do app e

definida em um script fonte (arquivo fonte) chamado ui.R. O server script contm

as instrues que o computador necessita para a construo do app.

A seguir apresentamos as estruturas de ambos os componentes com as

descries de cada instruo.

138
A execuo localmente do Shiny realizada da seguinte forma:

1. Os scripts server.R e ui.R devem estar na mesma pasta;

2. Defina seu diretrio de trabalho usando setwd();

3. Carregue o pacote Shiny;

4. Tecle runApp() no console.

Assim, possvel obter o conhecimento inicial para construir a primeira

aplicao web utilizando o R Shiny.

139
Referncia Bibliogrfica

1. https://rstudio.github.io/shinydashboard/get_started.html

2. http://shiny.rstudio.com/

3. http://rstudio.github.io/shiny/tutorial/

4. http://shiny.rstudio.com/gallery/

5. Web Application Development with R using Shiny / Chris Beeley

140
Inteligncia Artificial com R para predio de sries
temporais
Autoria: Alex Laier Bordignon (UFF)

Parte 1 Definindo um problema de regresso

Para poder utilizar esse tutorial sero necessrios diversos pacotes, para
instalar execute os comandos abaixo no R.

install.packages("xts")
install.packages("MASS")
install.packages("scatterplot3d")
install.packages("rgl")
install.packages("neuralnet")
install.packages("ggplot2")
install.packages("plyr")
install.packages("TTR")

Vamos utilizar como exemplo o seguinte conjunto de dados:

library(MASS)
data <- data.frame( x1=Boston$crim, x2=Boston$age, y=Boston$medv)
edit(data)

1:Primeiras amostras do banco de dados MASS.

onde data$x1 representa o ndice de criminalidade da regio do imvel


data$x2 representa a idade do imvel
ddata$y representa o valor do metro quadrado do imvel

141
Os dados so tomados da biblioteca MASS que um banco de dados que
contm os valores para a cidade de Boston, MA.
Vamos chamar esses dados de Matriz de padres, isso para treinar uma
rede neural precisamos de uma matrix que contenha as variveis de input (X) e
a(s) varivel(eis) de output Y.
Vamos definir o seguinte problema de regresso:
Queremos criar um mtodo para dados valores de x1 e x2 sermos
capazes de estimar o valor de y. Isso dados os ndices de criminalidade e idade
do imvel estimar o preo.
Antes de resolver esse problema utilizando Redes Neurais, vamos olhar
um pouco para a "geometria" do problema, fazemos isso ao plotar nos eixos x e
y as variveis de entrada (input) e em z as variveis de sada (output) , aqui com
a biblioteca scatterplot3d.

library(scatterplot3d)
s3d =
scatterplot3d(x=data$x1,y=data$x2,z=data$y,highlight.3d=TRUE,angle=60)
50
40

data$x2
100
30
data$y

80

60
20

40
10

20
0

0
0 20 40 60 80 100

data$x1

Esse comando mostra o Help para a funo

?scatterplot3d

142
Plotar nos eixos x e y as variveis de entrada (input) e em z as variveis
de saida (output) , Plotar utilizando Opengl com a biblioteca RGL, onde podemos
manipular os dados
library(rgl)
plot3d(x=data$x1,y=data$x2,z=data$y, col="black", size=3)
?plot3d

Nosso objetivo na regresso gerar uma funo que dados os inputs


consegue calcular o output podemos gerar uma funo linear que prediz os
valores, o efeito ajustar um plano no que se ajusta nos dados.
O comando lm faz uma regresso linear no dado e tenta encontrar o
melhor plano que se ajusta ao dado, o parmetro y ~ x1+x2 est dizendo para
ajustar os valores de y em funo de x1 e x2

fit <- lm(y ~ x1+x2,data)

A varivel fit guarda os parmetros do plano

fit$coefficients
(Intercept) x1 x2
29.80066701 -0.31181577 -0.08955328

O modelo linear calcula o valor de y com a seguinte frmula:


= 0.311 1 + 0.089 2 + 29.8000
Os nmeros so os coeficientes encontrados pela funo lm
Podemos plotar o plano que a funo lm determinou

s3d = scatterplot3d(x=data$x1,y=data$x2,z=data$y,highlight.3d=TRUE)
s3d$plane3d(fit)

143
50
40
30
data$y

data$x2
100
20

80
60
10

40
20
0

0
0 20 40 60 80 100

data$x1

com o modelo linear podemos gerar predies para qualquer valor de x1 e x2


por exemplo se quisermos a predio no ponto x1=1.1 x2=2.1

predict(fit,data.frame(x1=c(1.1),x2=c(2.1)))
1
29.26961

Podemos predizer os valores para o dado original

yhat = predict(fit,data)
tmp <- data.frame( x1=data$x1, x2=data$x2, y=data$y, yhat = yhat)
edit(tmp)

144
Vamos calcular um erro de predio

tmp["erro"] <- data$y-yhat


edit(tmp)

O erro mdio quadrado

ErroMedioQuadradoMSE <- sum((tmp["erro"])^2)/nrow(data)


ErroMedioQuadradoMSE
66.13783

A raiz quadrada nos d em mdia quanto erramos para cima ou para


baixo

sqrt(ErroMedioQuadradoMSE)
8.132517

145
Como os dados so de natureza no linear, a idia utilizar um modelo
mais geral no caso no lugar da predio linear vamos utilizar Aprendizado de
Mquina. Vamos seguir os mesmos passos para gerar o modelo definir as
entradas (x1 x2), definir o valor do output (y), gerar a Matriz com os padres,
estimar o modelo e estimar o erro.

146
Parte 2 Resolvendo o problema de regresso com Redes neurais

O pacote neuralnet se concentra nos modelos Perceptron Multi-Camadas


(Multi-Layer Perceptrons (MLP))(Bishop, 1995), os quais so teis na modelagem
por meio de relaes funcionais entre as variveis. A estrutura subjacente de um
MLP um grafo orientado, isto , consiste de vrtices (neurnios) e arestas
(sinapses).
Os neurnios so organizados em camadas, que so normalmente ligadas
por sinapses. No pacote neuralnet, uma sinapse s pode se conectar a camadas
posteriores.
A camada de entrada constituda por todas as covariveis (um neurnio
para cada covarivel) separadas por neurnios (camadas ocultas) at as variveis
resposta.
Essas camadas intermdias so denominadas camadas ocultas (ou
variveis latentes), por no serem diretamente observveis. As camadas de
entrada e as camadas ocultas incluem um neurnio constante, o qual estar
associado ao intercepto em modelos lineares, ou seja, no diretamente
influenciado por qualquer covarivel.
Vamos carregar os mesmos dados do banco de dados MASS

library(MASS)
data <- data.frame( x1=Boston$crim, x2=Boston$age, y=Boston$medv)
edit(data)

Para trabalhar com redes neurais no R utilizaremos o pacote neuralnet

library(neuralnet)
?neuralnet

O comando neuralnet ajusta uma rede neural ao dado.

set.seed(150) #utilizamos esse comando para o resultado ser reproduzivel


nn <- neuralnet(y~x1+x2,data,hidden=c(0),linear.output=TRUE)

hidden=c(0) est dizendo para a rede no criar nenhuma camada oculta.


147
linear.output=TRUE est definindo que a rede no vai utilizar funo de
ativao na ltima camada, quando queremos fazer regresso no colocamos
funo de ativao se estamos fazendo classificao colocamos.
Podemos ver o modelo gerado, este comando serve para plotar a rede
treinada e mostrar os parmetros

plot(nn)

x1
-0
.31
18

29 .80
2

064
y

5
95
.08
-0
x2

Error: 16732.870068 Steps: 642

Nesse caso como estamos fitando uma rede sem camadas ocultas, e
desativando a funo de ativao, o modelo equivalente ao modelo linear, isso
estamos ajustando um plano aos dados

set.seed(150)
nn <- neuralnet(y~x1+x2,data,hidden=c(3),linear.output=TRUE)
plot(nn)

1 1
8.4
36
09

3.

0 54
18

10 .0
07

x1
4

-0
.12
9.3

05
8
1.551

2.459
66 0
4

54

15

23.96193 y
5
62 9

2
30
.01
9.3

-0
9.6822

x2
9.0
37 6
9
39

5
9
19
3.

Error: 16050.702381 Steps: 16078

148
Podemos criar mais de 1 camada oculta:

lifesign = "full" emite diagnostico durante o processo de determinao


dos pesos da rede
lifesign.step=1 intervalo de emisso de relatrio

set.seed(150)
nn <- neuralnet(y~x1+x2,data,hidden=c(3,2),linear.output=TRUE,lifesign
= "full",lifesign.step=1)
plot(nn)

1 1 1
4.3
11
77

6.9

7.6
44 6

66 2
3
4
1.9

37
5.9
57 0

x1
4

7. 8.
00 04
14 22
8.5

5 2
6.954
66 0

9.009
4

6
10
22

73
5.
y
4.
98
49
6
2.281 6
3
38 6

6 2
15 12
7

42 48
5.2

7. 5.
8.882 29

x2
9

8.2
79 4

37 6
5
8
7.6

01 1
3.2

Error: 21358.147708 Steps: 115

Voltando ao problema de regresso, Esse comando ajusta a rede neural,


novamente a sintaxe y~x1+x2, dizendo quais as variveis de input/output.
Vamos ajustar a rede sem camadas ocultas, e verificar que se trata do mesmo
plano obtido no modelo linear.

set.seed(150)
nn <- neuralnet(y~x1+x2,data,hidden=c(0),linear.output=TRUE,lifesign =
"full",lifesign.step=1)
plot(nn)

149
1

x1
-0
.31
18

29 .80
2

064
y

5
95
.08
-0
x2

Error: 16732.870068 Steps: 642

Podemos calcular valores para qualquer valor de x1 e x2, por exemplo x1


= 1.1 x2 = 2.2

compute(nn,cbind(1.1,2.2))$net.result
[,1]
[1,] 29.26062268

Podemos calcular a resposta da rede para todo o dado original

yhat <- compute(nn,cbind(data$x1,data$x2))$net.result

O erro

erro = data$y-yhat
tmp <- data.frame( x1=data$x1, x2=data$x2, y=data$y, yhat_nn = yhat,
erro = erro)
edit(tmp)

Vamos calcular um erro de predio

ErroMedioQuadradoMSE <- sum((erro)^2)/nrow(data)


ErroMedioQuadradoMSE
sqrt(ErroMedioQuadradoMSE)

150
Vamos plotar a resposta da rede junto do dado original para isso geramos
um conjunto de pontos para todas as posies do grid, e os valores preditos pela
rede

gridx1 = c()
gridx2 = c()
for (i in seq(min(data$x1), max(data$x1) ,length=20)){
for (j in seq(min(data$x2), max(data$x2) ,length=20)){
x1 <- i
x2 <- j

gridx1 <- append(gridx1,x1)


gridx2 <- append(gridx2,x2)
}
}

yhat <- compute(nn,cbind(gridx1,gridx2))$net.resul

tmp <- data.frame( x1=gridx1, x2=gridx2, yhat_nn = yhat)


edit(tmp)

Vamos plotar a resposta da rede junto do dado original

s3d = scatterplot3d(x=data$x1,y=data$x2,z=data$y,highlight.3d=TRUE)
s3d$points3d(x=gridx1,y=gridx2,z=yhat,col="blue" )

151
50
40
30
data$y

data$x2
100
20

80

60
10

40

20
0

0
0 20 40 60 80 100

data$x1

Vamos agora aumentar a complexidade da rede colocando uma camada


oculta com 3 ns, nesse caso estamos aumentando a complexidade da rede e
veremos a resposta no linear da mesma.

set.seed(150)
nn <- neuralnet(y~x1+x2,data,hidden=c(3),linear.output=TRUE,lifesign =
"full",lifesign.step=100)
plot(nn)

Podemos calcular a resposta da rede para todo o dado original

yhat <- compute(nn,cbind(data$x1,data$x2))$net.resul

Vamos calcular um erro de predio

152
ErroMedioQuadradoMSE <- sum((yhat - data$y)^2)/nrow(data)
ErroMedioQuadradoMSE

Vamos plotar a resposta da rede junto do dado original

gridx1 = c()
gridx2 = c()
for (i in seq(min(data$x1), max(data$x1) ,length=40)){
for (j in seq(min(data$x2), max(data$x2) ,length=40)){
x1 <- i
x2 <- j

gridx1 <- append(gridx1,x1)


gridx2 <- append(gridx2,x2)
}
}

yhat <- compute(nn,cbind(gridx1,gridx2))$net.resul

s3d = scatterplot3d(x=data$x1,y=data$x2,z=data$y,highlight.3d=TRUE)
s3d$points3d(x=gridx1,y=gridx2,z=yhat,col="blue" )
50
40
30
data$y

data$x2

100
20

80

60
10

40

20
0

0
0 20 40 60 80 100

data$x1

153
Parte 3 Carregando series temporais da internet

Esses comandos servem como exemplo para capturar dados do yahoo


finace, vamos pegar os preos histricos do ndice Ibovespa e da Petrobrs.

ibovespa_url <- "http://real-


chart.finance.yahoo.com/table.csv?s=%5EBVSP&d=2&e=29&f=2016&g=d&a=3&b=
27&c=1993&ignore=.csv"
petr4_url <- "http://real-
chart.finance.yahoo.com/table.csv?s=PETR4.SA&d=2&e=29&f=2016&g=d&a=0&b
=3&c=2000&ignore=.csv"

Vamos definir uma funo para nos ajudar

yahoo.read <- function(url){


dat <- read.table(url,header=TRUE,sep=",")
df <- dat[,c(1,5)]
df$Date <- as.Date(as.character(df$Date))
return(df)}

Carregando as series

ibovespa <- yahoo.read(ibovespa_url)


petr4 <- yahoo.read(petr4_url)

Verificando o que baixamos

summary(ibovespa)
plot(ibovespa)
Date Close
Min. :1993-04-27 Min. : 237.00
1st Qu.:1999-01-23 1st Qu.:14024.00
Median :2004-10-18 Median :38988.00
Mean :2004-10-18 Mean :36430.97
3rd Qu.:2010-07-20 3rd Qu.:54870.00
Max. :2016-03-29 Max. :94190.00

154
80000
60000
Close

40000
20000
0

1995 2000 2005 2010 2015

Date

O comando nos gera um data.frame transformar data.frame em time


series xts

library(xts)
petr4_xts <- xts(petr4$Close,order.by=petr4$Date,frequency=365)

summary(petr4_xts)
Index petr4_xts
Min. :2000-01-03 Min. : 0.40000
1st Qu.:2004-01-05 1st Qu.: 20.16500
Median :2008-01-17 Median : 36.09000
Mean :2008-02-03 Mean : 39.92662
3rd Qu.:2012-03-22 3rd Qu.: 52.40000
Max. :2016-03-29 Max. :130.00000

Com o formato xts podemos fazer buscas nas sries, vamos plotar os
dados referentes a 2015

plot(petr4_xts["2015"])

155
petr4_xts["2015"]

14
12
10
8

jan 02 2015 mar 02 2015 mai 01 2015 jul 01 2015 set 01 2015 nov 02 2015 dez 31 2015

Para trabalhar com rede neurais vamos transformar time series em matriz

petr4_mat <- data.matrix(petr4_xts["2015"])

Vamos Salvar dados no arquivo petr4_tmp.RData para podermos acessar


na prxima etapa do tutorial

save(petr4, petr4_xts,petr4_mat, file = "petr4_tmp.RData")

156
Parte 4 Series temporais e redes neurais

Ler dados do arquivo, que contm os preos de Petrobras de 2015, que


salvamos no exemplo anterior

load("petr4.RData")

Para podermos gerar um modelo que seja capaz de predizer o que vai
acontecer no futuro vamos gerar uma Matriz de padres, onde as colunas
tenham os valores do que aconteceu no passado (inputs) e colunas com o preo
atual (output)
Utilizamos o comando embed

lagmatrix <- embed(petr4_mat,3)


petr4_fr =
data.frame(x1=lagmatrix[,2],x2=lagmatrix[,3],y=lagmatrix[,1])
edit(petr4_fr)

Assim criamos um data frame com as seguintes colunas: y preo de


amanh, x1 preo de hoje e x2 preo de ontem. Essa ser a matriz de padres
do problema, vamos gerar uma rede neural que pega os ltimos dois preos da
srie e prediz o prximo preo.
Podemos plotar os nossos dados em 3D

library(scatterplot3d)

157
s3d =
scatterplot3d(x=petr4_fr$x1,y=petr4_fr$x2,z=petr4_fr$y,highlight.3d=TR
UE,angle=60)

library(rgl)
plot3d(x=petr4_fr$x1,y=petr4_fr$x2,z=petr4_fr$y, col="black", size=3)
16

petr4_fr$x2
14

16
petr4_fr$y

12

14
10

12

10
8

6
6

6 8 10 12 14 16

petr4_fr$x1

Para gerar um modelo de predio onde os inputs so os preos do


passado e o output o preo do futuro, vamos repetir o processo que vimos no
exemplo com os dados MASS
Primeiro vamos ajustar o modelo linear, com apenas 1 neurnio

set.seed(0)
library(neuralnet)
nn <- neuralnet(y~x1+x2,petr4_fr,hidden=c(0),linear.output=TRUE)
plot(nn)

Calcular o erro

yhat <- compute(nn,cbind(petr4_fr$x1,petr4_fr$x2))$net.resul


tmp <-data.frame( preco_hoje_x1 =petr4_fr$x1, preco_ontem_x2
=petr4_fr$x2, preco_amanha_y=petr4_fr$y,
preco_amanha_yhat_predicao=yhat )
edit(tmp)

158
Erro mdio quadrado

ErroMedioQuadradoMSE <- sum((yhat - petr4_fr$y)^2)/nrow(petr4_fr)


ErroMedioQuadradoMSE

Plotar original vs predio, em preto o valor do preo, em verde o


resultado da predio:

library("ggplot2")
ggplot(data =
data.frame(x=seq(1,nrow(petr4_fr)),y=petr4_fr$y,yhat=yhat),
aes(x=x)) +
geom_line(aes(y=y), color="black") +
geom_line(aes(y=yhat), color="green")

14

12
y

10

0 50 100 150 200 250


x

Podemos plotar o erro

ggplot(data =
data.frame(x=seq(1,nrow(petr4_fr)),y=petr4_fr$y,yhat=yhat),
aes(x=x)) +
geom_line(aes(y=y-yhat), color="black")

159
1.0

0.5
y - yhat

0.0

-0.5

-1.0

0 50 100 150 200 250


x

Vamos plotar a resposta da rede junto do dado original

seqx1 <- seq(min(petr4_fr$x1), max(petr4_fr$x1) ,length=20)


seqx2 <- seq(min(petr4_fr$x2), max(petr4_fr$x2) ,length=20)
grid <- expand.grid( x1 = seqx1, x2 = seqx2)
gridyhat <- compute(nn,grid)$net.resul

Vamos plotar a resposta da rede junto do dado original usando


scatterplot3d, nesse caso como estamos utilizando apenas um neurnio sem
funo de ativao estamos de fato ajustando um plano para fazer as predies.

s3d =
scatterplot3d(x=petr4_fr$x1,y=petr4_fr$x2,z=petr4_fr$y,highlight.3d=TR
UE,angle=-20)
s3d$points3d(x=grid$x1,y=grid$x2,z=gridyhat,col="blue" )

160
16
14

petr4_fr$y
12
10
petr4_fr$x1

16

8
14
12
10
8
6

6
16 14 12 10 8 6

petr4_fr$x2

Podemos utilizar opengl para plotar a resposta da rede junto do dado


original usando RGL, nesse caso podemos manipular o grfico em tempo de
execuo.

rgl.open() # Open a new RGL device


rgl.bg(color = "white") # Setup the background color
rgl.bbox(color=c("#333377","black"),
emission="#333377",specular="#3333FF", shininess=5, alpha=0.8 )

rgl.texts(x=mean(seqx1),y=min(gridyhat) , z=min(seqx2),"X:X1",color =
"black")
rgl.texts(x=min(seqx1) ,y=mean(gridyhat), z=min(seqx2),"Y:Yhat",color =
"black")
rgl.texts(x=min(seqx1) ,y=min(gridyhat) , z=mean(seqx2),"Z:X2",color =
"black")

rgl.points(x=petr4_fr$x1,y=petr4_fr$y,z=petr4_fr$x2, color
="lightgray") # Scatter plot
rgl.surface(x= seqx1,z=seqx2,y=gridyhat, color = "steelblue", alpha =
0.5, lit = FALSE)
rgl.surface(x= seqx1,z=seqx2,y=gridyhat, color = "black", alpha = 0.5,
lit = FALSE, front = "lines", back = "lines")

Vamos aumentar a complexidade da rede, nesse caso o modelo ser no


linear e vai se ajustar melhor aos dados. Vamos definir uma rede com duas
camadas ocultas com 4 e 2 ns!
161
set.seed(500)
library(neuralnet)
nn <-
neuralnet(y~x1+x2,petr4_fr,hidden=c(4,2),linear.output=TRUE,stepmax =
1e+06, lifesign = "full")

plot(nn)

1 1 1

2.
23
68
9 0.4
28

-0 .7
07
-0 .9

0 01
3 27
77
33

1
3.2
1
-5 .6

x1
9

0.83
77

0 69 6.
47
5 98
00..315

80
3.64
18 62

5.285
89
1

5.

39
39
48
5

y
2.473

1
68
07

.10

-2 .18 3
-4
.33 72
5
79

-1 .5 2
-20.154

51
24

8 222
3 36
5 68 3.
x2 -0 .3
-0
.00
-2 .51 05

70
7
7
26 1

65
71
1.1

8.2

Error: 14.513613 Steps: 493814

Calcular o erro

yhat <- compute(nn,cbind(petr4_fr$x1,petr4_fr$x2))$net.resul


ErroMedioQuadradoMSE <- sum((yhat - petr4_fr$y)^2)/nrow(petr4_fr)
ErroMedioQuadradoMSE

Plotar original vs predio

library("ggplot2")

162
ggplot(data =
data.frame(x=seq(1,nrow(petr4_fr)),y=petr4_fr$y,yhat=yhat),
aes(x=x)) +
geom_line(aes(y=y), color="black") +
geom_line(aes(y=yhat), color="green")

14

12
y

10

0 50 100 150 200 250


x

Plotar erro

ggplot(data =
data.frame(x=seq(1,nrow(petr4_fr)),y=petr4_fr$y,yhat=yhat),
aes(x=x)) +
geom_line(aes(y=y-yhat), color="black")

1.0

0.5
y - yhat

0.0

-0.5

-1.0

0 50 100 150 200 250


x

Vamos plotar a resposta da rede junto do dado original em 3d para


mostrar a geometria mais complexa do modelo gerado pela rede neural.

seqx1 <- seq(min(petr4_fr$x1), max(petr4_fr$x1) ,length=20)


seqx2 <- seq(min(petr4_fr$x2), max(petr4_fr$x2) ,length=20)
grid <- expand.grid( x1 = seqx1, x2 = seqx2)
gridyhat <- compute(nn,grid)$net.result

163
Vamos plotar a resposta da rede junto do dado original usando
scatterplot3d
s3d =
scatterplot3d(x=petr4_fr$x1,y=petr4_fr$x2,z=petr4_fr$y,highlight.3d=TR
UE,angle=-20)
s3d$points3d(x=grid$x1,y=grid$x2,z=gridyhat,col="blue" )

16
14
12

petr4_fr$y
10
petr4_fr$x1

16

8
14
12
10
8
6

16 14 12 10 8 6 6

petr4_fr$x2

Se quisermos interagir com o grfico 3d basta utilizar RGL

rgl.open() # Open a new RGL device


rgl.bg(color = "white") # Setup the background color
rgl.bbox(color=c("#333377","black"),
emission="#333377",specular="#3333FF", shininess=5, alpha=0.8 )

rgl.texts(x=mean(seqx1),y=min(gridyhat) , z=min(seqx2),"X:X1",color =
"black")
rgl.texts(x=min(seqx1) ,y=mean(gridyhat), z=min(seqx2),"Y:Yhat",color =
"black")
rgl.texts(x=min(seqx1) ,y=min(gridyhat) , z=mean(seqx2),"Z:X2",color =
"black")

164
rgl.points(x=petr4_fr$x1,y=petr4_fr$y,z=petr4_fr$x2, color
="lightgray") # Scatter plot
rgl.surface(x= seqx1,z=seqx2,y=gridyhat, color = "steelblue", alpha =
0.5, lit = FALSE)
rgl.surface(x= seqx1,z=seqx2,y=gridyhat, color = "black", alpha = 0.5,
lit = FALSE, front = "lines", back = "lines")

165
Parte 5 Um Exemplo completo

Esse exemplo mostra como gerar uma rede neural capaz de predizer
valores com base nos ltimos 8 preos da srie. O exemplo autoexplicativo e
utiliza os mesmos comandos j exibidos anteriormente.

######################################################################
###############
# _____ ___________ _____ _____ __ ____
# / ___| ___| ___ \ / __ \| _ |/ | / ___|
# \ `--.| |__ | |_/ /_____`' / /'| |/' |`| | / /___
# `--. \ __|| /______| / / | /| | | | | ___ \
# /\__/ / |___| |\ \ ./ /___\ |_/ /_| |_| \_/ |
# \____/\____/\_| \_| \_____/ \___/ \___/\_____/
#
# O2: Inteligncia Artificial com R para predio de
# sries temporais
# Prof. Alex Laier Bordignon (UFF)
# Dia 11/05/16 s 10h
# LABMAT - Bloco H - campus do Gragoat
######################################################################
###############

######################################################################
###############
#Ler dados do arquivo
load("petr4.RData")

######################################################################
###############
#lag matrix
#vamos utilizar os ultimos 7 dias para fazer a regresso
lagmatrix <- data.frame(embed(petr4_mat,8))
#a ultima coluna representa o dado que queremos predizer, por isso vamos
renomear para Y
colnames(lagmatrix)[1] = "Y"

######################################################################
###############
#Vamos separar o dado em duas partes uma para treino e uma para teste
#fazemos isso para saber se o modelo que aprendemos razovel para
#dados que no foram aprendidos.

index <- sample(1:nrow(lagmatrix),round(0.75*nrow(lagmatrix)))


train <- lagmatrix[index,]
test <- lagmatrix[-index,]

######################################################################
###############

166
#A fim de comparao vamos montar tambm um modelo linear

lm.fit <- glm(Y~., data=train)


summary(lm.fit)
pr.lm <- predict(lm.fit,test)
MSE.lm <- sum((pr.lm - test$Y)^2)/nrow(test)
print(MSE.lm)

######################################################################
###############
#Vamos normalizar o dado, isso colocar os inputs e outputs no intervalo
[0-1]
#isso para que os pessos dentro da rede tenham valores menores, fazendo
com que
#o algoritmo que estima a rede executo mais rpido

maxs <- apply(lagmatrix, 2, max)


mins <- apply(lagmatrix, 2, min)

scaled <- as.data.frame(scale(lagmatrix, center = mins, scale = maxs -


mins))

train_ <- scaled[index,]


test_ <- scaled[-index,]

######################################################################
###############
#Construo da rede neural
#Como regra geral, comeamos com um modelo em que cada camada tem 2/3
do tamanho da
#camada anterior
#no nosso caso temos 7 inputs, vamos fazer as camadas 7:5:3 ou 7:5:3:2

library(neuralnet)
# por alguma razo a frmula Y~. no funciona na funo neuralnet().
nn <-
neuralnet("Y~X2+X3+X4+X5+X6+X7+X8",data=train_,hidden=c(5,3),linear.ou
tput=T)
plot(nn) #Grfico da rede

######################################################################
###############
#vamos ver o resultado da rede no conjunto de treino
pr.nn <- compute(nn,train_[,2:8])

######################################################################
###############
#a prediao vem no intervalo [0-1] temos que inverter o processo de
normalizacao
mm = min(lagmatrix$Y)
MM = max(lagmatrix$Y)
pr.nn_ <- pr.nn$net.result*(MM-mm)+mm

167
train.r <- (train_$Y)*(MM-mm)+mm

######################################################################
###############
#plot predio vs dado original
#plotar original vs predio
library("ggplot2")
ggplot(data = data.frame(x=seq(1,nrow(train_)),
y1=train.r,
yhat=pr.nn_),

aes(x=x)) +

geom_line(aes(y=y1), color="black") +
geom_line(aes(y=yhat), color="green")

######################################################################
###############
#plotar erro
ggplot(data = data.frame(x=seq(1,nrow(train_)),
y1=train.r,
yhat=pr.nn_),

aes(x=x)) +

geom_line(aes(y=(y1-yhat)), color="black")

######################################################################
###############
#o Erro
MSE.nn <- sum((train.r - pr.nn_)^2)/nrow(train_)
MSE.nn

######################################################################
###############
#vamos ver o resultado da rede no conjunto de teste
pr.nn <- compute(nn,test_[,2:8])

######################################################################
###############
#a prediao vem no intervalo [0-1] temos que inverter o processo de
normalizacao
mm = min(lagmatrix$Y)
MM = max(lagmatrix$Y)
pr.nn_ <- pr.nn$net.result*(MM-mm)+mm
test.r <- (test_$Y)*(MM-mm)+mm

######################################################################
###############
#plot predio vs dado original
#plotar original vs predio

168
library("ggplot2")
ggplot(data = data.frame(x=seq(1,nrow(test_)),
y1=test.r,
yhat=pr.nn_),

aes(x=x)) +

geom_line(aes(y=y1), color="black") +
geom_line(aes(y=yhat), color="green")

#plotar erro
ggplot(data = data.frame(x=seq(1,nrow(test_)),
y1=test.r,
yhat=pr.nn_),

aes(x=x)) +

geom_line(aes(y=(y1-yhat)), color="black")

MSE.nn <- sum((test.r - pr.nn_)^2)/nrow(test_)


MSE.nn

######################################################################
###############
#Vamos comparar com o erro do modelo linear

print(paste(MSE.lm,MSE.nn))

######################################################################
###############
#vamos plotar os 2 modelos

pr.lm <- predict(lm.fit,lagmatrix)


pr.nn <- compute(nn,scaled[,2:8])
mm = min(lagmatrix$Y)
MM = max(lagmatrix$Y)
pr.nn_ <- pr.nn$net.result*(MM-mm)+mm

ggplot(data = data.frame(
x=seq(1,nrow(lagmatrix)),
yoriginal=lagmatrix$Y,
yhat_nn=pr.nn_,
yhat_lm=pr.lm ),
aes(x=x)) +
geom_line(aes(y=yoriginal), color="black") +
geom_line(aes(y=yhat_nn) , color="green") +
geom_line(aes(y=yhat_lm) , color="blue")

######################################################################
###############

169
#podemos comparar plotando os valores originais com as respostas

par(mfrow=c(1,2))

plot(lagmatrix$Y,pr.nn_,col='red',main='Real vs predicted
NN',pch=18,cex=0.7)
abline(0,1,lwd=2)
legend('bottomright',legend='NN',pch=18,col='red', bty='n')

plot(lagmatrix$Y,pr.lm,col='blue',main='Real vs predicted lm',pch=18,


cex=0.7)
abline(0,1,lwd=2)
legend('bottomright',legend='LM',pch=18,col='blue', bty='n', cex=.95)

######################################################################
###############
#cross validation
######################################################################
###############
#para cada conjunto inicial de treinamento a rede treinada com valores
diferentes
#vamos variar os conjuntos de treinamento e verificar as respostas,
#isso o bsico do cross validation
######################################################################
###############
library(boot)

######################################################################
###############
#Cross-validation do modelo linear
set.seed(200)
lm.fit <- glm(Y~.,data=lagmatrix)
#Cross-validation for Generalized Linear Models
cv.glm(lagmatrix,lm.fit,K=10)$delta[1]

######################################################################
###############
#cross validation da NN
set.seed(450)
cv.error <- NULL
k <- 10

library(plyr) #esse pacote serve para mostar uma barra de progresso


pbar <- create_progress_bar('text')
pbar$init(k)

for(i in 1:k){
index <- sample(1:nrow(lagmatrix),round(0.9*nrow(lagmatrix)))
train.cv <- scaled[index,]
test.cv <- scaled[-index,]

nn <-
neuralnet("Y~X2+X3+X4+X5+X6+X7+X8",data=train.cv,hidden=c(5,3),linear.
output=T)

170
pr.nn <- compute(nn,test.cv[,2:8])

mm = min(lagmatrix$Y)
MM = max(lagmatrix$Y)
pr.nn_ <- pr.nn$net.result*(MM-mm)+mm
test.cv.r <- test.cv$Y*(MM-mm)+mm

cv.error[i] <- sum((test.cv.r - pr.nn_)^2)/nrow(test.cv)

pbar$step()
}

######################################################################
###############
#resultados de cada modelo
edit(cv.error)

mean(cv.error)
######################################################################
###############
#cross validation da NN
par(mfrow=c(1,1))
boxplot(cv.error,xlab='MSE CV',col='cyan',
border='blue',names='CV error (MSE)',
main='CV error (MSE) for NN',horizontal=TRUE)

171
Dynamic reports in R (with LateX or HTML)
Autoria: Manuel Febrero-Bande (Univ. de Santiago de
Compostela)

Dynamic reports

One of the most exciting features of R is the possibility of building dynamic


reports that evaluates a chunk of code and the results (text and graphics) are
automatically formatted for a PDF or a Word output. This possibility clearly
changes the way of doing reports especially when these reports must be obtained
in a systematic schedule (daily, weekly or monthly).

The idea comes from the so--called literate programming, a programming


paradigm conceived by Donald Knuth with the aim to mix the computer code with
documentation in a single document. This is employed in R since the beginning
through a process called Sweave for automatically create demo vignettes and
documentation and was enhanced in the last years with the arrival of knitr
package (Y. Xie 2013).

Another interesting use of dynamic documents relates to Reproducible


Research which is an important issue nowadays. Scientific research must be
reproducible to be trustworthy and one of easiest way of doing that is generating
dynamic documents and so, letting other researchers to check your results.

Here, the term 'results' also includes code and data necessary for the
reproduction of the research. But clearly, the use of dynamic documents goes
beyond the academic field and it seems to be useful for the day-to-day of
companies and public institutions that want to automate the treatment of the
information to be publish internally or through web pages.

172
Introduction

This presentation shows in a schematic way what is needed for creating your first
dynamic report saving a lot of time. The number of possible examples and applications
can be extraordinarily huge and the reader will find many sources of information in
internet following the links provided here.

The presentation was originally created as a LaTeX document to create a PDF


output but by editing reasons, the final publication will be constructed using Word
sources. So, this presentation is adapted from LaTeX to Word and, unfortunately, some
interesting characteristics available in LaTeX documents are not present for Word ones
(or at least no with the same syntax). So, the reader must copy and paste the code for
LaTeX and check it in its own document to see the output of some examples.

Typically a manual report has the following usual steps:

1. Import a dataset into your statistical software.


2. Run the procedure to get the results.
3. Copy and paste selected pieces into your word processor adding your own
narratives.

These steps has several drawbacks. Clearly, it is an error-prone strategy due to too
much manual work that requires a lot of human effort to do tedious jobs. The specific
tasks are not always easy to reproduce even for the same person and this lack of
reproducibility can produce changes in the styles and/or in the quality of the data/results.

As an alternative, the dynamic strategy only needs to create a program/document


that put together the code that automatically reads the data, performs the statistical
analyses and creates the plots and tables jointly with the report. Clearly, this strategy
requires more effort for a report than the manual one although the effort can be easily
recycled for a periodic one or even for a similar one with no major changes.

Another advantage is that the report can be easily reproducible or revised because
all the code is in the source of the document. But the best new of all is that this can be

173
produced using the statistical gold standard software and without investments in
expensive software licenses. The kind of documents where the dynamic strategy is
especially useful include:

Automatic reports that must be done in a periodic schedule after updating some
information.
Web reports involving math equations, tables and plots.
Research papers (to be submitted to a journal).
Slide presentations with complex plots and tables.
Shiny applications
Solution to exams where there is an evaluation of R capabilities.
Exams with evaluation of R capabilities.

174
What is needed?

The tools for begining are freely available and the requirements of memory/space
are quite small. The following is a list of my recomendations:

1. Of course, R language that can be downloaded from http://www.r-project.org or


(in Brazil from http://cran.fiocruz.br/)
2. knitr package (Y. Xie 2013). This is a package for literate programming that is
available in CRAN. The author (Yihui Xie) of this package maintains the web page
http://yihui.name/knitr/ with a lot of documentation, demos and examples. The
package is an evolution of Sweave and, as the latter, allows to create vignettes and
manuals for packages. See (Y. Xie 2015).
3. rmarkdown package. This is a package created by RStudio (see later) that allows
us to export to a lot of output formats like HTML, PDF, Word or HTML5. See
the project webpage http://rmarkdown.rstudio.com/ and (Allaire et al.
2015),(Baumer et al. 2014),(Udwin and Baumer 2015)].
4. A LaTeX compiler. The best results for scientific documents are done mixing
LATEX with R to produce PDF outputs. There are many available althoug my
recomendation is to use MikTeX in Windows (http://www.miktex.org), MacTeX for
MacOS (http://tug.org/mactex/) and TeXLive in Linux systems
(http://tug.org/texlive/).
5. A TeX editor. Although all can be done with plain text files, it would desirable
to have an editor that helps the author colouring the special commands. A good
choice is TeXstudio (http://texstudio.sourceforge.net/) available for all systems
especially designed for the construction of TeX files. Typically, the editor must
be configured to add the new compilation option. In TeXstudio (similarly in other
editors) this is done including a new compiler command:
"path/to/Rbin/Rscript.exe" -e "library(knitr);
knit2pdf('\%.Rnw')" in the Options/Configure TexStudio section. Another
interesting tool is Rstudio(http://www.rstudio.com) that not only can be edit and
compile TeX documents but also R scripts and markdown documents in a
175
integrated framework including the R one. This is an good option for beginners
not using complex TeX documents.
6. Ocasionally, it would be interesting to edit plain text files. My recomendation for
that is Notepad++ that is one of the most powerful plain text editors and supports
a lot of programming languages.

176
LaTeX --> PDF

First steps. Beginning our first dynamic report with LaTeX

The steps for creating a new dynamic document are simple

1. Use your favourite template of LaTeX changing the extension of your file from
.tex to `.Rnw.
2. Insert the code chunks within the delimiters << >>= and @.
3. Knitr evals the code and include the results, messages, warnings and figures into
the file with .tex extension.

Let's consider the following simple example:

\documentclass{article}
\begin{document}
\title{A First Example}
Simple example of a simulation of $n=50$ samples from a
standard normal and the computation of the CI for the mean.
<<simu,fig.height=4,fig.width=4,fig.align='center'>>=
n=50
x=rnorm(n)
plot(density(x),main="N(0,1)",ylim=c(0,0.4))
curve(dnorm(x),from=-4,to=4,add=TRUE,col=2,lwd=2)
cimean=mean(x)+c(-1,1)*qnorm(0.975)*sd(x)/sqrt(n)
@
The confidence interval for the mean is $(\Sexpr{round(cimean,3)
})$.
\end{document}

This example generates a sample of size 50 from a standard normal and computes
the confidence interval for the mean. The code also plots a nonparametric estimation of
the density of this sample jointly with the standard normal. Some modifiers of the code
are included in the head of the chunk: << >>=.

177
To obtain the final result, open a new R session and type (be sure to be in the right
folder):

library(knitr)
knit2pdf("first.Rnw")

##
##
## processing file: first.Rnw

##
|
|
| 0%
|
|.............................................................
....| 100%
## ordinary text without R code

## output file: first.tex

## Warning: comando ejecutado '"C:\PROGRA~2\MIKTEX~1.9\miktex\bi


n\texify.exe"
## --quiet --pdf "first.tex" --max-iterations=20 -I "C:/PROGRA~1
/R/R-33~1.1/
## share/texmf/tex/latex" -I "C:/PROGRA~1/R/R-33~1.1/share/texmf
/bibtex/bst"'
## tiene estatus 1

## [1] "first.pdf"

This will create a file first.pdf in the same directory of the first.Rnw file.

178
Functions to be used within R

The following are the most important commands included in the knitr package:

knit("first.Rnw"): evaluates the code and creates a TeX output: first.tex.


knit2pdf("first.Rnw"): evaluates the code and creates a PDF output:
first.pdf.
knit2html("first.Rmd"): evaluates the code (in markdown format) and creates
a HTML output: first.html.
stitch("first.R"): creates an automatic PDF report from your script.
purl("first.Rnw"): extracts the code from your and creates a R script with it:
first.R
spin("first.R") creates an .Rnw file using the lines beginning with \#' as
regular text and those with \#+ as chunk options.

179
Options for chunks in knitr

Every chunk can have a label and several options in the following structure:
<<[label=]name,opt1=val1,opt2=val2,...>>= . In the options we can write regular
R expressions. The most common ones are listed in the following:

eval=TRUE|FALSE|c(1,3:4): This option controls which lines of the chunk must


be evaluated. The default is TRUE. FALSE is employed when we want only show
the code. Also, we can provided which lines must be evaluated.

echo=TRUE|FALSE|c(1,3:4): This option controls which lines of the code must


be printed. By default all lines are printed.

results='markup'|'asis'|'hold'|'hide': By default the results of the code


chunk are formatted to fit the page but some other tools in R (see for example,
package xtable) can directly write the results in TeX language. In this case, the
'asis'option must be employed. 'hide' does not show any result.
warning=TRUE|FALSE, message=TRUE|FALSE, error=TRUE|FALSE: Warnings,
console messages and errors are printed (or not) in the output. The default is
TRUE for all options.
split=FALSE|TRUE: Should R split the results?
tidy=TRUE|FALSE: Decorate your code using formatR package. Use
tidy.opts=list(blank=FALSE, width.cutoff=60) to modify the type of
formatting.
prompt=FALSE|TRUE: The prompt symbol is included with the results.
comment='##': Character for the comments.
size='normalsize': Name of the font size for the results.
background='#F7F7F7': Background color in hex code.
cache=TRUE: The result of the code chunk is stored in cache to avoid reevaluations
in future compilations.

180
fig.path='figure/plot-': Name of the folder where the figures. The
characters after the last / are used as prefix of the graphics files.
fig.keep='high'|'all'|'none'|'first'|'last' : This option controls
which figures are stored. high means only high level plots. all means that all
intermediate plots (every time a graphical function is invoked) are stored.
fig.show='asis'|'hold'|'animate'|'hide' : How to arrange the plots? The
option animate jointly with package animation in LaTeX allows the use of
animation in PDF files (only can be viewed with Acrobat Reader).
dev='CairoPDF': Graphics devices for figures. Many of them are available
depending on the specific hardware and/or installations: bmp, postscript,
pdf, png, svg, jpeg, pictex, tiff, win.metafile, CairoJPEG,
CairoPNG, CairoPS, CairoPDF, CairoSVG, CairoTIFF, cairo_pdf,
cairo_png, cairo_ps, cairo_svg, tikz . The options for devices can be
included in dev.args.
fig.width=5, fig.height=6, fig.asp=1 : Width, height (in inches) and
aspect ratio for figures.
out.width='.8\\linewidth', out.height='4in',
out.extra='angle=90': Final output options for the figures. (in TeX units).
Note the use of two backslashes to include a measure of the document in the first
option. As the backslash is a reserved character in R, every time a command of
LaTeX must be included, the command must include a double backslash.
fig.align='center', fig.env='figure', fig.cap='My caption' :
Options for figures, alignment, TeX environment and caption.

See a complete list at http://yihui.name/knitr/options

181
Simple Examples

Global options and hooks

The Global options, those which can be applied to every chunk, can be included
at the begining of the document. Typically, this is done by invoking opts_chunk$set
function in a chunk of code at the beginning of the document. A typical example of a
setup chunk is in the following.

<<setup>>=
opts_chunk$set(fig.path='figure/plot-',fig.align='center',
fig.show='hold',size='footnotesize',fig.height=4
,
comment=">",tidy=TRUE,tidy.opts=list(blank=FALSE
))

hook_output = knit_hooks$get('output')
knit_hooks$set(output = function(x, options) {
if (!is.null(n <- options$out.lines)) {
if(length(n)==1) n<-c(n,n)
x = unlist(stringr::str_split(x, '\n'))
len <- length(x)
if (length(x) > n[1]) {
# truncate the output
x = x[intersect(seq_along(x), n)]
if(n[1] >1) x = c('....\n', x)
if(range(n)[2] < len) x = c(x, '....\n')
}
x = paste(x, collapse = '\n') # paste first n lines together
}
hook_output(x, options)
})
knit_theme$set("default")
@

It includes a list of default options with opts_chunks$setand a useful hook. A


hook is a function to be applied to chunks for formatting them or to the outputs (see later).

182
<<echo=FALSE>>=

# Select lines to be showed, include outlines=begin:end


hook_output = knit_hooks$get('output')
knit_hooks$set(output = function(x, options) {
if (!is.null(n <- options$out.lines)) {
if(length(n)==1) n<-c(n,n)
x = unlist(stringr::str_split(x, '\n'))
if (length(x) > n[1]) { # truncate the output
x = x[intersect(seq_along(x), n)]
if(n[1] >1) x = c('....\n', x)
if(range(n)[2] < length(x)) x = c(x, '....\n')
}
x = paste(x, collapse = '\n') # paste first n lines together
}
hook_output(x, options)
})
knit_theme$set("default") #There are more than eighty themes

In the preceding example, a new chunk option with the name out.lines is
programmed that allows to select the lines of the result we want to show. This is included
as a new output hook.

See examples and documentation at http://yihui.name/knitr/hooks/

Source
<<echo=1:3,out.lines=9:13>>=

x=rnorm(100)
y=5*x+rnorm(100,sd=.1)
z=lm(y~x)
summary(z)

183
Result
x=rnorm(100)
y=5*x+rnorm(100,sd=.1)
z=lm(y~x)

##
## Call:
## lm(formula = y ~ x)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.257206 -0.076275 0.006061 0.078317 0.278279
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.00408 0.01029 -0.397 0.693
## x 5.01901 0.01142 439.589 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '
1
##
## Residual standard error: 0.1029 on 98 degrees of freedom
## Multiple R-squared: 0.9995, Adjusted R-squared: 0.9995
## F-statistic: 1.932e+05 on 1 and 98 DF, p-value: < 2.2e-16

We can use online expressions derived from the chunks using Sexpr{.}. For
example, the slope is obtained in TeX with \Sexpr{coef(z)[2]}, e.g. = 5.0190076

The next example shows the effect of option results='asis'. All the following
lines are treated without format.

Source
<<echo=FALSE,results='asis'>>=
b=coef(z)
cat(sprintf("$y = %.03f + %.03f x$",b[1],b[2]))
x=rnorm(1,sd=-1)
x=rnorm(-1,sd=1)
message("Hello Niteroi")

Result

184
= 0.004 + 5.019
## Warning in rnorm(1, sd = -1): NAs produced

## Hello Niteroi

185
Tables

The construction of complex tables is one of the heaviest task when it is done
manually. For this purpose, there are several alternatives that would be listed in the
following, all of them using results='asis'.

Simple tables: The command kable in knitr allows to print simple tables
changing a few options like captions or alignament of the columns.

M=matrix(rnorm(12),ncol=4,nrow=3)
colnames(M)=paste("rep",1:4)
rownames(M)=paste("row",1:3)
kable(M,col.names=paste("rep",1:4),align=c("r","l","c","r"),digi
ts=c(1,2,3,4),caption="Caption of my table")

Caption of my table

rep 1 rep 2 rep 3 rep 4


row 1 1.2 -0.44 0.083 -0.4089
row 2 -1.1 0.64 -1.821 0.6443
row 3 -0.1 1.07 -1.348 -0.8259

Tables with xtable: A more complex treatment of a table can be done using the
R package xtable that transform a data.frame or a matrix into a LaTeX table.
Different modifiers of the table can be provided when the table is constructed or
when it is printed (see an example below).

186
library(xtable)
xtab=xtable(M, caption="The long caption of my table 2", label="
mytab", digits=c(0,1,2,3,4), display=c("s","f","g","e","f"))
print(xtab,hline.after = c(-1,0,0,0,1,3,3),size = "tiny", captio
n.placement="top")

The table can be referred as \ref{mytab} inside TeX. As this document is


compiled using markdown, it is not possible to see the table but executing the preceding
code in a console, the TeX commands for constructing a complex table will be obtained.
See all options in function print.xtable.

Example Tables (with knitLatex)}: The package knitLatex allows the use of
table(xTab), longtable(lTab) and supertabular(sTab) environments
which are especially adapted to tables with a lot of rows.

library(knitLatex)
xTab(round(M,4), caption.bottom="The long caption of my table 3"
, label="mytab2", rows=TRUE, coldef="|p{3cm}|rlc|p{1cm}|")

The table can be referred as \ref{mytab2}. See all options in functions xTab,
lTab, sTab.

187
Graphics

Simple Graphics (JPG)

The flexibility for formatting graphics is complete in knitr. Many options can be
included in the chunk head.

<<cars,dev="jpeg", fig.width=3>>=
plot(cars,pch=19,col="orange",cex=2)
lines(lowess(cars,f=0.3),col="red",lwd=3)
plot(cars,pch=20,col="green",cex=2)
lines(lowess(cars,f=0.2),col="blue",lwd=5)

188
The options begining with fig. are always in inches and correspond to the
measure of the graphic window that is open to draw. Better quality is obtained con big
values here.

The final size in the document is controlled with the options begining with out.
that need the exact units. If a output is related to a command in TeX like, for instance, the
command *, it must be written with double backslash. The options for figure size are not
available for a Word output.

CairoPDF or other devices

Each device has its advantages and drawbacks and mix better with certain types
of documents than others. For instance, CairoPDF is a good choice when the graphic is
included in a TeX file whose final output is a PDF. On the contrary, JPG is a raster
compressed format recommended for HTML pages but with low quality in other kind of
documents.

Also, some devices are designed only for a kind of document like, for instance, a
tikz device that creates the plot through low level TeX graphics commands. The
following two examples are provided as examples useful in TeX but completely erroneous
in a markdown document (the one is employed here for this contribution).

<<cars2,dev="CairoPDF", fig.height=5, out.height='.45\\linewidth


'>>=
curve(dnorm(x),from=-4,to=4,lwd=4,col=2,main=expression(paste(f(
x)==frac(1,sqrt(2*pi))," ",plain(exp)," ", {frac(-(x-mu)^2,2)}))
,cex=2)
plot(c(0,1),c(0,1),type="n",ann=F,axes=FALSE)
rect(c(0,.3,.2),c(1,.8,0),c(.6,.8,1),c(.2,.3,.6),col=rainbow(3,a
lpha=.5))

189
The tikz device converts the graphics elements to LaTeX commands. Highly
recommended for printing with the best quality math expressions inside graphs.

curve(dnorm(x),from=-4,to=4,lwd=4,col=2,main="")
text(0,.1,paste("$f(x)=\\frac{1}{\\sqrt{2\\pi}}","\\exp\\{-\\fra
c{(x-\\mu)^2}{2}\\}$"),cex=1.25)

Note the use of double backslash in all TeX commands.

Animations in PDF

It is possible to create animations in PDF documents although these animations


can only be viewed with Adobe Acrobat. In the preamble of the LaTeX document, a call
to \usepackage{animate} must be included. The header chunk must have the option
fig.show='animate' and the specific settings for the animation (like in the following
example, interval=1 that sets a change every second).

<<clock,fig.show='animate',interval=1 >>=
par(mar = rep(3, 4))
for (i in seq(pi/2, -4/3 * pi, length = 12)){
plot(0, 0, pch = 20, ann = FALSE, axes = FALSE)
arrows(0, 0, cos(i), sin(i))
axis(1, 0, "VI"); axis(2, 0, "IX")
axis(3, 0, "XII"); axis(4, 0, "III"); box()}
@

The frames of the animation are conformed with the high level plots in the code.
The preceding example draws a clock and changes an arrow pointing to a number every
second. Internally, the plots for every step are generated and stored with correlative
numbers.

190
Cache

Sometimes when the code chunks are computationally heavy it is interesting to


store some information about them to avoid unneed reevaluations. This is specially
interesting when the code includes small simulation studies. The cache is activate through
the option cache=TRUE that creates an object for every cached chunk in the document in
the folder cache. The code chunk is only evaluated when:

It is the first time the code is compiled.


There is a change in a object inside the chunk. (for simulations use set.seed).
There is a change in a R object defined in the head of the chunk <<>>=.
There is a change in a previous chunk that this chunk depends on. (include the
option dependson=namechunk.

<<map,cache=TRUE,vers=R.version.string,file.time=file.info('map_
brazil.R')\$mtime>>=

source("map_brazil.R")

191
The example executes the R script map_brazil.R (in the same folder of the
document) and the chunk will be reevaluated if:

There is a change in the R version (object vers)


There is a change in the script (object file.time)

Also, another interesting option is the cross reference. This allows that the code
written in one chunk could be inserted into another one as is. The syntax is quite simple.
Write <<mychunk>> inside one chunk to include the directly the code of the chunk
labelled mychunk. This is useful to create documents that intensively make use of certain
pieces of code. (This only works for LATEX documents)

Chunk with a legend

<<legend,eval=FALSE>>=
theme(legend.text=element_text(size=12,angle=45))+theme(legend.p
osition="bottom")
@

Chunk that includes the legend

<<plot1>>=
library(ggplot2)
qplot(carat,price,data=diamonds,color=cut)+
<<legend>>
@

192
Parents and children

If the document is too long (for instance a book) it would be a good idea to split
it into pieces (chapters, sections, ). The following is a simple example of the use of a child
repeatly in a parent.

The code included in child.Rnw simply computes the sum of squares of a vector
x.

<<include=FALSE>>=
set_parent('parent.Rnw')
@

This is the child document

<<>>=
y=sum(x^2)
@

193
The code of the child is repeatedly employed in parent.Rnw in chunk codes
labelled B and D. In both cases, in the document we write a numeric value of y as a result
of the formula y=sum(x^2).

\documentclass{article}
\begin{document}
\title{Parent example}
<<A>>=
x=rnorm(12)
y="Hello"
@
<<B,child='child.Rnw'>>=
@
The value of $y$ is \Sexpr{y}. (Not Hello!!).
<<C>>=
x <- rnorm(8)
@
Include the child document again.
<<D, child='child.Rnw'>>=
@
The value of $y$ is \Sexpr{y}. (Not Hello!! nor the previous val
ue.).
\end{document}

Hooks: Write your own extensions.

A hook is a function (stored in knit_hooks that modifies the behavior of a chunk.


A hook always has three arguments: before, options and envir. The default
implemented hooks are showed with the following code:

names(knit_hooks$get(default=TRUE)) #default hooks

## [1] "source" "output" "warning" "message" "error" "


plot"
## [7] "inline" "chunk" "text" "evaluate" "document"

The following are three small examples of useful hooks using knit_hook$set
function. The first one (inline) modifies the behaviour of the numeric objects when

194
printed online (with \Sexpr{}) to show only 3 decimal digits. The second one creates a
new option (called margins) thats establish the margins for a plot. And finally, the third
one creates a new option (called title) that in LaTeX creates a title of the code with a
horizontal line after the chunk code and several dashes after the title.

knit_hooks$set(inline=function(x){ if (is.numeric(x)) round(x,3)


}) #Change the default hook
knit_hooks$set(margin=function(before, options,envir){
if (before) { m<-options$margin
if (is.numeric(m) && length(m)==4L) {par(mar=m)}
}})

knit_hooks$set(title=function(before,options,envir){
if (before) {paste("**",options$title,"**",sep="")} else {paste(
"-----",sep="")}
})

Now using

<<title="Code example">>=
x=pi

we got

Code example
x=pi #Simple example of a hook with title

Now, we can print with only three decimals 3.142.

195
The options of a chunk can also be modified by new programmed options with the
function opts_hooks. The function opts_template allows to group a list of options.
Consider the next example:

<<>>=
opts_hooks$set(fig.height=function(options){
if (options$fig.height<options$fig.width) {
options$fig.height=options$fig.width
}
options #A plot with at least the same height as width
})
opts_template$set(
fig.large=list(fig.width=6,fig.height=5,out.width='.8\\linew
idth'),
fig.small=list(fig.width=4, fig.heigth=3,out.width='2.5in'))
@

<<margin=c(2,2,.1,.1),opts.label='fig.small'>>=
curve(dnorm(x),from=-4,to=4,lwd=2)

More R options: <<R.options=list(width=30,digits=2>>=

196
A couple of tricks for LaTeX

The chunk options can be shortened with set_alias, e.g.,


set_alias(w="fig.width",h="fig.height")
The function knitrSet of the package Hmisc can establish a lot of shortcuts to
options. Also, in that package there are some functions to format R objects for
LaTeX documents.
With package beamer in LaTeX, always use [fragile] in each frame with code
chunks. If not, the compilation will return an error
Every LaTeX commands included in the chunk options or as characters must be
written with the double backslash, e.g. '\\linewidth',
fig.cap='$\\beta=0.5$'
If you want reproducible simulations, remember the use of set.seed().

197
R Markdown

R Markdown is a simple plain text format that can be converted to valid XHTML or
HTML. This allows to convert a simple document to many other formats: PDF, Word,
HTML5, ...

The document has a begining section with Metadata (separated from the rest of
the document with three dashes ---. The document continues with the Contents which
are written in plain text.

The code chunks begin with three backsticks plus {r label, opts} and end with
three backsticks.|

See the file example.Rmd as a guide. (Simply open it in RStudio and hit the Knit
Word, Knit PDF or Knit Word button).

With Pandoc (see http://www.pandoc.org and (MacFarlane 2013)) this file can be
converted to Word Documents (.docx), PDF, Shiny, HTML5 and much more.

See the help included in RStudio.

R Markdown and Shiny

To produce simple Shiny documents using R Markdown change Metadata to


include output: html_document and runtime: shiny. Simply edit and compile the
file example2.Rmd in RStudio.

Alternatively, run rmarkdown::render() from inside R. (pandoc must be


previously installed).

198
References

Allaire, JJ, J Cheng, Y Xie, J McPherson, W Chang, J Allen, H Wickham, A


Atkins, and R Hyndman. 2015. Rmarkdown: Dynamic Documents for R. R
Package Version 0.8.

Baumer, Ben, Mine Cetinkaya-Rundel, Andrew Bray, Linda Loi, and Nicholas J
Horton. 2014. R Markdown: Integrating a Reproducible Analysis Tool into
Introductory Statistics. ArXiv Preprint ArXiv:1402.1894.

MacFarlane, John. 2013. Pandoc: A Universal Document Converter, 2014.

Udwin, Dana, and Ben Baumer. 2015. R Markdown. ArXiv Preprint


ArXiv:1501.01613.

Xie, Yihui. 2013. Knitr: A General-Purpose Package for Dynamic Report


Generation in R. R Package Version 1 (7): 1.

. 2015. Dynamic Documents with R and Knitr. Vol. 29. CRC Press.

199
Reviso Tcnica:

Luciane Ferreira Alcoforado (D.Sc.)

Professora Adjunta, UFF

Primeira Reviso: 28/10/2016

ltima Reviso: 19/05/2017

Nmero de revises: 9

200