94
1 Introdução à Programação Linguagem R

Introdução à Programação Linguagem R

  • Upload
    kitra

  • View
    77

  • Download
    1

Embed Size (px)

DESCRIPTION

Introdução à Programação Linguagem R. Introdução. A aprendizagem de uma linguagem de programação desenvolve a capacidade de raciocínio e análise do aluno e é uma vantagem comparativa na luta pelos empregos melhor remunerados. - PowerPoint PPT Presentation

Citation preview

Page 1: Introdução à Programação  Linguagem R

1

Introdução à Programação Linguagem R

Page 2: Introdução à Programação  Linguagem R

2

Introdução

• A aprendizagem de uma linguagem de programação desenvolve a capacidade de raciocínio e análise do aluno e é uma vantagem comparativa na luta pelos empregos melhor remunerados.

• O R é uma linguagem simples mas que permite escrever programas para realizar tarefas computacionalmente complexas.

• É de distribuição gratuita (procurar R-project).

Page 3: Introdução à Programação  Linguagem R

3

Page 4: Introdução à Programação  Linguagem R

4

Introdução

• O que escrevermos na linha de comando, depois de fazermos “Enter” – assumiremos a partir de agora, que se faz

sempre Enter no fim de escrever os comandos

• Vai ser processado pelo R.

Page 5: Introdução à Programação  Linguagem R

5

Introdução

• Por exemplo, se escrever (2+7+5)/5 • aparece o resultado [1] 2.8• O número [1] não tem, para já,

significado.

Page 6: Introdução à Programação  Linguagem R

6

Introdução

• Se executarmos o comando q()• saímos do R. (faz uma pergunta a que

dizemos sim).

Page 7: Introdução à Programação  Linguagem R

7

Objectos

Page 8: Introdução à Programação  Linguagem R

8

Objectos

• Um objecto pode ser – uma variável, – uma constante, – um vector, – uma matriz, – uma tabela de dados, – uma função, etc.

Page 9: Introdução à Programação  Linguagem R

9

Objectos• Cada objecto tem um nome formado por

letras (as maiúsculas são diferentes das minúsculas), por números e pelo carácter ponto, “.”, não podendo ter espaços.

Page 10: Introdução à Programação  Linguagem R

10

Objectos• Constantes. Eu posso criar a constante X

executando X <- 45 (que é diferente do objecto x).• Para ver o conteúdo de um objecto,

executo o seu nome. Se executar X• aparece [1] 45

Page 11: Introdução à Programação  Linguagem R

11

Objectos• Se atribuir outra vez outro valor a X, o

valor anterior será destruído e substituído.• Também poderia fazer a atribuição

usando = em vez de <-X = 45

Page 12: Introdução à Programação  Linguagem R

12

Objectos• Expressões. Posso executar expressões

algébricas e ver o resultado ou colocar o resultado numa constante.

• Nas expressões posso ter números, operadores algébricos (+, –, /, *) e potenciação (^). Posso ainda usar outros objectos e funções.

Page 13: Introdução à Programação  Linguagem R

13

Objectos• Se executar i <- ((X*2 + 5^2)^2) / log(1.05) • e depois i• aparece [1] 271058.7

Page 14: Introdução à Programação  Linguagem R

14

Exercício• Ex.3.1. Emprestei 1000€ a uma taxa anual

de 5%/ano. Quanto dinheiro receberei ao fim de 10 anos (capitalização composta)?

Page 15: Introdução à Programação  Linguagem R

15

ExercícioTx.de.jr.an<-0.05Cap.inic<-1000Prazo<-10Cap.final<-Cap.inic*(1+Tx.de.jr.an)^PrazoCap.final[1] 1628.895

Page 16: Introdução à Programação  Linguagem R

16

Objectos• Vectores. Um vector é uma “constante” multi-

dimensional. • Para dar a indicação de que vou criar um vector,

usa o “comando” c(valor1, valor2). • Os vectores têm um “modo” (se são números

reais, complexos, valores lógicos, palavras, etc.) onde todas as dimensões do vector têm que ser do mesmo “modo”.

Page 17: Introdução à Programação  Linguagem R

17

Objectos• E.g., durante um empréstimo a 3 anos

