programação em r (parte 1) - instituto de economia · como um rápido exemplo, vamos considerar...

60

Upload: ngotruc

Post on 20-Jan-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Programação em R (parte 1)

Henrique Neder1

1Instituto de EconomiaUniversidade Federal de Uberlândia

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Sumário

1 Introdução

2 Uma primeira seção R

3 Introdução a funções

4 Programando grá�cos

5 Simulação no R

6 Integração de Monte Carlo

7 Mais sobre grá�cos

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Introdução

Nesta apresentação faremos uma composição de diversos textos,iniciando por:

Braun, W. J. and Murdoch, D. J. 2007. A First Course in StatisticalProgramming with R.

Matlo�, Norman S. 2011. The art of R programming : tour ofstatistical software design.

R opera de duas formas: interativa e batch. No modo interativo vocêdigita comandos, o R apresenta resultados, você digita mais comandos eassim por diante. No modo batch não se requer interação com o usuário.Neste modo, é muito útil produzir-se jobs, que tal como um programapode ser executado periodicamente, automatizando o processo.

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Introdução

Como um rápido exemplo, vamos considerar uma distribuição normalpadrão. Depois gere uma nova variável aleatória Y = |X |:mean(abs(rnorm(100)))Este código gera 100 valores para a varoável aleatória, calcula seusvalores absolutos e acha a média desses valores.rnorm(20)Este código gera 20 valores de uma variável normal padrão.Você pode armazenar comandos R em um arquivo. Por convenção,arquivos de códigos R tem a extensão .RSe voc�e cria um arquivo de comandos denominado x.R pode executar oconteudo daquele arquivo através do comando:source(�x.R�)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Modo batch

Muitas vezes você quer automatizar as seções R. Por exemplo, vocêdeseja executar um script R que gera um grá�co:setwd ("/home/hdneder/Dropbox/DISCIPLINA OPTATIVAPOSGRADUACAO/temporario/")pdf("xh.pdf") # set graphical output �lehist(rnorm(100)) # generate 100 N(0,1) variates and plot their histogramdev.o�() # close the graphical output �lePodemos salvar estes comandos em um script R, abrir, por exemplo umatela de terminal do Linux e digitar:cd �/home/hdneder/Dropbox/DISCIPLINA OPTATIVAPOSGRADUACAO/temporario/"$ R CMD BATCH z.RE executamos assim em batch a partir da tela de terminal Linux.

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Uma primeira seção R

Vamos criar um conjunto simples de dados (um vetor):x <- c(1,2,4)c representa uma concatenação, de forma que:q <- c(x,x,8)o que iguala q a (1,2,4,1,2,4,8)Para mostrar o valor de q no terminal, basta digitar o nome do vetor.Para designarmos, por exemplo, o terceiro elemento de um vetor q:q[3]q[2:5]Podemos também calcular a média e o desvio-padrão do vetor q:mean(q)sd(q)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Uma primeira seção R

Se quisermos salvar o resultado da média em uma outra variável (ao invés demostrar apenas no R):y <- mean(q)z <- sd(q)R tem muitos conjunto de dados internos. A relação e descrição destes dadospode ser vista através de:data()mean(Nile)sd(Nile)hist(Nile)Para listar todos os objetos da área de trabalho (�workspace�):objects()ouls()

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

O que é um objeto?

O que é um "objeto?"Pense em um objeto como uma caixa cheia de itens que estão relacionados um com ooutro. Esses itens podem ser números simples, ou nomes, ou os resultados de umaanálise estatística, ou alguma combinação destes ou outros itens. Objetos ajudam amanter as coisas organizadas, colocando coisas relacionadas umas às outras na mesmacaixa e as coisas não relacionadas numa caixa diferente; Eles também informam o Rque tipos de coisas estão neles para que o R possa tomar as medidas apropriadas emitens em um determinado objeto. Um vetor é um tipo de objeto que contém ummonte de coisas. todas do mesmo tipo, talvez todos valores numéricos ou todosvalores alfanuméricos. Um objeto pode ainda conter outros. A�nal, você pode colocaruma caixa dentro de uma maior. Então você poderia colocar um vetor, ou váriosvetores, em um quadro de dados (�data frame�), que é um outro tipo de objeto. Vocépode ver que objetos estão em seu espaço de trabalho atual digitando o comando ls ().

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Outros comandos úteis do R

