Você está na página 1de 12

Lista de Exerccios Sobre R e Estatstica Computacional

1 de Novembro de 2007

Programa
1. Anlise de Dados: Clculo de Momentos e Quantis, Estimao de Modelos de Regresso, Confeco de Histogramas e Grcos. 2. Viso Geral sobre Diferentes Pacotes Estatsticos. 3. Introduo a Linguagens de Programao Interpretadas e Compiladas. 4. Simulao de Monte Carlo. 5. Aplicaes de Estudo de Simulao de Monte Carlo Estatstica.

Introduo

O sistema R corresponde a um dialeto da liguagem S, que foi desenvolvida pela AT & T Bell Laboratories por Rick Becker. O R pode ser obtido no site http://cran.rproject.org/. Alm de introduzir o R, estas notas iro revisar alguns algoritmos bsicos da disciplina de programao 1 e introduzir alguns algoritmos de simulao e de modelagem estatstica. R uma linguagem funcional que usa os mesmos smbolos do C, C++ e JAVA. As entidades em R, inclusive funes e estruturas de dados, podem ser operadas como dados.

2.1

Alguns Comandos bsicos

A maior parte dos problemas propostos podem ser solucionados com a leitura do manual "An Introduction to R, que esta disponvel no prprio programa. Por exemplo a leitura de um vetor direto do teclado pode ser feita por x <- c( 5, 6, 3.1, 6, 7). Problema 1. Como seria possvel ler a matriz identidade de dimenso 2? Sugesto: Use o comando array Matrizes de dados, que so o incio das anlises estatsticas, pode ser lidas diretamente do teclado. Para isto o comando data.frame( ) pode ser usado. Problema 2. Usando o comando data.frame(), entre com a matriz de dados peso=(60,70,80) e altura=(160,150,170). O R apresenta para vetores uma aritmtica semelhante aquela utilizada para os escalares. Dessa forma, o comando v < 2 x + y + 1 esta correto, onde * signica o produto de um vetor por um escalar. muito fcil gerar sequncias em R. O comando 1 : 30 produz uma sequncia com 30 valores. Problema 3. Como gerar um vetor que tem 10 valores, com os valores em sequncia de 1 a 10. Vetores lgicos esto disponveis no R e assumem os valores TRUE, FALSE, and NA. Os operadores lgicos so <, <=, >, >=, ==. Estes operadores sero estudados com mais detalhes quando as estruturas de deciso forem estudadas. Em alguns conjuntos de dados o valor de uma varivel pode ser omisso. Neste caso, o R usar o smbolo NA. Por exemplo, o comando z <- c(1:5,NA) indica que a ltima observao esta omissa. Uma outra possibilidade acontece quando um clculo numrico no possvel. Neste caso, o R usa NaN para estes casos. 2

Estrutura de Deciso

Neste tpico sero desenvolvidos alguns pequenos programas em R. Estes programas representaro uma reviso da disciplina sobre programao e serviro de base para os programas de simulao e de modelagem estatstica que sero desenvolvidos. O principal comando desta seo if (cond)expr, cond representa uma condio lgica e expr representa um ou mais comandos que sero executados. O simples exemplo x<-10 if(x<11) print("sai") ilusta o uso do comando if. Um exemplo do comando if, else corresponde a x<-10 if(x<9) print("sai") else print("sai2") Problema 4. Fazer uma algoritmo em R que l dois valores e imprime o maior. Problema 5. Fazer um algoritmo que l trs valores e imprime o valor do maior.

Matrizes, Vetores e Laos

Em R, as denies mais usadas de matrizes e vetores so array() e matrix(). Por exemplo, dim(z ) < c(4, 5, 10) tambem uma forma de denir um vetor de dimenses 3, 5 e 10. Outro exemplo o comando vetor < array (1 : 25, dim = c(5, 5)) dene um matriz quadrada de dimenso 5, onde os elementos esto em sequncia. O comando dados < array (c(1, 2, 3, 4), dim = c(4, 1)) 3