capitalizado, a taxa de juro dos anos foi 3.7%, 4.1% e 4.9%. Posso guardar essas taxas num vector executando Juros<-c(0.037,0.041,0.049)

• Se quiser saber quantos elementos tem o vector executo length(Juros)

Page 18: Introdução à Programação  Linguagem R

18

Objectos• Resumindo sabemos como definir• Constantes

X = 45• Expressões

i <- ((X*2 + 5^2)^2) / log(1.05)• Vectores

Juros<-c(0.037,0.041,0.049)

Page 19: Introdução à Programação  Linguagem R

19

Operações com vectores

• Eu posso usar os vectores na expressões algébricas

• O R vai calcular a expressão para cada um dos elementos e retorna como resultado outro vector.

• Não se trata de cálculo vectorial normal

Page 20: Introdução à Programação  Linguagem R

20

Operações com vectores

• Por exemplo, as taxas de juro sãoJuros<-c(0.037,0.041,0.049)

• E eu emprestei 5000€, recebendo os juros no fim de cada ano. Obtenho os juros recebidos nos 3 anos executando o comando … de que resulta 5000*Juros[1] 185 205 245

Page 21: Introdução à Programação  Linguagem R

21

Operações com vectores

• Nota. Uma constante é um vector de dimensão unitária.

Page 22: Introdução à Programação  Linguagem R

22

Operações com vectores

• Se eu executar operações com dois vectores, as operações vão ser realizada entre os elementos de igual índice.

• Por exemplo, se eu executar … resultará v1 <- c(4, 6, 87)v2 <- c(34, 32.4, 12)v1 + v2[1] 38.0 38.4 99.0

Page 23: Introdução à Programação  Linguagem R

23

Operações com vectores

• Se eu aplicar funções a vectores, a função é aplicada a cada elemento do vector.

• Por exemplo, se eu executar… resultaráv1 <- c(4, 6, 87) v1^0.5[1] 2.000000 2.449490 9.327379.

Page 24: Introdução à Programação  Linguagem R

24

Exercício• Ex.3.2. Um banco personaliza as taxas de

juro dos depósitos dos seus clientes. • i) Crie, para 10 clientes, um hipotético

vector de taxas de juro, um vector de saldos e calcule os juros a pagar a cada cliente.

• ii) Capitalize esses saldos com a taxa de juro respectiva a 5 anos.

Page 25: Introdução à Programação  Linguagem R

25

ExercícioTx.juros<- c(4.5, 5.1, 4, 3.6, 3, 5, 4.6, 4.8,

3.6, 5)/100Saldos<- c(10, 150, 45, 20, 100, 75, 15, 67,

9, 2)*1000Juros <- Saldos*Tx.juros• ii) Cap.final<-

Saldos*(c(1,1,1,1,1,1,1,1,1,1) + Tx.juros)^5

Page 26: Introdução à Programação  Linguagem R

26

Exercício• Ex.3.3. Quero saber, em função do

prazo, qual é o capital final de emprestar 1000€ a uma taxa anual de 4%.

• Experimente 1, 2, 5 e 10 anos.

Page 27: Introdução à Programação  Linguagem R

27

Exercício• R. Vou usar as potencialidades do R

relativamente a “operações” com vectores.Anos <- c(1, 2, 5, 10)Tx.juro.anual<-0.04Capital.final <- 1000*(1+Tx.juro.anual)^AnosCapital.final

[1] 1040.000 1081.600 1216.653 1480.244

Page 28: Introdução à Programação  Linguagem R

2.ª Aula

28

Page 29: Introdução à Programação  Linguagem R

29

Operações com vectores

• Reciclagem. Se realizar operações com dois vectores de tamanhos diferentes, o vector mais pequeno vai ser “reciclado” até ficar com o tamanho do maior.

Page 30: Introdução à Programação  Linguagem R

30

Operações com vectores

• Por exemplo, se executar … resultaráv3 <- c(1, 2, 3, 4)v4 <- c(10, 2)v3 + v4[1] 12 4 13 6

• É como se o vector v4 fosse v4 <-(10, 2, 10, 2)

Page 31: Introdução à Programação  Linguagem R

31

Operações com vectores

• Se, numa operação com vectores, usar uma constante, esta vai ser reciclada até ficar com o tamanho do vector.

• No ex.3.2 bastaria executar• Capital.final<- Saldos*(1 + Tx.juros)^5• Nota. Se os tamanhos não forem