O comando attach serve para fazer referência a um determinadoobjeto:data(airquality)attach(airquality)table(Ozone)detach(airquality)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Introdução a funções

Como em muitas linguagens de programação, o coração da programaçãoem R consiste em escrever funções.

Uma função é grupo de instruções contendo uma instrução de leitura(introdução de dados), aplicação de cálculos sobre estes valores e retorna�nalmente um resultado.

Como exemplo, vamos de�nir uma função com nome (de nossa escolhaarbitrária) oddcount() que terá o objetivo de contar os números ímparesem um vetor de inteiros.

Normalmente, compomos uma função usando um editor de textos edepois a salvamos em um arquivo, mas neste exemplo rápido vamosentrar linha por linha no modo interativo do R.

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Introdução a funções

# conta o número de inteiros ímpares em xoddcount <- function(x) {k <- 0 # assign 0 to kfor (n in x) {if (n %% 2 == 1) k <- k + 1 # %% é o operador módulo}return(k)}oddcount(c(1,3,5))[1] 3oddcount(c(1,2,3,7,9))[1] 4

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Vetores

x <- c(88,5,12,13)x <- c(x[1:3],168,x[4]) # insert 168 before the 13xlength(x)Podemos utilizar a função implícita do R, length(), em uma outra funçãoimplicita, para determinar o índice do primeiro 1 do argumento:�rst1 <- function(x) {for (i in 1:length(x)){ if (x[i] == 1) break # break out of loop} return(i)}�rst1(c(5,5,3,1,4))

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Alguns exercícios no R

1. Calcule o resto após a divisão 170166719 por 31079.170166719 %% 31079170166719/31079170166719 - 31079*(5475)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Alguns exercícios no R

2. Calcule o pagamento mensal requerido para um empréstimo de$200000 a uma taxa de juros mensal de 0,003, baseado em 300pagamentos mensais.P = R(1+ i)−1+R(1+ i)−2+ · · ·R(1+ i)−n = R ∑

nj=1(1+ i)−j =

R1−(1+i)−n

i

taxa <- 0.003n <- 300principal <- 200000pagamento <- principal * taxa / (1 - (1 + taxa)�(-n))pagamento

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Alguns exercícios no R

3. Calcule a soma ∑nj=1 r

j , onde r é igual a 1.08, e compare com(1− rn+1)/(1− r), para n = 10, 20, 30, 40. Repita para r = 1.06.r <- 1.08for (n in c(10,20,30,40)) {x <- (1:n)y <- r^xprint(sum(y))print((1-r^(n+1))/(1-r))}

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Alguns exercícios no R

4. Referindo-se a questão anterior use a fórmula mais simples paracalcular ∑

nj=1

r j , para r = 1.08, para todos os valores de n entre 1 e 100.Armazene os 100 valores em um vetor.r <- 1.08x <- c(1:100)for (i in c(1:100)) {x[i] <- (1-r^(i+1))/(1-r)}xOu então poderia ser simplesmente:x <- c(1:100)y <- (1-r^(x+1))/(1-r)y

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Alguns exercícios no R

5. Calcule a soma ∑nj=1 j e compare com n(n+1)/2, para n = 100,

200, 400, 800.for (i in c(100,200,400,800)) {x <- c(1:i)print(sum(x))print(i*(i+1)/2)}

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Alguns exercícios no R

6. Calcule a soma ∑Ni=1 1/i e compare com log(N)+ 0.6 , para N =

500, 1000, 2000, 4000, 8000.for (i in c(500,1000,2000,4000,8000)) {x <- c(1:i)y <- 1/xprint(sum(x))print(log(i)+ 0.6)}

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Data Frames

Os dados seguintes consistem de 4 observações em três variáveis x, y e z:

x y z

61 13 4

175 21 18

111 24 14

124 23 18

Se estes dados forem armazenados em um arquivo chamado pet.dat no diretório/home/hdneder/Dropbox podemos criar um �data frame� da seguinte forma:pet.df <- read.table("/home/hdneder/Dropbox/temp/pet.dat", header=T)Para ler apenas a coluna x:pet.df$xOVamos remover todos os objetos da área de trabalho:rm(list = ls())

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Data Frames

