Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Editorao e Capa:
Luciane Alcoforado
ISBN 978-85-922932-1-5
3
CONSELHO EDITORIAL
4
No o mais forte que sobrevive.
Charles Darwin
5
PREFCIO
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.
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.
8
Agradecimento especial aos autores que prontamente responderam ao
convite de contribuir com os captulos que compem esta obra.
9
Sumrio
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
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
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
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
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
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
14
Figura 1: Nmero de pacotes do R por ano e verso, presentes em verso final no
site principal de distribuio (de Vries, 2016).
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.
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.
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
http://www.tutorialspoint.com/execute_r_online.php
http://pbil.univ-lyon1.fr/Rweb/Rweb.general.html
http://www.r-fiddle.org
18
Interfaces
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
21
a quinto respectivamente, encontram-se muito prximos. Esse ordenamento
mostra a fora que o sistema de anlise vem tomando nos ltimos anos.
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.
23
Referncia Bibliogrfica
24
Estatstica com R, aes para o aprendizado do R
Autoria: Luciane Ferreira Alcoforado (UFF)
O que o R?
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
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
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.
29
Base para as aes do aprendizado do R
Capacidade crtica;
Assimilar novos conhecimentos cientficos e/ou tecnolgicos;
Capacidade de trabalhar em equipe multidisciplinar;
Desenvolver habilidade computacional.
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
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.
FIGURA 1: RECORTE DE MATERIAIS DE APOIO PRODUZIDOS POR PROJETO DE MONITORIA COORDENADO PELA
PROFA. LUCIANE ALCOFORADO
33
Projeto de Extenso: 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.
34
Equipe-Contato
35
FIGURA 3: PERFIL DAS PESSOAS QUE CURTEM A PGINA DO PORTAL ESTATSTICA COM R! NO FACEBOOK.
36
Produo de vdeo aulas
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.
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
38
Exemplo de aplicao utilizando os recursos do portal Estatstica com
R!
39
Referncia Bibliogrfica
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
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.
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.
42
2. Banco de dados e estrutura do pacote
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.
44
2.2 Funcionalidades do Pacote
sobre elas, englobando tanto a API privada de extrao dos dados diretamente das
tcnicos.
seleo de grficos estilizados das sries histricas mais utilizadas para prever e
45
FIGURA 2: GRUPOS DE FUNCIONALIDADES DO BETS
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.
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
> install_packages("BETS")
47
3. Utilizando o BETS
BETS.search
BETS.search(description,src,periodicity,unit,code,view =
TRUE,lang = "en")
48
code - Um integer. O cdigo nico da srie na base do BETS.
direto no console do R.
lang - Um character. Idioma da pesquisa. Por padro, 'en', para ingls. Tambm
'ipca' e 'ncleo'.
2. Para procurar expresses inteiras, basta cerc-las com aspas simples. Exemplo:
3. Para excluir palavras da busca, insira um ~ (o caracter til) antes de cada um delas.
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.
## 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)
## 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
BETS.get
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.
## 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
51
arquivo, h uma tabela onde a primeira coluna conter as datas e a segunda, os
dados.
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
53
FIGURA 3: GRFICO DO IPCA (NDICE NACIONAL DE PREOS AO CONSUMIDOR AMPLO) 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
O autor do texto deve fornecer seu nome e seu site e/ou e-mail. O logo no
obrigatrio.
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)
onde
Zt a srie em estudo
at um rudo branco
58
D = (1 B s )D o operador de diferenas na frequncia sazonal s e D o nmero
Em sua concepo original, que ser adotada aqui, a metodologia de Box &
Jenkins se divide em trs estgios iterativos:
sazonais, e determinao das ordens dos polinmios descritos acima, fazendo uso
regresso dinmica.
contrrio, o modelo pode ser utilizado para fazer previses. Na prxima seo,
Preliminares
Vamos trabalhar com a srie de cdigo 21864, a srie de produo de bens
59
do BETS. Como visto anteriormente, isso pode ser feito com a funo
## 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
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)
61
FIGURA 7: GRFICO MENSAL DA SRIE EM ESTUDO.
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.
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.
> 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"]){
> library(forecast)
>
> # Testes OCSB para razes unitrias na frequencia sazonal
> nsdiffs(data, test = "ocsb")
## [1] 0
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. Identificao
65
FIGURA 9: FUNO DE AUTOCORRELAO DE ZT
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
67
c. Testes de Diagnstico
O grfico dos resduos padronizados (figura 13) ser feito com o auxlio
da funo BETS.std_resid, que foi implementada especificamente para isso.
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.
## 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
69
## sar1 0.8361212 0.03822978 21.870938 2.606518 TRUE
## dummy 5.1090010 1.29719620 3.938495 2.606518 TRUE
FIGURA 12: RESDUOS PADRONIZADOS DO MODELO PROPOSTO APS A DETECO DE QUEBRA ESTRUTURAL
## [1] 847.3404
> model2$bic
## [1] 838.2246
70
##
## Box-Ljung test
##
## data: resid(model2)
## X-squared = 10.867, df = 11, p-value = 0.4545
d. Previses
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.
72
4201
## Theil's U
## Test set 0.8359621
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
74
FIGURA 15: INCIO DO ARQUIVO DE SADA DA FUNO BETS.REPORT PARA A SRIE EM ESTUDO.
75
As informaes da srie tal como se encontram na tabela de
76
4.2 General Regression Neural Networks (GRNNs)
77
FIGURA 18: ESQUEMA DE UMA GRNN
Preliminares
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
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).
> 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.
80
FIGURA 17: GRFICO DO IPCA E DO HIATO DO PIB REAL
Normalizao
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).
Treinamento
BETS.grnn.train = function(train.set,sigma,step =
0.1,select = TRUE,criterion = "MAPE")
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.
>
> # 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
+ }
+ }
>
84
FIGURA 18: GRFICO DAS PREVISES DA GRNN
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
## [1] 36.48025
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.
> preds[['accuracy']]
87
FIGURA 19: GRFICO DAS PREVISES DA GRNN
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
O cdigo para executar o teste do sinal com os erros dos nossos modelos
seria:
89
suposies sobre vrios outros aspectos da srie em estudo, como a sazonalidade,
a tendncia e os ciclos.
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 .
90
5. Concluso
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.
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
G. E. P. Box and G. M. Jenkins. Time Series Analysis forecasting and control. Holden Day,
San Francisco, 1970.
U. C. Bureau. X13-arima-seats reference manual acessible html output version. 2015. URL
https:
//www.census.gov/ts/x13as/docX13AS.pdf.
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.
L. G. Godfrey. Testing against general autoregressive and moving average error models
when the regressors include lagged dependent variables. Econometrica, 1978.
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.
G. M. Ljung and G. E. P. Box. On a measure of a lack of fit in time series models. Biometrika,
65, 1978.
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.
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
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.
97
2. Pesquisa Nacional por Amostra de Domiclios Contnua (PNADC)
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."
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.
101
3. Library survey
102
4. O site asdfree.com
103
5. Taxa de desocupao
#setwd("C:/Djalma/SER")
load("pnadc 2015 04.rda")
ls()
## [1] "x"
dim(x)
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:
df_pos <-data.frame(posest=unique(x$posest),
Freq=unique(x$v1029))
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:
## vd4001 == "1"
## vd4002 == "2" 1.1
106
6. Library convey
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
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.
() ( )
=1
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;
library(vardpoor)
data(eusilc)
library(survey)
des_eusilc <- svydesign(ids = ~rb030, strata =~db040, weights =
~rb050, data = eusilc)
library(convey)
des_eusilc <- convey_prep( des_eusilc )
109
svyarpr(~eqIncome, design=des_eusilc)
arpr SE
eqIncome 0.14444 0.0028
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
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
svyarpr(~eqIncome, design=des_eusilc_rep)
arpr SE
eqIncome 0.14444 0.003
111
6.3 Indicador FGT
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.
112
Em seguida, apresentamos alguns exemplos de utilizao da funo
svyfgt para estimar valores do indicador FGT de pobreza.
fgt0 SE
eqIncome 0.11444 0.0027
fgt1 SE
eqIncome 0.032085 0.0011
fgt0 SE
eqIncome 0.14444 0.0028
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:
fgt1 SE
eqIncome 0.051187 0.0011
^
^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:
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
115
6.5 ndice de Gini
2
=1 =1
= 1
=1
svygini(~eqIncome, des_eusilc )
gini SE
eqIncome 0.26497 0.0019
gini SE
py010n 0.64606 0.0036
116
py010n fique mais distante da curva de igualdade. Assim, comparando as duas
curvas de Lorenz que embasam as estimativas acima, temos:
117
Referncia Bibliogrfica
Langel, Matti e Yves Till (2011). Statistical inference for the quintile share ratio.
Journal of Statistical Planning and Inference, 141:26762985.
118
Planejamento amostral em Geoestatstica com R
Autoria: Gustavo da Silva Ferreira (ENCE/IBGE)
Introduo
119
Geoestatstica
= + ( ) + e E[ ] = 0, Var[ ] = 2 , i,
120
FIGURA 1: VALORES OBSERVADOS DA SRIE TEMPORAL DE INFESTAO DO AEDES AEGYPTI NO RIO DE
JANEIRO. FONTE: FERREIRA (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).
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 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
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
125
Aplicao I: Dados de infestao pelo mosquito Aedes aegypti no Rio de
Janeiro
126
Aplicao II: Dados de Precipitao Pluviomtrica no Rio de Janeiro
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
129
Referncia Bibliogrfica
[3] Bivand, R. e Lewin-Koh, N. (2015). maptools: Tools for reading and handling
spatial objects. R package version 0.834.
[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.
[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.
[17] Ribeiro Jr, P.J. e Diggle, P.J. (2001). geoR: a package for geostatistical
analysis. R news, 1(2), 14-18.
[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
enriquece o mailing com informaes relevantes obtidas atravs dos contatos com
132
Sistema de Informao Gerencial (SIG)
que possam ser utilizadas para dar suporte ao processo decisrio da empresa,
informaes.
133
de apresentarmos o pacote R Shiny, faremos uma breve introduo do que so
elaborar painis que apresentem, de fato, o que est ocorrendo nos diversos
desempenho.
134
A criao de painis adequados pode ser guiada pelas seguintes prticas:
nuvem ou DW local;
135
1. Como cada mtrica ajuda a atingir as metas?
explicar com clareza como cada uma delas est relacionada aos
objetivos da organizao.
prever.
D. Capacidade de previso:
136
1. Representaes visuais para analisar uma linha de tendncia para
137
O R Shiny
definida em um script fonte (arquivo fonte) chamado ui.R. O server script contm
138
A execuo localmente do Shiny realizada da seguinte forma:
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/
140
Inteligncia Artificial com R para predio de sries
temporais
Autoria: Alex Laier Bordignon (UFF)
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")
library(MASS)
data <- data.frame( x1=Boston$crim, x2=Boston$age, y=Boston$medv)
edit(data)
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
?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
fit$coefficients
(Intercept) x1 x2
29.80066701 -0.31181577 -0.08955328
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
predict(fit,data.frame(x1=c(1.1),x2=c(2.1)))
1
29.26961
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
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
library(MASS)
data <- data.frame( x1=Boston$crim, x2=Boston$age, y=Boston$medv)
edit(data)
library(neuralnet)
?neuralnet
plot(nn)
x1
-0
.31
18
29 .80
2
064
y
5
95
.08
-0
x2
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.
148
Podemos criar mais de 1 camada oculta:
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
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
compute(nn,cbind(1.1,2.2))$net.result
[,1]
[1,] 29.26062268
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)
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
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
set.seed(150)
nn <- neuralnet(y~x1+x2,data,hidden=c(3),linear.output=TRUE,lifesign =
"full",lifesign.step=100)
plot(nn)
152
ErroMedioQuadradoMSE <- sum((yhat - data$y)^2)/nrow(data)
ErroMedioQuadradoMSE
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
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
Carregando as series
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
Date
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
156
Parte 4 Series temporais e redes neurais
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
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
set.seed(0)
library(neuralnet)
nn <- neuralnet(y~x1+x2,petr4_fr,hidden=c(0),linear.output=TRUE)
plot(nn)
Calcular o erro
158
Erro mdio quadrado
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
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
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
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")
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
Calcular o erro
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
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
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
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.
######################################################################
###############
166
#A fim de comparao vamos montar tambm um modelo linear
######################################################################
###############
#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
######################################################################
###############
#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")
######################################################################
###############
#Vamos comparar com o erro do modelo linear
print(paste(MSE.lm,MSE.nn))
######################################################################
###############
#vamos plotar os 2 modelos
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')
######################################################################
###############
#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
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
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
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.
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.
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:
176
LaTeX --> PDF
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.
\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
## [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:
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:
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.
181
Simple Examples
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")
@
182
<<echo=FALSE>>=
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.
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
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")
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
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.
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).
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)
Animations in PDF
<<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
<<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:
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)
<<legend,eval=FALSE>>=
theme(legend.text=element_text(size=12,angle=45))+theme(legend.p
osition="bottom")
@
<<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')
@
<<>>=
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}
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(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
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)
196
A couple of tricks for LaTeX
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.
198
References
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.
. 2015. Dynamic Documents with R and Knitr. Vol. 29. CRC Press.
199
Reviso Tcnica:
Nmero de revises: 9
200