permite a leitura do vetor de dados (1,2,3,4). Uma matriz quadrada, com todos elementos iguais a 1, de dimenso 10 obtida pelo comando A < matrix(1, 10, 10) Problema 6. Dada uma lista com a nota de cinco alunos, por exemplo, {3,7,9,6,7} encontre a mdia, o desvio padro e ordene as notas. Sugesto: usar as funes mean, sd, sort no vetor denido. possvel localizar uma linha ou uma coluna de uma matriz ou vetor de dimenso superior por usar os ndices de forma apropriada. Por exemplo o elemento A[j,] corresponde a j-sima linha da matriz A. Se as matrizes A, B e C so compatveis, ento D <- 2*A*B + C + 1 adequada a sintaxe do R. O produto de 2 matrizes A e B denido por A%*%B. Um vetor a deve ser denido como uma matriz de uma coluna para posteriormente ser multiplicado pela matriz de interesse, por exemplo, a%*%B. O transposto de uma matriz ou vetor pode ser obtido com a simples funo t(). Por exemplo, B <- t(A). A inversa de uma matriz A dada pelo comando solve(A) A funo eigen(A) calcula os autovalores e autovetores da matriz A. Com o comando ev < eigen(A) os autovalores e autovetores da matriz A so atribuduos a varivel ev, que passa a conter todas estes resultado. Para obter os autovalores basta colocar evvaleev vec para obter os autovetores. Similarmente ao mean, o R dispe de comandos para calcula as somas, mximos e mnimos. Execute o seguinte programa: A<-matrix(1:100,10,10) sum(A[,2]) min(A[,1]) max(A[,1]). 4

Problema 7. Dada uma lista com a nota de 10 alunos de duas turma, por exemplo, {3,7,9,6,7,6,8,9,4,9} e {3,6,9,6,7,7,8,8,4,8}. Encontrar um algoritmo que calcule quantos alunos possuem a mesma nota. A ltima questo pode precisar de uma estrutura de lao. o R dispe de dois comandos O comando while um lao condicional, isto , um comando repetido enquanto um certa condio satisfeita. Por exemplo, considere o algoritmo: A<-matrix(1:100,10,10) i<-1 j<-1 while(A[i,j]<50) { print(A[i,j]) i<-i+1 j<-j+1 } O comando for um lao cujo o nmero de repeties xado, o que denominado de lao contado. Isto contrasta com o while porque naquele caso o nmero de repeties no xado. O exemplo abaixo ilustra o uso do for para a calcular potncias de 2. c<-2 for (i in 1: 3) c<-c*2 Problema 8. Fazer um algoritmo para calcular e imprimir as 10 primeiras potncias de 3 Problema 9. Usar o comando for para calcular a soma de 10 termos de

exp =
i=0

x2 x3 xi =1+x+ + + ... i! 2 3!

Problema 10. Escreva um lao que calcula o fatorial de um inteiro n. Sugesto: usar o while. Problema 11. Um nmero , por denio, primo se ele no tem divisores, exceto 1 e ele prprio. Prepara um algoritmo para ler um nmero e vericar se este primo ou no.

Funes Escritas pelo Usurio

O R permite que o usurio escreva funes de seu interesse. A denio geral de uma funo dada por nome < funo(arg1 , arg2 , ...)expresso Por exemplo, a funo abaixo calcula o fatorial do nmero n. fat<-function(n){ fat<-1 while(n!=1){ fat<-fat*n n<-n-1 } fat } Exemplo: Escreva uma funo para calcular f (x) = x2 3x + 2. Atribua uma sequencia de 20 valores e faa o grco desta funo. f<-function(x) { x*x-3x+2 } dados<-matrix(0,20,2) dados[,1]<- -10:9 for(i in 1:20) { dados[i,2]<-f(dados[i,1]) } plot(dados) Problema 12. Faa o grco do exemplo anterior com a funo f (x) = x3 + x2 + x + 3. Problema 13. Escreva funes para calcular a mdia e o desvio padro de um vetor de valores. Compare os resultados de suas funes com aqueles resultados obtidos pelo R. Problema 14. Escreva uma funo que calcula o produtrio. Problema 15. Escreva uma funo que calcula o valor de

=
i=1

6 i2

Distribuies de Probabilidades: Clculos e Propriedades