Vamos inicialmente ler um arquivo de texto em um daa frame:cd �/home/hdneder/Dropbox/DISCIPLINA OPTATIVAPOSGRADUACAO/temporario/"rain.df <- read.table("rnf6080.dat", header=F)Para fazermos referência a um determinado elemento ou a uma linha deste data frame:rain.df[6,3]rain.df[2,]Para darmos labels aos objetos deste data frame:names(rain.df) <- c("year", "month", "day", seq(0, 23))Para criarmos um objeto igual a soma de outros objetos (neste caso a soma das horas):rain.df$daily <- rowSums(rain.df[, c(4:27)])

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Programando grá�cos estatísticos

VADeathsbarplot(VADeaths, beside=TRUE, legend=TRUE, ylim=c(0, 90),+ ylab="Deaths per 1000",+ main="Death rates in Virginia")

O argumento beside=TRUE faz com que os valores em cada colunasejam plotados lado a lado.

legend=TRUE faz com que a legenda no topo direito seja adicionada.

O argumento y lim=c(0, 90) modi�ca a escala vertical do grá�co.

Finalmente o argumento main de�ne o título principal para o grá�co.

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Programando grá�cos estatísticos

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Programando grá�cos estatísticos

Outro tipo de grá�co (dotchart):> dotchart(VADeaths, xlim=c(0, 75),+ xlab="Deaths per 1000",+ main="Death rates in Virginia")

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Programando grá�cos estatísticos

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Programando grá�cos estatísticos

Diagramas de dispersão (Scatterplots)x <- rnorm(100) # assigns 100 random normal observations to xy <- rpois(100, 30) # assigns 100 random Poisson observations toymean(y) # mean value is 30 the resulting value should be near 30plot(x, y, main = "Poisson versus Normal")

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Programando grá�cos estatísticos

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Programando grá�cos estatísticos

Considere o data frame pressure. há duas colunas: temperature epressure . (a) Construa um scatterplot com pressure no eixo verticaletemperatura no eixo horizontal. As variáveis são linearmente ou nãolinearmente relacionadas?b) O grá�co da seguinte funçao se ajusta através dos pontos plotadosrazoavelmente bem: y = (0.168 + 0.007x) 20/3 . As diferenças osvalores de pressão preditos pela curva os valores de pressão observadossão chamados de resíduos. Uma maneira de calcular os resíduos é:residuals = pressure-(0.168+0.007*temperature)^(20/3)Construa um normal QQ-plot para estes resíduos e decida se eles sãonormalmente distribuídos ou se eles seguem uma distribuição assimétrica.

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Programando grá�cos estatísticos

pressureattach(pressure)plot(pressure,temperature,ylab="pressure",xlab="temperature")residuals = pressure-(0.168+0.007*temperature)^(20/3)qqnorm(residuals)(c) Agora, aplique a transformação de potência y3/20aos valores dedados de pressão. Plote estes valores transformados contra atemperatura. Temos agora uma relação linear? (d) Calcule osresíduos por diferença entre os valores de pressão transformados eaqueles preditos, obtendo um novo Q-Q plot para veri�car anormalidade dos resíduos.

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Programando grá�cos estatísticos

rm(list = ls())pressureattach(pressure)pressure = pressure^(3/20)plot(temperature,pressure,ylab="pressure",xlab="temperature")lm(pressure~temperature)qqnorm(residuals)detach(pressure)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Funções grá�cas de baixo nivel

points(x, y, ...)

lines(x, y, ...) adiciona segmentos de lina

text(x, y, labels, ...) adiciona texto no grá�co

abline(a, b, ...) adiciona a linha y = a + bx

abline(h=y, ...) adiciona uma linha horizontal

abline(v=x, ...) adiciona uma linha vertical

polygon(x, y, ...) adiciona um polígono fechado e possivelmentepreenchido

segments(x0, y0, x1, y1, ...) desenha segmentos de linha

arrows(x0, y0, x1, y1, ...) desenha setas

symbols(x, y, ...) desenha círculos, quadrados, termômetros, etc.

legend(x, y, legend, ...) desenha uma legenda.

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Funções grá�cas de baixo nivel

