Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Uso de linguagens de programação R
Dr. Héliton R. Tavares
Assistentes: Paulo Germano Sousa, Robinson Ortega Meza
Programação RO ambiente RO Editor RStudioDownload R e RStudioRodando scriptsFormas de atribuições de valores
Vetores e matrizes
Principais funções Estatísticas
Gráficos bidimensionais e Tridimensionais
Distribuições de probabilidade e funções associadasGeração de números aleatórios no R
Estatísticas descritivas
Integração numérica simples
Leitura e gravação de dados
Programação R: Orientações gerais
1. R é uma plataforma livre para computação estatística queinclui um excelente ambiente gráfico. O R começou a serdesenvolvido por Robert Gentleman e Ross Ihaka doDepartamento de Estatística da Universidade de Auckland naNova Zelândia, mais conhecidos por ”R & R", apelido do qualse originou o nome R do programa.
2. Com o incentivo de um dos primeiros usuários deste programa,Martin Mächler do ETH Zürich (Instituto Federal deTecnologia Zurique da Suíça), ”R & R"lançaram o códigofonte do R em 1995, disponível por ftp (uma forma de setransferir dados pela internet), sobre os termos de FreeSoftware Foundations GNU general license, que seria um tipode ”licença para softwares livres".
Programação R: Observações gerais
3. Desde então o R vem ganhando cada vez mais adeptos emtodo o mundo, em parte devido ao fato de ser totalmentegratuito e também por ser um programa que exige do usuárioo conhecimento das análises que está fazendo, diminuindoassim as chances de uma interpretação errada dos resultados.
4. Outro fator importante para a difusão do R é a suacompatibilidade com quase todos os sistemas operacionais.
5. Assim como o LaTex, o R tem um Compilador que pode serusado com um Editor pra simplificar o layout.
Apresentaremos a seguir um breve resumo de suas funções, deixando osdetalhes para os muitos manuais disponíveis na Internet; na páginahttp://www.helitontavares.com/R/ há vários deles. Iniciamos comalgumas observações gerais antes de apresentar as funções mais usuais.Naquela página também serão disponibilizados os executáveis parainstalação.
Editor R Próprio
Figura: Editor R próprio
Editor RStudio
Figura: Editor de VBA
Observações
Algumas sugestões ou cuidados na elaboração de uma sintaxe são:Caso sensitivo Todas as funções em R são caso-sensitivas, ou seja,
variáveis com letras maiúsculas são diferentes devariáveis com letras minúsculas. Por exemplo, x=2 eX=3 serão duas variáveis distintas com valoresdiferentes.
Help Para obter ajuda sobre um comando plot, usehelp(plot) ou ?plot. O mesmo vale para qualqueroutro comando.
Script O conjunto de comandos será chamado de script. àsvezes encontrase com outras denominações (macro,sintaxe, programa etc). Podemos usar a combinaçãode teclas CONTROL+R para rodar as linhasselecionadas de script.
Observações
Algumas sugestões ou cuidados na elaboração de uma sintaxe são:RStudio O RStudio é uma interface que organiza de forma
bem eficiente várias janelas no R. Recomenda-sefortemente a sua instalação, após a instalação do R.A partir disso, basta abrir o RStudio que ele já ativaráo R.
package De forma geral, os comandos do R estão dentro depacotes (packages), de forma que antes de executarcomandos específicos é necessário carregar um oumais pacotes.
Observações
(a) É sempre aconselhável escrever os scripts e salvá-los em umarquivo, que terão a extensão .R+. Também é imporanteque os scritps contenham explicações sobre o quefaz cada operação; usa-se o caracter ] parainiciar um comentário. Na páginawww.helitontavares.com/R com o arquivo script1.Rque contém todos os comandos aqui apresentados.
(b) Para rodar um scritp podemos ir até a janela descripts, marcar as linhas a serem executadas eclicar no ícone de Run, ao topo desta janela.Também podemos teclar CONTROL+ENTER (OU CONTROLR). Alternativamente, podemos copiar ou digitardiretamente no console e teclar enter. Veremos queo R enumera as linhas com [1], [2] ...
Obtendo ajuda sobre algum comando
Na janela de ajuda, clique o nome do comando comando desejado.Alternativamente, podemos escrever no script o comandohelp(plot) ou ?plot e executá-lo.
Instalando pacotes (packages)O R já carrega um conjunto de funções básicas. Para outrasfunções, temos que chamar os pacotes em que elas foramconstruídas. Podemos fazer isso utilizando o menu direito inferior,ou através de comandos. Se ele já está instalado, basta carregá-locom o comando library. Em caso contrário, temos que instalar opacote com o comendo install.packages e depois carregar. Asintaxe abaixo já faz as duas coisas:
if (!require(rio))install .packages(”rio”); library(rio)
Sobre o RStudio
I Podemos mudar o TEMA em Tools > Global Options >Appearance
I Temos 4 partes:1. Scrips, onde há o Run2. Console, onde ontemos as saídas.3. Environment, History, Connections4. Files, Plots, Packages, Help, Viewer
Instalando pacotes (packages)
Figura: Instalando pacotes (packages)
Os primeiros passos no R
Fomas de atribuições de valores
i) a<-2
ii) 2->a
iii) a=2
iv) a<<-2 # variável GLOBALv) a=1; b=2; c=3
vi) (a=2) # Atribui e mostra no console
Construindo sequências
i) A=1:10 # produz 1,2,3,...,9,10ii) C = seq(from=1, to=10) # mesmo que 1:10iii) C = seq(from=1, to=10, by=0.5)
iv) D = seq(length=51, from=-5, by=.2)
v) C = seq(from=1, to=4, length=6)
vi) C = seq(2,50,2) # produz 2,4,6,8, ... ,50vii) E = rep(2, times=5)
viii) rep(5, times=3) # produz 5 5 5ix) rep(1:5, 3) # produz [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
ObservaçãoApenas fazendo uma atribuição o valor não será impresso noconsole
Vetores e matrizes
A função c() é usada para juntar (concatenar) diferentes elementos para formar umarranjo maior. Vejamos alguns exemplos:
i) A=c(1,2,3) produz 1,2,3
ii) B = c(3.4, pi, exp(-1))
iii) C = c(A, B, 10)
iv) D = 1:12; dim(D)=c(3,4)
v)E = matrix(1:12, byrow = TRUE, ncol = 2)
vi) F = rbind(A,B) # junta linhas (rows)
vii) G = cbind(A,B) # junta colunas(columns)
Operações Básicas com escalares
i) 1/x # Inversa do escalar x
ii) sqrt(x) # Raiz Quadrada #
iii) abs(-1) # Módulo ou valor absoluto
iv) log(10 ) # Logaritmo natural ou neperiano
v) log(10, base = 10) # Logaritmo base 10
vi) log(10, base = 3.4076) # Logaritmo base 3.4076
vii) exp(1) # Exponencial
viii) sin(0.5*pi) # Seno
ix) cos(2*pi) # Coseno
x) tan(pi) # Tangente
xi) asin(1) # Arco seno (em radianos)
xii) asin(1) / pi * 180
xiii) round(4.3478 , digits=3)
xiv) ceiling(4.3478 )
xv) factorial(4) # Fatorial de 4
xvi) choose(10, 3) # Combinação de 10, 3 a 3
xvii) x %% y # Funçã MOD (resto da divisão)
ListasListas são objetos genéricos em que cada elemento da lista pode ser um string,escalar, vetor, matriz etc. Nos referimos aos seus elementos por [[1]], [[2]]...
1 x = list(1:5, "Z", TRUE, c("a", "b"), matrix(1:12,4,3)2 > x3 [[1]]4 [1] 1 2 3 4 55
6 [[2]]7 [1] "Z"8
9 [[3]]10 [1] TRUE11
12 [[4]]13 [1] "a" "b"14
15 [[5]]16 [,1] [,2] [,3]17 [1,] 1 5 918 [2,] 2 6 1019 [3,] 3 7 1120 [4,] 4 8 12
ListasUm exemplo de cadastro:
1 pedido = list(pedido_id = 8001406,2 pedido_registro = as.Date("2017-05-25"),3 nome = "Athos",4 sobrenome = "Petri Damiani",5 cpf = "12345678900",6 email = "[email protected]",7 qualidades = c("incrível", "impressionante"),8 itens = list(9 list(descricao = "Ferrari",
10 frete = 0,11 valor = 500000),12 list(descricao = "Dolly",13 frete = 1.5,14 valor = 3.90)15 ),16 endereco = list(entrega = list(logradouro = "Rua da Glória",17 numero = "123",18 complemento = "apto 71"),19 cobranca = list(logradouro = "Rua Jose de Oliveira Coutinho",20 numero = "151",21 complemento = "5o andar")22 )23 )
Listas
Os elementos de uma lista (e outros tipos) podem ser acessados usando o $:
1 > pedido$cpf # elemento chamado 'cpf'2 > pedido[1] # nova lista com apenas o primeiro elemento3 > pedido[[2]] # segundo elemento4 > pedido["nome"] # nova lista com apenas o elemento chamado 'nome'5 > pedido$qualidades6 [1] "incrível" "impressionante"7 > pedido$qualidades[1]8 [1] "incrível"
Data.frames
Um data.frame é o mesmo que uma tabela do SQL ou um spreadsheet do Excel, porisso são objetos muito importantes. Usualmente, os dados são importados para umobjeto data.frame, e serão o principal objeto de trabalho.Os data.frame’s são listas especiais em que todos os elementos possuem o mesmocomprimento. Cada elemento dessa lista pode ser pensado como uma coluna databela. Seu comprimento representa o número de linhas.Já que são listas, essas colunas podem ser de classes diferentes. Essa é a grandediferença entre data.frame’s e matrizes. Algumas funções úteis:
1 head() - Mostra as primeiras 6 linhas.2 tail() - Mostra as últimas 6 linhas.3 dim() - Número de linhas e de colunas.4 names() - Os nomes das colunas (variáveis).5 str() - Estrutura do data.frame. Mostra, entre outras coisas, as classes de cada coluna.6 cbind() - Acopla duas tabelas lado a lado.7 rbind() - Empilha duas tabelas.
Tipos e Classes
Normalmente não precisamos declarar o tipo/classe dos objetos: character, numeric,integer, complex, logical (esses são denominados de elementos básicos ou atômicos).O próprio R identifica, quando possível. Podemos usar a função class() para checarseu tipo:
1 x = 12 class(x)3 ## [1] "numeric"4
5 y = "a"6 class(y)7 ## [1] "character"8
9 z = TRUE10 class(z)11 ## [1] "logical"
Tipos e Classes
Os elementos de um vetor ou matriz são sempre da mesma classe. Ou todos sãonuméricos, ou são todos character, ou todos são lógicos etc. Não dá para ter umnúmero e um character no mesmo vetor, por exemplo. O R vai forçar que todos oselementos passem a pertencer à mesma classe. O número 3.14 viraria "3.14"se fossecolocado ao lado de um "a".
1 y <- c(3.14, "a") ## character2 y <- c(TRUE, 2) ## numeric3 y <- c(TRUE, "a") ## character
DOMINANTE character > complex > numeric > integer > logical RECESSIVO
Observação (Forçando classes explicitamente)Podemos coagir um objeto a ser de uma classe específica om as funçõesas.character(), as.numeric(), as.integer() e as.logical().
Principais funções Estatísticasi) min(x) # Mínimo do vetor x
ii) max(x) # Máximo do vetor x
iii) sum(x) # Soma dos elementos de x
iv) length(x) # Num. elementos de x
v) mean(x) # Média amostral
vi) var(x) # Variância amostral
vii) sd(x) # Desvio padrão amostral
viii) median(x) # Mediana amostral
ix)quantile(x,p) # Quantis p=(p1,p2...) dos elementos de x. Ex. p=c(.25,.5,.75)
x) cor(x,y) # Correlação amostral entre X e Y
xi) range(x) # Equivalente a c(min(x),max(x))
xii) table() # Frequências
xiii) summary(x) # Resumo de estatísticas descritivas
xiv) cumsum(x) # Acumulada prod(x)
xv) cumprod(x) # Acumula os produtos
xvi) diff(x) # x(i)-x(i-1)
xvii) which.min(x) # Posição do mínimo
xviii) which.max(x) # Posição do máximo
Uma primeira aplicação: imc
O índice de massa corpórea (imc), muito utilizado em diversas áreas médicas, bemcomo em Educação Física, é obtido pela fórmula: imc = peso/altura2 [peso em Kg ealtura em metros(m)]. Nesta aplicação foram obtidos os pesos e alturas de seispessoas e desejamos calcular seus imc’s.
1 peso = c(60, 72, 57, 90, 95, 72)2 altura = c(1.75, 1.80, 1.65, 1.90, 1.74, 1.91)3 imc = peso/(altura^2)4 imc
Falta de observação (NA): Missing Data
Quando temos falta de observação, podemos usar o símbolo NA(Not Available / Não Disponível). Frequentemente nos referimos aessa situação como missing data (dados faltantes) ou missingvalues (valores faltantes, observação ausente). No R, missing valuessão representados pelo símbolo NA. Valores impossíveis (ex.,divisão por zero) são representados pelo símbolo NaN (Not aNumber). A opção na.rm=TRUE retira os NA dos cálculos:
1 x = c(1,2,NA,3)2 mean(x) # retorna NA3 mean(x, na.rm=TRUE) # retorna 2
Outros elementos especiais: NaN, Inf, NULL
No geral, existem valores reservados para representar dados faltantes, infinitos, eindefinições matemáticas.
I NaN (Not a Number) representa indefinições matemáticas, como 0/0 e log(-1).Um NaN é um NA, mas a recíproca não é verdadeira.
I Inf (Infinito) é um número muito grande ou o limite matemático, por exemplo,1/0 e 10^310. Aceita sinal negativo -Inf.
I NULL representa a ausência de informação. Conceitualmente, a diferença entreNA e NULL é sutil, mas, no R, o NA está mais alinhado com os conceitos deestatística (ou como gostaríamos que os dados faltantes se comportassem emanálise de dados) e o NULL está em sintonia com comportamentos de lógica deprogramação.
Use as funções is.na(), is.nan(), is.infinite() e is.null() para testar se um objeto é umdesses valores.
1 x = c(NaN, Inf, 1, 2, 3, NA)2 is.na(x)3 ## [1] TRUE FALSE FALSE FALSE FALSE TRUE4 is.nan(x)5 ## [1] TRUE FALSE FALSE FALSE FALSE FALSE
Gráficos bidimensionaisA principal função para plotar uma função f (x) é a plot, que tem várias opções.Basicamente, devemos criar um vetor x com os pontos em que serão calculados osvalores da função y = f (x). A cada comando plot será gerado um novo gráfico, etodos poderão ser acessados através das setas (esquerda e direita) da janela plots.Abaixo segue um conjunto de exemplos e opções desta função. O help com as opçõespode ser obtido com help(plot).
i) Ex: x=seq(1,4,.1); y=x^2-5*x+6; plot(x,y)
ii) plot(x,y,type='b')
iii) plot(x,log(x),type='b')
iv) plot(x, y, type = "l")
v) plot(x, y, type = "p")
vi) plot(x, y, type = "o")
vii) plot(x, y, type = "b")
viii) plot(x, y, type = "h")
ix) plot(x, y, type = "S")
x) plot(x, y, type = "s")
xi) plot(x, y, type = "n")
xii) points(rev(x),y)#adiciona pontos ao gráfico ativo
xiii) lines(x,100-y) #adiciona linhas ao gráfico ativo
Alterando alguns padrões dos gráficos
i) points(x,8000-y,pch="*") #símbolo asterisco
ii) points(rev(x),y,pch=3) #adiciona cruzes
iii) plot(x,y,pch="@")
iv) plot(x,y,pch=1:3)
v) plot(0:20,0:20,pch=0:20)
vi) curve(100*(x^3-x^2)+15, from=0, to=1)
Gráficos bidimensionais com subgráficosCom o R podemos combinar multiplos gráficos em um únicográfico, usando as funções par( ) ou layout( ).
i) par(mfrow = c(1,1)) #padrão
ii) par(mfrow = c(3,2)) #gráficos múltiplos com 3 linhas e 2 colunas
iii) par(mfrow = c(4, 2), mar = c(2, 2, 0.3, 0.3), mgp = c(1.5, 0.6,0))
Exemplos do par
1 # 3 figures arranged in 3 rows and 1 column2 attach(mtcars)3 par(mfrow=c(3,1))4 hist(wt)5 hist(mpg)6 hist(disp)
Exemplos do par
1 # One figure in row 1 and two figures in row 22 attach(mtcars)3 layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))4 hist(wt)5 hist(mpg)6 hist(disp)
Exemplos do par1 # One figure in row 1 and two figures in row 22 # row 1 is 1/3 the height of row 23 # column 2 is 1/4 the width of the column 14 attach(mtcars)5 layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE),6 widths=c(3,1), heights=c(1,2))7 hist(wt)8 hist(mpg)9 hist(disp)
Exemplos do par1 # Add boxplots to a scatterplot2 par(fig=c(0,0.8,0,0.8), new=TRUE)3 plot(mtcars$wt, mtcars$mpg, xlab="Car Weight",4 ylab="Miles Per Gallon")5 par(fig=c(0,0.8,0.55,1), new=TRUE)6 boxplot(mtcars$wt, horizontal=TRUE, axes=FALSE)7 par(fig=c(0.65,1,0,0.8),new=TRUE)8 boxplot(mtcars$mpg, axes=FALSE)9 mtext("Enhanced Scatterplot", side=3, outer=TRUE, line=-3)
Gráficos tridimensionais: pacote rgl
if(!require(rgl)) install.packages("rgl"); library(rgl)
i) x = sort(rnorm(1000))
ii) y = rnorm(1000)
iii)z = rnorm(1000) + atan2(x,y)
iv)plot3d(x, y, z, col=rainbow(1000))
Gráficos tridimensionais: pacote plot3D
if(!require(plot3D)) install.packages("plot3D"); library(plot3D)
Para cada linha abaixo, tecle ENTER várias vezes:
1 example(persp3D)2 example(surf3D)3 example(slice3D)4 example(scatter3D)5 example(segments3D)6 example(image2D)7 example(image3D)8 example(contour3D)9 example(colkey)
10 example(jetcol)11 example(perspbox)12 example(mesh)13 example(trans3D)14 example(plotplist)15 example(ImageOcean)16 example(Oxsat)
pacote ggplot2
Um dos pacotes mais flexíveis para a construção de gráficos é oggplot2. Ele tem uma vaariedade muito grande possibilidades, e aresolução dele também é melhor.if(!require(ggplot2)) install.packages("ggplot2"); library(ggplot2)
I Exemplo 1: https://www.r-graph-gallery.com/barplot.htmlI Exemplo 2: https://www.curso-r.com/material/ggplot/I Exemplo 3:
https://tutorials.iq.harvard.edu/R/Rgraphics/Rgraphics.html
Operações matriciais
i) A = 1:9
ii) A = matrix(A, nrow = 3, ncol = 3, byrow = TRUE)
iii) A[3,3]=10 # Muda o elemento (3,3) da matriz A
iv) A[,1]
v) B[1,3]; B[c(1,2),3];B[c(1,3),c(2,4)] #selecionando partes da matriz
vi) B = t(A)
vii) rowSums(A[,2:3])
viii) diag(c(1, 2, 3))
ix) A * B # Produto ponto a ponto
x) A %*% B # Produto matricial
xi) A.inv = solve(A)) # Inversa de A
xii) A %*% A.inv #
xiii) det(A) determinante da matriz A
xiv) pmin, pmax
Distribuições de probabilidade
Distribuições de probabilidade e funções associadasHá muitas distribuições de probabilidade na área de Estatística. Na prática, váriosfatores determinam qual distribuição é apropriada para descrever um fenômeno(experimento), e os dados observados deste fenômeno. Para cada distribuiçãopodemos estar interessados em quatro tipos de operações, representadas por d, p, q, r,descritas abaixo.
d : função (densidade) de probabilidade avaliada em um ponto;p : probabilidade associada a algum evento,q : valores para construir Intervalos de Confiança (IC),r : observações pseudo-aleatórias.
Estas letras precedem as funções das distribuições. Os principais casos são:i) Bernoulli e Binomial: dbinom(), pbinom(), qbinom(), rbinom()ii) Poisson: dpois(), ppois(), qpois(), rpois()iii) Normal: dnorm(), pnorm(), qnorm(), rnorm()iv) t-Student: dt(), pt(), qt(), rt()v) Qui-quadrado: dchisq(), pchisq(), qchisq(), rchisq()vi) Uniforme: *unif()vii) Gama: *gamma()viii) Cauchy: *cauchy()ix) F: *f()x) Exponencial: *exp()xi) Beta: *beta()xii) Geométrica: *geom()xiii) Hipergeométrica: *hyper()
Cálculos com a distribuição Normal(0,1)ExemploObter o valor f (x) da densidade da N(0, 1) avaliada no ponto x = 1.
1 dnorm(x=1,mean=0,sd=1)
Resultado, f (1) = 0.2419707
ExemploPlotar o gráfico da fdp N(0, 1).
1 x = seq(-3,3,0.01)2 plot(x,dnorm(x,0,1),type="l",xlab="x",ylab="f(x)")
ExemploCalcular a probabilidadeP(−∞ < Z < 0), onde Z ∼ N(0, 1).Resultado: 0.5.
1 pnorm(0)
Cálculos com a distribuição Normal(0,1)ExemploCalcular a probabilidade P(0 < Z < 1), ondeZ ∼ N(0, 1). Resultado: 0.3413447.
1 pnorm(1)-pnorm(0)
ExemploCalcular a probabilidade P(Z > 1), onde Z ∼ N(0, 1).Resultado: 0.1586553.
1 pnorm(-1)
ExemploObter P(Z < −1). Resultado: 0.1586553 (duas opções)
1 (i) pnorm(q=-1,mean=0,sd=1,lower.tail=T)23 (ii) 1-pnorm(q=1,mean=0,sd=1,lower.tail=F)
ExemploOber o valor de z tal que P(Z < z) = 0.95. Resultado:1.644854.
12 qnorm(p=0.95,mean=0,sd=1)
Geração de valores de variáveis aleatórias no R
Uma das necessidades mais importantes é a geração de valores de cada distribuição,simulando o que ocorre na prática. A letra r que determina essas funções, provém dapalavra random, que significa aleatório. A cada vez que executamos um comando, sãogerados diferentes valores aleatórios, mas se quisermos repetição dos valores podemosresetar a semente (ou raiz) com o comando set.seed(1). A seguir apresentamosfunções definidas no R para geração de valores de variáveis aleatórias para váriasdistribuições.
ExemploGerar 20 observações de uma Bernoulli(p=0.3).
ObservaçãoO R base não tem a distribuição Bernoulli(p), pois ela é um caso particular dadistribuição Binomial(n, p). Temos que Bernoulli(p)=Binomial(1,p). No entanto, opacote purrr tem a função rbernoulli.
1 x = rbinom(20,1,0.3)
Bornoulli e Binomial
ExemploGerar n=1000 observações de uma Bernoulli(p = 0.3) e presentar a média.rnorm(n=20,mean=10,sd=3)
1 mean(rbinom(1000,1,.3))
ExemploGerar n=1000 observações de uma Binomial(n = 10, p = 0.3) e presentar a média, avariância, o desvio-padrão e o histograma.[Obs. E(X ) = np e Var(X ) = np(1− p)]
1 x=rbinom(1000,10,.3)2 mean(x)3 var(x)4 sd(x)5 hist(x)
Multinomial
ExemploGerar 10 observações de uma Multinomial(3,c(.1, .2, .7)) e obter a frequência de cadacategoria.
ObservaçãoO R base gera uma um vetor indicando qual categoria foi selecionado. Por exemplo,(1,0,0) indica a categoria 1, enquanto (0,0,1) indica a categoria 3.
1 x=rmultinom(10, 1, c(.1, .2, .7))2 rowMeans(x)
ObservaçãoPodemos usar outro artifício, através do comando sample, que pode ser feito com ousem reposição.
1 n=10002 x=sample(1:3, size=n, replace=T, prob=c(.2,.3,.5))3 table(x)/n
Estatísticas descritivas: summary e hist
ExemploGerar estatísticas descritivas de um conunto de dados podemos usar a função summary.
1 nrv = rnorm(mean=0,sd=1,n=10000)2 summary(nrv)
ExemploGerar 1000 valores de uma N(0, 1) e apresentar um sumário e um histograma.
1 nrv = rnorm(mean=0,sd=1,n=10000)2 summary(nrv)3 hist(nrv)
ExemploGerar 1000 valores de uma N(0, 1) e apresentar dois histogramas.
1 x = rnorm(1000) #Geração das observações2 par(mfrow=c(2,1)) #Serão dois gráficos3 hist(x,main=1) #histograma padrão4 hist(x,breaks=seq(-5,5,.1),main=2) #histograma com opções
Flexibilidades na construção do histograma
ExemploGerar 1000 valores de uma χ2(10) e apresentar um histograma.
1 x=rchisq(1000,10); #Geração das 1000 observações2 hist(x) #histograma padrãao de x3 hist(x, #histograma de x com opções:4 main="Histograma Qui-quadrado", #título5 xlab="Valores", #texto do eixo das abscissas6 ylab="Prob", #texto do eixo das ordenadas7 br=c(c(0,5),c(5,15),5*3:7), #int das classes8 xlim=c(0,30), #limites do eixo de x9 ylim=c(0,0.1), #limites do eixo y
10 col="lightblue", #cor das colunas11 border="white", #cor das bordas das colunas12 prob=T, #mostrar probabilidades.13 right=T, #int fechados à direita14 adj=0, #alinhamento dos textos15 col.axis="red") #cor do texto nos eixos
E tem muito mais flexibilidade!
Imprimindo mensagens com cat, message e print
Frequentemente temos que imprimir mensagens sobre os resultados. O comando cat éum dos mais usados, podendo quase sempre ser substituído pelo message, com osquais podemos concatenar textos e números. Em ambos os casos, podemos usar ocomando \n para pular uma linha. Para vetores e matrizes, devemos usar o print.
1 n=10002 cat("Vamos gerar uma a mostra de tamanho",n,"\n e outra de tamanho",2*n)
ExemploGerar 1000 valores de uma N(500, 1002) e apresentar a média amostral e odesvio-padrão amostral.
1 n=10002 x=rnorm(n, mean=500, sd=100)3 cat("Media amostral:",mean(x),"\nDesvio-padrão amostral:",sd(x))4 cat("Media amostral:",round(mean(x),2),"\nDesvio-padrão amostral:",round(sd(x),2))
Inserindo o conjunto de dados
ExemploEntrar com um determinado conjunto de dados e apresentar um histograma.
1 dados = c(25,27,18,16,21,22,21,20,18,23,27,21,19,20,21,16)2 hist(dados, #histograma de dados3 nc=6, #número de classes igual a 64 right=F, #int fechado à esquerda5 main="Histograma", #título do histograma6 xlab="tempo (em minutos)", #texto do eixo x7 ylab="frequencia", #texto do eixo y8 col=2) #usa a cor cinza nas barras
Construindo gráficos de barras
Para plotar um gráfico de barras de um conjunto de dados, usamos a função barplot.Veja alguns layouts em https://www.r-graph-gallery.com/barplot.html
ExemploEntrar com um determinado conjunto de dados e apresentar um gráfico de barras.
1 barplot(table(c("a","a","a","a","a","b","b","b","c","c","v","v")))
ExemploEntrar com as frequências obtidas em determinado conjunto de dados e apresentar umgráfico de barras (colunas).
1 dados = c("a"=4,"b"=7)2 barplot(dados)
ExemploEntrar com dados e apresentar um gráfico de barras horizontais.
1 dados = table(c("a","a","a","a","a","b","b","b","c","c","v","v"))2 barplot(dados, hor=T)
BoxplotGerar n = 100 valores X ∼ B(10, 52) e de χ(10) e plotar um boxplot.
1 x = rnorm(100,10,4)2 y = rchisq(100,10)3 boxplot(x,y)
Pizzas / Setores
Site: https://www.r-graph-gallery.com/pie-plot.htmlEntrar com dados e apresentar um gráfico de pizza.
1 x=c(1,1,2,2,2,2,3,3,3)2 pie(x)3 pie(x, labels = paste(round(x/sum(x), dig=2), "%"), col = c(2,4))
Radarhttps://www.r-graph-gallery.com/spider-or-radar-chart.html
Integração numérica simples
Há vários métodos para obtenção de aproximações para integrais. Para fins deilustração, segue uma ideia bem simples de como proceder.
ExemploObter valor aproximado para a integral da função f (t) = cos(t) no intervalo [0, π/6].
1 dt = 0.0052 t = seq(0, pi/6, by = dt)3 ft = cos(t)4 plot(t,ft)5 (I = sum(ft) * dt)
ExemploObter valor aproximado para P(0 < Z < 1), onde Z ∼ N(0, 1).
1 dt = 0.0012 t = seq(0, 1, by = dt)3 ft = dnorm(t)4 (I = sum(ft) * dt)
Elementos de Programação noR
Condicional: IF
Funciona de forma muito similar a outras linguagens, podendo ter ou não o else. Aigualdade deve sempre ser testadada com o duplo sinal: ==.
1 if (logical_expression) { expression_1 ... }
1 if (logical_expression) { expression_1 ... } else { expression_2 ...}
1 x=102 if (x%%2==0) cat(x," é par!") else cat (x, " é ímpar!")
ObservaçãoOs comandos podem ocupar várias linhas, mas o else deve ficar no final do últimocomando do condicional verdadeiro. Veja o errro:
1 x=112 if (x%%2==0) cat(x," é par!")3 else cat (x, " é ímpar!")
Operadores
1 x < y x menor que y?2 x <= y x menor ou igual a y?3 x > y x maior que y?4 x >= y x maior ou igual a y?5 x == y x igual a y?6 x != y x diferente de y?7 !x Negativa de x8 x | y x ou y são verdadeiros?9 x & y x e y são verdadeiros?
10 xor(x,y) x ou y são verdadeiros (apenas um deles)?
LoopsObservaçãoComo qualquer elemento pode ser um vetor ou uma matriz, o uso de loops pode serevitado em muitas situações. No entanto, sempre haverá necessidade em casosespecíficos.
1 for (i in 1:n) {}
1 while (logical_expression) { expression_1 ... }
ExemploGerar R=1000 réplicas (repetições) de tamanho n = 5 de uma N(0, 1) e presentar amédia e o desvio-padrão.
1 R=10002 n=303 est=matrix(0,R,2)4 for (r in 1:R){5 x=rnorm(n)6 est[r,1]=mean(x)7 est[r,2]=var(x)8 }9 cat("Media: ", mean(est[,1]),"\nVariancia: ",mean(est[,2]))
10 hist(est[,1]); hist(est[,2])
O problema dos aniversários
ExercícioElabore uma sintaxe para responder à seguinte pergunta: se selecionarmos r = 23pessoas ao acaso, qual a probabilidade de pelo menos duas fazerem aniversário nomesmo dia do ano? Considere que há 365 dias. Use n = 10000. Complemente asintaxe de forma a termos o resultado para valores de r = 10, 11, · · · , 60. Insira osresultados em células do Excel. Plot um gráfico da probabilidade (y) como função der(x).
1 n=100002 r=233 K=3654 x=sample(1:K, size=r, replace=T)5 sum(duplicated(x))6
7 CS=08 for (i in 1:n){9 x=sample(1:K, size=r, replace=T)
10 if (sum(duplicated(x))>0) CS=CS+111 }12 cat("Probabilidade de Coincidencia: ", CS/n)
O bandido e as 3 portas
ExemploUm bandido é preso em uma cela que contém 3 portas. A primeira porta o leva a umtúnel que o conduz à própria cela depois de 2 dias de viagem. A segunda porta leva-oa um túnel que o conduz à própria cela depois de 4 dias de viagem. A terceira porta oconduz à liberdade depois de um dia de viagem. Se assumimos que o bandidoseleciona as portas 1, 2 e 3 com probabilidades 0.5, 0.3 e 0.2 respectivamente, qual onúmero esperado de dias para que alcance a liberdade?
1 n = 100000; K=3; p1 = 0.5; p2 = 0.3; dias = 02 for (i in 1:n){3 saida=04 while(saida==0){5 x=sample(1:K, size=1, replace=T, prob=c(p1,p2,1-p1-p2))6 if (x==1) dias=dias+27 if (x==2) dias=dias+48 if (x==3) {dias=dias+1; saida=1}9 }
10 }11 cat("Probabilidade de Coincidencia: ", dias/n)
ExercícioQual a distribuição aproximada de T , o número dias até a liberdade?
Podemos simplificar sintaxes?
O problema do prisioneiro, agora só com 1 loop.
1 n = 10000; K=3; p1 = 0.5; p2 = 0.3; dias = 02 saida=03 while (saida <= n){4 x=sample(1:K, size=1, replace=T, prob=c(p1,p2,1-p1-p2))5 if (x==1) dias=dias+26 if (x==2) dias=dias+47 if (x==3) {dias=dias+1; saida=saida+1}8 }9 cat("Probabilidade de Coincidencia: ", dias/n)
Funções
O uso de funções é necessário em códigos grandes. Vamos rever a função do problemados aniversários.
1 Niver=function(r){2 CS=03 for (i in 1:n){4 x=sample(1:K, size=r, replace=T)5 if (sum(duplicated(x))>0) CS=CS+16 }7 return(CS/n)8 }9
10 n=10000; R=60; K=36511 RESULT=matrix(0,R,2)12 for (r in 1:R){13 RESULT[r,1]=r14 RESULT[r,2]=Niver(r)15 }16 plot(RESULT)
Leitura e gravação de dados
Leitura de dados
No R, podemos ler dados usando o menu ou através de comandos, descritos abaixo:
Comandos O R base tem diversos comandos, um para cada tipo de arquivo, taiscomo read.csv, read.csv2, read.table, read.fwf, readRDS etc.Felizmente quase todos foram reunidos em um único pacote, o rio,que checa qual o formato dos dados e faz a leitura. Alternativas:
I dados = import(file.choose()), é a forma mais simples de usodo rio, no qual uma janela do explorer se abrirá paraencontrarmos o arquivo.
I dados = import("C: ... dados.xlsx")|
Menu Devemos ir em Environment > Import Dataset, e R usará comandosinternamente, dependendo do tipo de arquivo.
No Excel é trivial abrir arquivos usando diretamente o menu, mas alguns cuidados sãonecessários. Arquivos de texto costumam ter as observações separadas por algumcaractere único, tipo barra ("), vírgula (",") ou ponto e vírgula (";"), e um cuidadoespecial é com o separador decimal dos números (ponto ou vírgula). Se no Excel oseparador decimal for a vírgula, o separador de variáveis será o ponto e vírgula,obrigatoriamente.
Leitura de dados: CSV, TAB e Formato fixo
Os arquivos de extensão CSV (Comma Separated Values / Valores Separados porVírgulas) é um tipo de arquivo texto muito comum, em que o separador decimal é oponto. Para atender a outros formatos, foi criado o CSV2, em que os valores sãoseparados por ponto e vírgula, mas ambos são salvos com a extensão ".CSV".
1 dados = read.csv(file="Dados.csv", header=TRUE, sep=",")
Outro formato já não tão comum usa o TAB como separação:
1 dados = read.table("Dados.txt", sep="\t", header=TRUE)
E quando as colunas são fixadas:
1 dados = read.fwf("Dados.dat", widths=c(3,4,rep(1,14)), header=FALSE, dec=',')
Arquivos do Excel, pode ser simplificado com o pacote readxl
1 dados = read_excel("Dados.xlsx", sheet = 1, col_names = FALSE, col_types = NULL, na = "", skip = 0)
Gravação de dados
No R, podemos ter como objetivo salvar alguns arquivos em especial, ou salvar umaimagem (extensão RDS) com todos os arquivos no workspace:
Imagem save.image(”Imagem.RData”)
Arquivos Devemos saber em que formato queremos salvar. O Excel lêdiretamente os arquivos CSV, então recomenda-se salvar diretamenteneste formato, caso o objetivo seja ler posteriormente no Excel.
I write.table(Dados, "Dados.dat", sep="\t")I write.table(Dados, "Dados.dat", sep=" ")I write.table(Dados, "Dados.dat", sep=",")I write.table(Dados, "Dados.dat", sep=";")
Obrigado, e sejam felizes escrevendo seus próximos TEXtos &Códigos!