Nesta seo iremos utilizar vrias funes para gerar nmeros aleatrios que esto implementadas no R. Porm, a compreenso destas funes ser abordada nas prximas sees. Por exemplo, a funo rnorm utilizada para gerar observaes de uma varivel com distribuio normal. Para ilustrar vrios comandos, vamos vericar se o gerador de variveis normais do R adequado. Os comandos abaixo so utilizados com k igual a 10, 100, 1000 e 10000. x<-rnorm(k,0,1) hist(x) Problema 16. Repita os histogramas supracitados com 10, 100, 1000 e 10000 observaes de uma exponencial com mdia 1. Sugesto: use o comando rexp(n, rate = 1). Problema 17. Com as 4 amostras da distribuio normal e as 4 amostras da distribuio exponencial, faa grcos com o comando qqnorm, que fornece um grco do quantis da varivel e os quantis da normal. Que concluso voc pode obter destes grcos? Problema 18. Coloque os ttulos dos grcos e os nomes das variveis em portugus nos 8 grcos que voc fez nas duas questes anteriores.

Gerao de Nmeros Aletrios

Antes dos computadores, nmeros aleatrios eram gerados por retirar uma bola de uma urna, jogar um dado e outros mtodos manuais. possvel fazer um programa que gere nmeros pseudo-aleatrios. Estes nmeros no so considerados aleatrios porque so gerados por uma regra determinstica. Porm, possvel vericar com testes estatsticos que estes nmeros tem um comportamento aleatrio. Um dos mtodos mais comuns de gerar nmeros aletrios iniciar com uma semente, por exemplo x0 = 2, e sucessimente ir calculando a sequncia de nmeros aletrios com

xn = axn1 %% m onde a e m so constantes positivas e o smbolo %% denota o resto da diviso inteira. Problema 19. Escreva um programa em R para implementar o gerador xn = 3xn1 mod 150. Obtenham os 10 primeiros nmeros desta sequncia.

Mtodo de Monte Carlo

Resumidamente, o mtodo de Monte Carlo reproduz com a gerao de nmeros aleatrios a realizao de um experimento. Este procedimento repetido um nmero xo de vezes para calcular a proporo de experimento bem sucedidos. O mtodo de Monte Carlo pode ser usado para calcular a integral
1

=
0

g (x)dx.

O procedimento simples. Gera-se k variveis aleatrias uniformes (0,1) independentes U1 , . . . , Uk . Calcula-se as variveis aleatrias g (U1 ), . . . , g (Uk ). A mdia de g (U1 ), . . . , g (Uk ) converge para , isto , para o valor da integral de interesse.
k

i=1

g (Ui ) E [(g (u)] = quando k k

Por exemplo, o programa para calcular


1

=
0

x2 dx.

dado por U<-runif(1000) GU<-U*U theta<-mean(GU) print(theta) 8

Problema 20. Calcular, com o mtodo de Monte Carlo, a integral


1

exp{ex }dx.
0

Para calcular a integral


b

=
a

g (x)dx,

necessrio utilizar a transformao y = (x a)/(b a), o que resulta em dy = dx/(b a) e


1

=
0

g (a + [b a]y )(b a)dy.

Problema 21. Calcule com o mtodo de Monte Carlo a integral


2 2

ex+x adx. Para calcular a integral imprpria

=
o

g (x)dx

usa-se a tranformao y = 1/(x + 1), o que implica em dy = dx/(x + 1)2 = y dx.


2

Problema 22. Calcule com o mtodo de Monte Carlo a integral


e 2 dx.

x2

Clculos de Probabilidade e Estatstica com o Mtodo de Monte Carlo

Vrios problemas de probabilidade e estatstica podem ser solucionados com simulao. Nesta seo sero apresentados alguns exemplos e problemas. Suponha que um dado lanado e deseja-se se estimar a probablidade do face observada ser 3. Apresentar um programa que calcule esta probabilidade 9

cont<-1 for(i in 1: 100) face<-sample(6,1) if (3==face) cont<-cont+1 print(cont/100) Neste exemplo, o lao de Monte Carlo utilizado para representar o lanamento de um dado. Assim, foram feitos 100 lanamentos devemos esperar o valor aproximado de 1/6. O comando sample foi fundamental para o programa acima. Porm, possvel solucionar este problema de outra maneira. cont<-1 for(i in 1: 100) face<-round(6*runif(1)) if (3==face) cont<-cont+1 print(cont/100) Problema 23. Compare as duas solues apresentadas nos exemplos anteriores. Qual a mais apropriada? Explique porqu. Algoritmos de simulao podem ser usados para solucionar problemas de probabilidade. Considere o problema: uma moeda honesta jogada 3 vezes. Considere X o nmero de caras obtidas. Calcule a probabilidade de X igual a 2. cont<-1 for(i in 1: 10000) face1<-sample(c(0,1), 1, replace = TRUE) face2<-sample(c(0,1), 1, replace = TRUE) face3<-sample(c(0,1), 1, replace = TRUE) face<-face1+face2+face3 if (3==face) cont<-cont+1 print(cont/10000) A resposta deve car prxima de 1/8. Problema 24. Escreva um programa que apresenta um cdigo mais simples para o exemplo anterior. possivel simular uma varivel com uma distribuio arbitrria. Se a distribuio dada por x<-array(10,4,20,15,6,7,12,14),dim=c(8,1)) hist(x) Basta gerar uma varivel aleatria uniforme e de acordo com o valor desta varivel associar a um valor discreto de x. 10