múltiplos um do outro, o R imprime um aviso.

Page 32: Introdução à Programação  Linguagem R

32

Operações com vectores

• Sequências. Quando os elementos do vector são uma série, podemos usar o operador “:” para criá-lo.

• Por exemplo, se executar … resultav5 <- 1:10 V5[1] 1 2 3 4 5 6 7 8 9 10

Page 33: Introdução à Programação  Linguagem R

33

Operações com vectores • Fazendo operações algébricas com este

gerador de séries, posso criar series mais complicadas.

• Por exemplo se executar … resultav5<- (1+0.05)^-(1:10) v5 [1] 0.9523810 0.9070295 0.8638376 0.8227025[4] 0.7835262 0.7462154 0.7106813 0.6768394[9] 0.6446089 0.6139133• que é o factor que desconta os valores

futuros ao presente à taxa anual de 5%

Page 34: Introdução à Programação  Linguagem R

34

Operações com vectores

• Devemos ter cuidado com a precedência do operador “:” pelo que se aconselha a usar parênteses:

• -(1:10) é diferente de -1:10• Por exemplo, um vector de dimensão

10 com 5 em todos os elementos, posso fazer v <- (1:5)*0 + 5

Page 35: Introdução à Programação  Linguagem R

35

Exercício• Ex.3.4. Como criar num vector a

sequência (10, 10.5, 11, 11.5, 12)?

v <- 10 + (0:4)/2

Page 36: Introdução à Programação  Linguagem R

36

Exercício• Ex.3.5. Num investimento, apliquei

1000€ e recebi 250€, 350€, 450€ a intervalos de um ano. Sendo que a taxa de desconto é de 4.5% ao ano, qual o VAL deste investimento?

Page 37: Introdução à Programação  Linguagem R

37

ExercícioCash.flow<-c(-1000, 250, 350, 450)Taxa.de.desconto<-0.045Desconto<-(1+Taxa.de.desconto)^-(0:3)Vai<-Cash.flow*DescontoVai[1] -1000.0000 239.2344 320.5055 394.3335Va<-sum(Vai)Va[1] -45.9266

Page 38: Introdução à Programação  Linguagem R

38

Exercício

• Ex.3.6. Apliquei 5000€ a 10 anos. Sendo que as taxas de juro foram 3.1%, 3.7%, 4.1%, 3.9%, 4.2%,4.3%, 4.5%, 3.9%, 3.5%, 3.2%, quanto dinheiro recebi no fim do prazo?

• Terei que capitalizar os 10 anos multiplicando as taxas de todos os anos.

• Para isso uso a função prod() ou log(), somo os resultados e aplico a função exp()

Page 39: Introdução à Programação  Linguagem R

39

ExercícioPossso usar a função prod() Tx.juro<-c(3.1, 3.7, 4.1, 3.9, 4.2,4.3, 4.5,

3.9, 3.5, 3.2)/100Tx.juro.total<- prod(Tx.juro+1)Capital<-5000*Tx.juro.totalCapital[1] 7287.484

Page 40: Introdução à Programação  Linguagem R

40

ExercícioTx.juro<-c(3.1, 3.7, 4.1, 3.9, 4.2,4.3, 4.5,

3.9, 3.5, 3.2)/100Tx.juro.total<- sum(log(Tx.juro+1))Capital<-5000*exp(Tx.juro.total)Capital[1] 7287.484

Page 41: Introdução à Programação  Linguagem R

41

Operações com vectores

Sequências de números aleatórios. O R (contrariamente ao Excel) tem geradores de números aleatórios de muitas funções de distribuição.

Page 42: Introdução à Programação  Linguagem R

42

Operações com vectores

Para criar um vector com 1000 números aleatórios que seguem Distribuição Normal com, por exemplo, média 10 e desvio padrão 5, executo

va<-rnorm(10000, mean=10, sd=5)Depois, posso usar este vector nas

minhas simulações

Page 43: Introdução à Programação  Linguagem R

43

Operações com vectores