sex <- c("M","F","M","F","F","M","F","M")length <- c(7.9, 6.5, 8.4, 5.5, 6.5, 8.0, 7.0, 7.5)width <- c(2.3, 1.7, 2.6, 1.7, 1.9, 2.1, 1.8, 1.9)index�nger <- data.frame(sex,length,width)plot(width~length, data=index�nger)with(index�nger[c(3, 7),], points(length, width, pch=16))plot(width~length, pch=as.character(sex), data=index�nger)abline(lm(width~length, data=index�nger, subset=sex=="M"), lty=1)abline(lm(width~length, data=index�nger, subset=sex=="F"), lty=2)legend("topleft", legend=c("Male", "Female"), lty=1:2)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

Geração de números pseudo-aleatórios:runif(n, min = a, max = b)runif(5) # gera 5 números aleatórios de uma distribuição uniformecom parâmetros a = 0 e b =1runif(10, min = -3, max = -1)set.seed(32789) # isto assegura que a sua saída será igual a minharunif(5)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

ExercíciosGere 1000 valores de uma distribuição uniforme (pseudo aleatoriamente)usando a função runif(), designando os valores a um vertor chamado U.Use set.seed(19908) . a) Calcule a média, a variância e o desvio padrãodos números em U. b) Compare seus resultados com os valoresverdadeiros (�teóricos�) da média, variância e desvio-padrão. c) Calcule aproporção de valores de U que são menores que 0.6 e comparecom aprobabilidade de que uma variável aleatória uniforme U seja menor doque 0.6. d) Estime o valor esperado de 1/(U+1) e) Construa ohistograma dos valores de U e de 1/(U+1).set.seed(19908); U <- runif(1000)mean(U); sd(U); var(U)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

A média de uma distribuição uniforme com parâmetros a = 0 e b =1 é E[X] = 0.5A variância é igual a:VAR(X ) =

∫ 10 X 2dx−0.52 = x3/3|10−0.25= 1/3− .25= 0.08333

X = U[U<0.6]length(X)/1000O valor esperado de1/(U+1) =

∫ 10

1U+1dU = ln(U+1)|10 = ln(2)− ln(1) = 0.6931472

X <- 1/(U+1); mean(X)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

Simule 10 000 observações independentes de uma variável aleatóriadistribuida uniformemente em um intervalo [3.7,5.8].(a) Estime a média, a variância e o desvio-padrão desta variável ecomapre suas estimativas com os valroes verdadeiros (�teóricos�).(b) EStime a probabilidade de que esta variável aleatória seja maiordo que 4.0. Compare com o valor verdadeiro (�teórico�).X <- runif(10000,3.7,5.8)mean(X)sd(X)sd(X)^2E (X ) = 3.7+5.8

2= 4.75

VAR(X )=∫5.83.7

1

(5.8−3.7)X2dx−4.752= 1

5.8−3.7×5.83−3.73

3−4.752= 0.3675

Y=X[X>4];length(Y)/10000P(X > 4) =

∫5.84

1

5.8−3.7dx = 5.8−45.8−3.7 = 0.8571429

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

Simule 10000 valores de uma variável aleatória uniforme(0,1), U1, usandorunif() e simule outro conjunto de valores de uma variável aleatóriauniforme U2. Coloque os valores destas variáveis aleatórias em doisvetores U1 e U2. Desde que os valores de U1 e U2 são aproximadamenteindependentes podemos ver U1 e U2 como variáveis aleatórias uniformes(0,1) independentes.(a) Estime E(U1+U2). Compare com o valor verdadeiro (�teórico�) ecompare com a estimativa de E(U1) + E(U2).(b) Estime Var(U 1 + U 2 ) e Var(U 1 ) + Var(U 2 ). São valoresiguais? Os valores verdadeiros seriam iguais?(c) Estime P(U1 + U2 ≤ 1.5).(d) Estime P(

√(U1)+

√U2)≤ 1.5

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

set.seed(19908)U1 <- runif(10000)U2 <- runif(10000)SOMA <- U1+U2mean(SOMA)mean(U1)+mean(U2)(sd(SOMA))^2(sd(U1))^2+(sd(U2))^2

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

Os valores verdadeiros seriam iguais? Sendo as variáveis aleatóriasteoricamente independentes os valores deveriam ser exatamenteiguais, pois a variância da soma é igual a soma das variâncias, semo termo de covariância.X=SOMA[SOMA<=1.5];length(X)/10000RSOMA=sqrt(U1)+sqrt(U2)X=RSOMA[RSOMA<=1.5];length(X)/10000

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