Problema 25. Um lote formado por 20 peas defeituosas e 80 no-defeituosas. Se duas peas so escolhidas ao acaso sem reposio, qual a probabilidade de que ambas as peas sejam defeituosas? Problema 26. Sabe-se que uma certa moeda apresenta cara trs vezes mais frequente que coroa. Essa moeda jogada trs vezes. Seja X o nmero de caras que aparece. Estabelea a funo de probabilidade e a funo de distribuio de X. Faa o grco de ambas. Problema 27. Suponha que 5% de todas as peas de uma linha de fabricao sejam defeituosas. Se 10 destas peas forem escolhidas e inspecionadas, qual ser a probabilidade de que no mximo duas defetuosas sejam encontradas.

10

Mtodo da Inversa

possvel utilizar a funo de distribuio de uma varivel aleatria contnua para gerar valores desta varivel aleatria. Basta utilizar o fato de que uma varivel aleatria contnua X com distribuio F pode ser gerada a partir da frmula X = F 1 (U ), onde U uma varivel uniforme. Problema 28. Encontre a distribuio da exponencial com mdia igual a 1. Escreva um algoritmo de simulaao para gerar valores desta varivel. Problema 29. Escreva um algoritmo de simulao para gerar valores da varivel aleatria X que tem distribuio F (x) = 1 exp(x ), 0 < x < . A distribuio de X denominada de Weibull.

11

Reviso

Problema 30. Escreva funes no R para calcular as seguintes sries:

11

exp =
i=0

x2 x3 xi =1+x+ + + ... i! 2 3! x3 x5 x2i+1 =x + ... (2i + 1)! 3! 5!

sin(x) =
i=0

(1)i

Problema 31. Dado dois vetores quaisquer, ordenar estes vetores e obter um novo vetor sempre com o componente maior destes dois vetores. Problema 32. Faa um algoritmo para multiplicar matrizes que seja compatveis. Problema 33. Suponha que o campeonato brasileiro tenha 5 times. Faa um programa que ler o resultado de cada partida e atualiza a sada, que dada pelas variveis Time, Jogo, Vitorias, Empates, pontos. Problema 34. Gere uma matriz com 4 colunas e 20 linhas. Suponha que a mdias das colunas so 20,30,40 e 50, respectivamente. Faa diagramas de disperso entre as variveis? O que voce observa? Use os comandos library(MASS) e mvrnorm(use help para ver detalhes deste comando) para gerar esta mesma matriz. Admita que existe uma matriz de covarincia em mvrnorm. Quais as diferenas? Problema 35. Use y<-rnorm(100) para gerar uma amostra aleatria da normal de tamanho 100. Calcule a mdia e o desvio padro de y. Faa um loop e calcule as estatsticas supracitadas de y 100 vezes. Armazene os resultados da mdia em um vetor av. Calcule o desvio padro de av e faa seu histograma. Comente o resultado. Problema 36. Transforme o algoritmo anterior em uma funo. Problema 37.

12