Por exemplo, a taxa de juro futura assume-se ser N(0.03;0.015). Pretende-se saber qual a prestação antecipada de amortizar 250mil€ em 50 anos.

)1/())600()^1(1/(. iiiVP

Page 44: Introdução à Programação  Linguagem R

44

Operações com vectores

r<-rnorm(10000, mean=0.03, sd=0.015)rm<-(1+r)^(1/12)-1P<-25000*rm/(1-(1+rm)^(-600))/(1+rm)c(mean(P),sd(P))[1] 80.81870 21.28977summary(P) Min. 1st Qu. Median Mean 3rd Qu. Max. 18.69 65.63 79.86 80.82 94.65 164.80

Page 45: Introdução à Programação  Linguagem R

3.a Aula

45

Page 46: Introdução à Programação  Linguagem R

46

Indexação de vectoresAcesso a elementos do vector

Page 47: Introdução à Programação  Linguagem R

47

Indexação de vectores

Quando pretendo aceder um elemento do vector, uso o índice do elemento que eu quero, entre parênteses rectos. E.g., se quisesse saber a taxa de juro do 2º ano, executava … resultavaTx.juro<-c(3.1, 3.7, 4.1, 3.9, 4.2, 4.3)/100Tx.juro[2][1] 0.037

Page 48: Introdução à Programação  Linguagem R

48

Indexação de vectores

Posso alterar E.g., para alterar o 4º ano da série fazia Tx.juro[4] <- 0.043Ou criar novo elemento (o 7º ano)Tx.juro[7]<- 0.041

Page 49: Introdução à Programação  Linguagem R

49

Indexação de vectores

Também posso querer o valor que tem determinada característica e qual:

max(Tx.juro)min(Tx.juro)which.max(Tx.juro)which.min(Tx.juro)

Page 50: Introdução à Programação  Linguagem R

50

Indexação de vectores

Se quiser aceder a vários elementos, uso um vector com os seus índices.

E.g., quero o 1º e o 5º anoTx.juro[c(1,5)]Notar que tenho que usar o comando de

vector c().

Page 51: Introdução à Programação  Linguagem R

51

Indexação de vectores

Posso também usar o gerador de séries executando (4 primeiros anos)

Tx.juro[1:4]

Page 52: Introdução à Programação  Linguagem R

52

Exercício• Ex.3.7. i) Crie um vector com 1000

número aleatórios que seguem lei normal com média 100 e desvio padrão 50.

Page 53: Introdução à Programação  Linguagem R

53

Exercício• serie<-rnorm(1000, mean=100, sd=50)

• i) Determine a diferença entre a média dos primeiros 500 valores para os últimos 500 valores.

Page 54: Introdução à Programação  Linguagem R

54

Exercíciodiferenca<- mean(serie[1:500])-

mean(serie[501:1000])

diferenca[1] 0.4310512

Quando temos números aleatórios, em cada execução resultará um número diferente

Page 55: Introdução à Programação  Linguagem R

55

Exercício• iii) Determine a média dos 100 maiores

valores e dos 100 menores valores (use o comando sort( ) para ordenar de forma crescente).

Page 56: Introdução à Programação  Linguagem R

56

Exercícioordenados<-sort(serie)m.menores <- mean(ordenados[1:100])m.maiores<- mean(ordenados[901:1000])m.menores[1] 9.373458m.maiores[1] 190.8691

Page 57: Introdução à Programação  Linguagem R

57

Exercício

• Ex.3.8. Num vector estão os salários anuais de determinado trabalhador que se quer reformar (crie aleatoriamente o vector com 40 elementos com média 600 e d.p. 200).

• Determine o valor da sua reforma que será 2% por cada ano da média dos maiores 10 anos dos últimos 15.

Page 58: Introdução à Programação  Linguagem R

58

Exercício

salarios<-rnorm(40, mean=600, sd=200)us.mel<- sort(salarios[26:40])[6:15]s.medio <- mean(us.mel)(reforma<-s.medio*length(salarios)*2/100)[1] 577.2028colocando a expressão entre parêntesis,

atribui-se a variável e visualiza-se imediatamente o resultado

Page 59: Introdução à Programação  Linguagem R

59

Filtragem de vectores.

Page 60: Introdução à Programação  Linguagem R

60

Filtragem de vectores. Pode acontecer eu precisar retirar do

vector os elementos que obedecem a determinado critério. Por exemplo, quero os elementos que são maiores que zero.

Page 61: Introdução à Programação  Linguagem R

61