A função sample() permite que você selecione uma amostraaleatória simples de um vetor de valores. Por exemplo,sample(c(3,5,7),size = 2, replace = FALSE) irá gerar um vetor dedois valores tomados (sem reposição) de um conjunto {3, 5, 7}.Use a função sample() para gerar 50 inteiros pseudo aleatórios de 1a 100, (a) amostra sem reposição (b) amostra com reposição.sample(1:100, size = 50, replace = FALSE)sample(1:100, size = 50, replace = TRUE)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

O seguinte código simula a soma (X) e e diferença (Y) de duasvariáveis aleatórias uniformes (U 1 and U 2 ). Um diagrama dedispersão (�scatterplot�) de Y versus X é então mostrado e acorrelação entre X e Y é estimada.U2 <- runif(1000)U1 <- runif(1000)X <- U1 + U2Y <- U1 - U2plot(Y~X)cor(X,Y) # isto calcula a correlação amostral

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

A correlação fornece uma medida de dependência linear entre duas variáveisaleatórias. Um valor próximo a 0 indica que quase não existe tal dependência,enquanto que um valor próximo a -1 ou 1 indica a existência de relação linear.Execute o código acima e use o resultado como resposta as seguintes questões.(a) Você acha que X e Y são linearmente dependentes?Não são linearmente dependentes.(b) Voc�e acha que X e Y são stocasticamente independent?es (Para respondera isso, examine cuidadosamente o diagrama de dispersão.)cov(U1+U2,U1−U2) = E((U1+U2)(U1−U2))−E(U1+U2)E(U1−U2) =E(U12−U22)− (E(U1)+E(U2))(E(U1)−E(U2))= E(U12)−E(U22)− (E(U1)2−E(U2)2) = Var(U1)−Var(U2)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

Como U1 e U2 são estocásticamente independentes (por serem simuladas apartir de um processo gerador distinto, mesmo tendo os mesmos parâmetros),as somas e diferenças também serão estocásticamente independentes.(c) Você pensa que U1 e U2 são linearmente dependentes? (Realize um cálculoadequado para veri�car)X <- lm(U1~U2)summary(X)U1 e U2 não são linearmente dependentes pois o valor de R2é muito reduzido.(d) Você pensa que U1 e U2 são estocasticamente independentes? (Obtenhaum plot adequado para veri�car).cor(U1,U2)plot(U1~U2)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Simulação no R

Simule X de uma distribuição normal padrão, condicionada aoevento 0 < x < 3. Vamos simular a partir de uma distribuiçãonormal inteira e depois aceitar somente aqueles valores situadosentre 0 e 3:x <- rnorm(100000) # simulate from the standard normalx <- x[(0 < x) & (x < 3)] # reject all x's outside (0,3)hist(x, probability=TRUE) # show the simulated values

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Integração de Monte Carlo

Suponha que g(x) é qualquer função que é integrável no intervalo [a,b].A integral ∫ b

ag(x)dx

equivale a áreaa da região com a< x < b e y entre 0 e g(x) (onde valoresnegativos contam como áreas negativas).A integração de Monte Carlo usa simulação para obter aproximações paraestas integrais. Baseia-se na lei dos grandes números. Esta lei diz queuma média amostral de uma amostra aleatória grande tenderá a serpróxima do valor esperado da distribuição que está sendo amostrada.

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Integração de Monte Carlo

Se podemos expressar uma integral como um valor esperado, podemosaproximar esta integral pela média amostral. Por exemplo, sejaU1,U2, ....Un variáveis aleatórias uniformes independentes no intervalo[a,b]. Estas tem densidade f (u)=1/(b-a) no intervalo. Então:

E [g(Ui )] =∫ b

ag(u)

1

b−adu

de forma que a integral original∫ ba g(x)dx pode ser aproximada por

(b−a) vezes a média amostral de g(Ui ) .

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Integração de Monte Carlo

Vamos ver um exemplo: calcular∫ 10 x4dx

> u <- runif(100000)> mean(u^4)Podemos comparar o resultado com o valor exato desta integral(0.20) que podemos calcular facilmente neste caso.

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Integração de Monte Carlo