Filtragem de vectores. Para isso uso uma condição no índice:x <- rnorm(40,mean=0,sd=10) x[x>0]Reparar que o que está no índice é um

vector com a mesma dimensão de x mas em que os elementos são TRUE ou FALSE.

Page 62: Introdução à Programação  Linguagem R

62

Filtragem de vectores.

Page 63: Introdução à Programação  Linguagem R

63

Filtragem de vectores. Por exemplo, quero saber na distribuição

normal de média zero quanto é a média dos maiores que zerox<-rnorm(1000000,mean=0,sd=10)mean(x)[1] 0.009357231mean(x[x>0])[1] 7.973201

Page 64: Introdução à Programação  Linguagem R

64

Filtragem de vectores. Posso usar como comparações maior >maior ou igual >=menor <menor ou igual <=, igual == (dois iguais)diferente !=

Page 65: Introdução à Programação  Linguagem R

65

Filtragem de vectores. Pode ainda usar-se o “ou” de várias

condições com o carácter | ou o “e” com o carácter &.

e.g., quero os valores maiores que 0 e menores ou iguais a 5 executo

X[X>0 & X<=5] Para negar uma condição uso o

carácter !.

Page 66: Introdução à Programação  Linguagem R

66

Exercício

Ex.3.9. Suponha que as notas de um disciplina seguem lei normal com média 11.47 valores e desvio padrão de 3.51 valores.

i) Crie um vector com 250 “indivíduos”.

Page 67: Introdução à Programação  Linguagem R

67

Exercícionotas <-rnorm(250, mean=11.47, sd=3.51)

ii) Retire para outro vector os alunos com nota maior ou igual a 9,5 valores e calcule a percentagem de passados.

Page 68: Introdução à Programação  Linguagem R

68

Exercíciopassados <- notas [notas>=9.5]length(passados)/length(notas)

• iii) Substitua os valores maiores que 20 por 20 e os menores que zero por zero.

Page 69: Introdução à Programação  Linguagem R

69

Exercíciopassados[passados > 20] <- 20passados[passados < 0] <- 0

• iv) arredonde as notas • v) determine quantos alunos tiveram 10

valores

Page 70: Introdução à Programação  Linguagem R

70

Exercíciopassados <- round(passados,0)length(passados [passados == 10])

Page 71: Introdução à Programação  Linguagem R

71

Exercício• Ex.3.10. Suponha que se prevê que a

EURIBOR do próximo ano segue lei normal com média 5% e desvio padrão 3 pontos percentuais mas que nunca poderá ser menor que 0.25% nem maior que 10%.

Page 72: Introdução à Programação  Linguagem R

72

Exercício• i) Crie um vector com 1000 “indivíduos”

com estas características substituindo os valores “errados” por estas taxas limite.

• • ii) extraia 2000, apague os “errados” e

depois retire 1000 “certos”

Page 73: Introdução à Programação  Linguagem R

73

Exercíciotx.prox.ano <- rnorm(1000, mean=0.05,

sd=0.03)tx.prox.ano [tx.prox.ano < 0.0025] <-

0.0025tx.prox.ano [tx.prox.ano > 0.1] <- 0.1

Page 74: Introdução à Programação  Linguagem R

74

Exercíciotx.prox.ano <- rnorm(2000, mean=0.05,

sd=0.03)tx.prox.ano <- tx.prox.ano [tx.prox.ano >=

0.0025 & tx.prox.ano <= 0.1]tx.prox.ano <- tx.prox.ano [1:1000]

Page 75: Introdução à Programação  Linguagem R

4.a Aula

75

Page 76: Introdução à Programação  Linguagem R

76

Criação de uma Função

Page 77: Introdução à Programação  Linguagem R

77

Funções• Eu posso criar uma função que • tem uma variável de entrada (que

também pode ser um vector) e • tem um resultado de saída (que pode

ser uma variável ou um vector).

Page 78: Introdução à Programação  Linguagem R

78

Funções• Por exemplo, quero dividir as notas

dos alunos em “reprovou” ou “passou”. Para isso escrevo num editor de texto a função:Classifica <-function(nota){if(nota >= 9.5) decisao<- ”passou” else decisao<- ‘reprovou’decisao}

Page 79: Introdução à Programação  Linguagem R

79

Funções• Depois copio estas linhas de comando