integral∫ 52 sen(x)dx

> u <- runif(100000, min = 2, max = 5)> mean(sin(u))*(5-2)Compare com o resultado exato que é -cos(5)-(-cos(2)) =-0.699809

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Integração de Monte Carlo

Existem integrais de difícil solução analítica, como por exemplo:∫ 1−1 arctan(exp(

1sin(x)))dx

> u <- runif(100000, min = -1, max = 1)> mean(atan(exp(asin(u)^(-1))))*(1+1)# O PROXIMO COMANDO (QUE É UMA FUNÇÃO IMPLICITA# DO R) CALCULA O VALOR EXATO DA INTEGRAL.> integrate(function(x) atan(exp(asin(x)^(-1))),-1,1)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Integração de Monte Carlo

Ou∫ 103

∫ 71 sen(x− y)dxdy

> U <- runif(100000, min = 1, max = 7)> V <- runif(100000, min = 3, max = 10)> mean(sin(U - V))*42O fator of 42 = (7 = 1)(10 = 3) compensa para a densidadeconjunta de U e V sendo f (u,v) = 1/42.> integrate(function(x) x^2,0,1)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Mais sobre grá�cos

?mtcars;head(mtcars); attach(mtcars)O primeiro comando anterior descreve o banco de dados mtcars; osegundo comando apresenta os primeiros dados do data frame; oterceiro comando facilita a designação a qualquer objeto do dataframe (por exemplo, ao invés de mean(mtcars$mpg) podemosexecutar simplesmente mean(mpg).boxplot(mpg~cyl, ylab= "miles per gallon", main = "E�ectof Cylinder count", xlab="cylinder count", cex.main=1.2,col.main= "sienna2", names=c("4", "6", "8"),col=c("grey", "skyblue", "forestgreen"))

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Mais sobre grá�cos

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Mais sobre grá�cos

Podemos incorporar as médias ao grá�co:means=by(mpg, cyl, mean); points(means, col="red", pch=20)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Mais sobre grá�cos

boxplot(mpg~cyl, xlab= "miles per gallon", horizontal=T, main ="E�ect of Cylinder count", ylab="cylinder count", cex.main=1.2,col.main= "sienna2", names=c("4", "6", "8"), col=c("grey","skyblue", "forestgreen"))

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Mais sobre grá�cos

Histogramasset.seed(145); a=rnorm(1000,7,5); b=rnorm(1000,7,6);ab=data.frame(a,b)Histograma simples:hist(a)Se quisermos apenas os dados numéricos do histograma sem fazero grá�co:hist(a, plot=F)Se quisermos um histograma sem eixos e anotações (mas comlabels):hist(a, axes=F, ann=F, labels=T, ylim=c(0,220))

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Mais sobre grá�cos

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Mais sobre grá�cos

Diagramas de barrasUma forma simples de ter uma rápida idéia das frequ�encias deobservação para uma variável é:plot(table(cyl))plot(table(carb))Um diagrama de barras simples:head(VADeaths); barplot(VADeaths)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Mais sobre grá�cos

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Mais sobre grá�cos

Para rearranjar as barras lado a lado:barplot(VADeaths,space=c(1,1), width=c(4,4), beside=T)Para colocar uma legenda:> legend("topright",title="Age classes",+ legend=c("70-74","65-69","60-64","55-59","50-54"),+ bty="n", cex=0.65)Para colocar o grá�co em posição horizontal e remover a caixa aoseu redor:barplot(VADeaths, horiz=T, border=NA)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Mais sobre grá�cos

Grá�cos de barras agrupados> mycount = table(am, cyl)> mycount> barplot(mycount, beside=T, xlab="number of cylinders",main="Transmission and \n Cylinder counts",col=c("forestgreen", "grey7"))> legend("topleft", cex=0.85, text.col=c("forestgreen", "grey7"),legend=c("automatic", "manual"), bty="n")mtext("base",cex=0.7, side=3)

Henrique Neder Programação em R (parte 1)

IntroduçãoUma primeira seção RIntrodução a funçõesProgramando grá�cos

Simulação no RIntegração de Monte Carlo

Mais sobre grá�cos

Mais sobre grá�cos

Henrique Neder Programação em R (parte 1)