e executo-as no R. • Depois eu posso usar essa para

classificar se os alunos passaram ou reprovaram.

• Na sintaxe da função, antes de escrever o comando de saída (i.e., decisao}) é obrigatório mudar de linha.

Page 80: Introdução à Programação  Linguagem R

80

Funções

Page 81: Introdução à Programação  Linguagem R

81

FunçõesA função consiste em1º objecto que a vai conter,2º o sinal de atribuição3º o comando function 4º nome das variáveis dentro de parênteses

rectos.5ºAbrem-se chavetas que apenas se fecham

quando escrevermos o comando a dar o resultado (que tem que ser na última linha).

Page 82: Introdução à Programação  Linguagem R

82

FunçõesA execução condicionada usa o comandoif(condição) Caso sim else Caso não.

Page 83: Introdução à Programação  Linguagem R

83

FunçõesEx.3.11. i) Escreva uma função que tem

como variáveis o capital inicial, a taxa de juro e o prazo e retorna o capital final (capitalização composta).

Page 84: Introdução à Programação  Linguagem R

84

Funçõescc <-function(cap.ini, t.juro, prazo){resultado<-cap.ini*(1+t.juro)^prazoresultado}

Page 85: Introdução à Programação  Linguagem R

85

Funçõesii) Determine o capital final se aplicados

1000€ à taxa de juro anual de 5% durante 30 anos.

cc(1000, 0.05, 30)[1] 4321.942

Page 86: Introdução à Programação  Linguagem R

86

Funçõesiii) Experimente usar a função para

determinar qual o capital final para três situações diferentes (a taxa de juro ser 4%, 5% ou 6%).

cc(1000, c(0.04,0.05,0.06) ,30)[1] 3243.398 4321.942 5743.491

Page 87: Introdução à Programação  Linguagem R

87

Funçõesiv) acrescente uma condição de forma que,

se o capital for maior que 50000€, a taxa de juro é maior em 0.5pp e acrescente na saída a taxa de juro. Experimente a função.

Page 88: Introdução à Programação  Linguagem R

88

Funçõescc <-function(cap.ini, t.jr, prazo){if(cap.ini < 50000) tx<- t.jr else tx<-t.jr+0.005cap.final<-cap.ini*(1+tx)^prazoresultado<-c(cap.ini, tx, prazo, cap.final)names(resultado)<-c("Cap.ini", "Tx.juro",

"Prazo", "Cap.final")resultado}

Page 89: Introdução à Programação  Linguagem R

89

Execução repetida

Page 90: Introdução à Programação  Linguagem R

90

Execução repetidaExiste recorrentemente necessidade de

repetir uma série de operaçõesPor exemplo, no Método de Monte Carlos1. Eu sei como resolver um modelo mas

uma variável segue uma variável aleatória

2. Experimento vários valores da variável3. Calculo o valor médio e o desvio padrão

e faço um histograma

Page 91: Introdução à Programação  Linguagem R

91

Execução repetidaE.x. Do 2ºtesteInvisto 1 milhão de euros por ano e dentro

de N anos faço uma descobertaN é desconhecido mas tem distribuição

normal com média 10 anos e desvio padrão 5 anos.

Taxa de juro de 3% ao ano

Page 92: Introdução à Programação  Linguagem R

92

Execução repetida#determino 1000 casos possíveisN <- rnorm(1000,mean=10,sd=5)#determino 1000 valores actuaisTx.j<-0.03VA<- 1/Tx.j*(1-(1+Tx.j)^-N)mean(VA)sd(VA)

Page 93: Introdução à Programação  Linguagem R

93

Execução repetidaMas se eu repetir esta série de comandos,

resultam outros valoresEssas diferenças traduzem “erros de

calculo” que serão tanto menos quanto mais replicas usarmos

Posso fazer um ciclo para avaliar esse erro

Page 94: Introdução à Programação  Linguagem R

94

Execução repetidaM=0 #crio o vector M senão não posso usar M[i]Dp=0 #crio o vector Dpfor (i in 1:100) #Faço 100 replicações do cálculo{ N <- rnorm(1000,mean=10,sd=5) Tx.j<-0.03 VA<- 1/Tx.j*(1-(1+Tx.j)^-N) M[i] =mean(VA) Dp[i]=sd(VA)}