TOPICOS FUNDAMENTAIS
O R ´e uma linguagem de programa¸c˜ao que permite manipular dados, fazer calculos e gr´aficos estat´ısticos. O programa est´a disponivel gratuitamente em:
http://www.r-project.org/
H´a lista de discuss˜ao para troca de informa¸c˜oes, perguntas e respostas sobre o uso da linguagem R em: http://br.groups.yahoo.com/group/R STAT/
Referˆencias e/ou apostilas (portuguˆes e inglˆes) podem ser obtidas no seguinte site: http://cran.r-project.org/doc/contrib/
Funcionalidades
Pode-se designar nomes a objetos R usando a combina¸c˜ao A <- b(A recebe b), b -> A (b vai em A) ou A = b (A recebe b) > A <- 2 > B <- 3 > C = A + B > C [1] 5
Comandos colocados entre parenteses mostram o seu resultado na tela. > (C = A + B)
[1] 5
O R usa o ponto (.) como separador decimal, assim, se for importar dados que usam virgulas como separadores decimais, troque-as por pontos (.) usando comandos de localizar e substituir diretamente no arquivo fonte ou observe os parametros de convers˜ao no processo de leitura no R.
O R oferece comandos de ajuda.
help.start() ## inicia documenta¸c˜ao na forma de arquivos html visualizados no seu browser (Inglˆes) help (topico) ## inicia uma janela de ajuda sobre topico
Ou apenas com o ponto de interroga¸c˜ao (?) seguido do topico ?(topico)
Para sair com seguran¸ca do R (encerrar) use o comando q(). Um dialogo aparecera perguntando se quer ”salvar” o espa¸co de trabalho.
Save workspace image? [y/n/c]:
Usualmente se utiliza responder n (n˜ao)
Palavras Reservadas NA ## valores faltantes
NaN ## valor n˜ao representavel por n´umero Inf ## valor indeterminado
c q s t C D F I T diff exp log mean pi range rank var FALSE Inf NA NaN NULL TRUE break else for function if in next repeat while
Operadores Aritmeticos (reservado) + - * / soma, subtra¸c˜ao, produto e divis˜ao sqrt() raiz quadrada
abs() valor absoluto (positivo)
sin() cos() tan() fun¸c˜oes trigonometricas
asin() acos() atan() fun¸c˜oes trigonometricas inversas sinh() cosh() tanh() fun¸c˜oes hiperbolicas
asinh() acosh() atanh() fun¸c˜oes hiperbolicas inversas exp() log() exponencial e logaritmo neperiano log10() logaritimo na base-10
Operadores l´ogicos Os operadores l´ogicos s˜ao < : menor do que, <= : menor ou igual > : maior do que, >= : maior ou igual != : n˜ao igual (diferente)
Manipula¸c˜ao de objetos na Workspace
objects() mostra os objetos atualmente presentes na WS rm() remove um objeto da WS
rm(list = ls()) remove todos os objetos da WS <- ou -> direciona um conte´udo para um objeto = equivale a
<-O R como uma calculadora cient´ıfica > 3 + 5
[1] 8
> sin(20) + cos(17) - pi * 10 [1] -30.77814
Objetos (armazenados na memoria ou WS (workspace)) vetores; fatores; matrizes e arrays; listas; data-frames (tabelas); fun¸c˜oes; etc.
V E T O R E S > v2 <- c(1, 2, 4.6) > v2 [1] 1.0 2.0 4.6 > v2[2] [1] 2
## mostra o valor da segunda posi¸c˜ao do vetor > v2[2] <- 1.34
> v2
[1] 1.00 1.34 4.60
## coloca o valor 1,34 na segunda posi¸c˜ao do vetor Removendo elementos do vetor
> v3 <- c(2, 3, 10, 6, 13, 12) > (v3[5])
[1] 13
## perceba que o comando (v3[5]) mostra o valor da quinta posi¸c˜ao. > (v3[-5])
[1] 2 3 10 6 12
## com o comando (v3[-5]) remove o valor da quinta posi¸c˜ao. > (v3[-(2:4)])
[1] 2 13 12
## com o comando (v3[-(2:4)]) remove os valores entre a segunda e a quarta posi¸c˜ao (inclusive a segunda e quarta posi¸c˜ao).
Divis˜oes em um vetor > c(2.35, 1.45, 7.11)/5 [1] 0.470 0.290 1.422
## Divis˜ao simples dos elementos do vetor. > c(2.35, 1.45, 7.11)%/%5
[1] 0 0 1
> c(2.35, 1.45, 7.11)%%2 [1] 0.35 1.45 1.11
## Aparece apenas o resto da divis˜ao (1.45 n˜ao ´e divisivel por 2). Escrevendo uma equa¸c˜ao com comandos aninhados
> (v2.calc <- sin(n <- 1:6) + cos(v2) - pi * (v2/n)) [1] -1.7598194 -0.9668168 -4.7881413 -1.0018984 -1.5721183 [6] -2.8001224
Controlando sequˆencias em vetores num´ericos INTEIROS
Criando uma sequˆencia 0, 1, 2, ... ,10.
Quando dois n´umeros s˜ao separados por dois pontos o R entente como origem o n´umero do lado esquerdo e como final o n´umero do lado direito
> a = 0 > b = 10 > a:b [1] 0 1 2 3 4 5 6 7 8 9 10 > b:a [1] 10 9 8 7 6 5 4 3 2 1 0 > v2 <- 0:10 > v2 [1] 0 1 2 3 4 5 6 7 8 9 10 Vetores De Caracteres
O R tamb´em constr´oi vetores com objetos. Como por exemplo: > nomes <- c("Marta", "Regina", "Mario", "Pedro", + "Mauricio", "Marcelo", "Patricia", "Cintia", + "Abigail", "Renato")
> nomes
[1] "Marta" "Regina" "Mario" "Pedro" "Mauricio" [6] "Marcelo" "Patricia" "Cintia" "Abigail" "Renato" E tamb´em vetores com os meses.
> format(ISOdate(2000, 1:12, 1), "%B")
[1] "janeiro" "fevereiro" "mar¸co" "abril" [5] "maio" "junho" "julho" "agosto" [9] "setembro" "outubro" "novembro" "dezembro"
Juntando elementos de vetores
paste(a,b): junta os dados do vetor ’a’ com dados do vetor ’b’, caso a caso (com possibilidade de reciclagem). > nomes
[1] "Marta" "Regina" "Mario" "Pedro" "Mauricio" [6] "Marcelo" "Patricia" "Cintia" "Abigail" "Renato" > paste(nomes, 10:1)
[1] "Marta 10" "Regina 9" "Mario 8" "Pedro 7" [5] "Mauricio 6" "Marcelo 5" "Patricia 4" "Cintia 3" [9] "Abigail 2" "Renato 1"
> paste(letters[1:6], 1:9, sep = "")
[1] "a1" "b2" "c3" "d4" "e5" "f6" "a7" "b8" "c9" ## Observe a reciclagem
> rep(paste("T", 1:3, sep = ""), c(4, 4, 3))
[1] "T1" "T1" "T1" "T1" "T2" "T2" "T2" "T2" "T3" "T3" "T3" ## Note que no comando o vetor orientou a repeti¸c˜ao de cada n´umero.
M A T R I Z E S (bidimensionais) > args(matrix)
function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) NULL
Queremos a matriz 4x3 a partir do vetor (1 2 3 4 5 6 7 8 9 10 11 12)
m1 = 1 2 3 4 5 6 7 8 9 10 11 12
com entrada dos valores por linhas
> (m1 <- matrix(1:12, nc = 3, by = T)) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 [4,] 10 11 12
Queremos, agora, uma matriz m2 4x3 a partir do mesmo vetor (1 2 3 4 5 6 7 8 9 10 11 12),com entrada dos valores por colunas:
m2 = 1 5 9 2 6 10 3 7 11 4 8 12 > (m2 <- matrix(1:12, ncol = 3)) [,1] [,2] [,3] [1,] 1 5 9 [2,] 2 6 10 [3,] 3 7 11 [4,] 4 8 12
Nomeando linhas e colunas da matriz
> dimnames(m1) <- list(c("L1", "L2", "L3", "L4"), + c("C1", "C2", "C3")) > m1 C1 C2 C3 L1 1 2 3 L2 4 5 6 L3 7 8 9 L4 10 11 12 ... ou
> m1.a <- matrix(1:12, ncol = 3, byrow = F, dimnames = list(c("L1", + "L2", "L3", "L4"), c("C1", "C2", "C3"))) > m1.a C1 C2 C3 L1 1 5 9 L2 2 6 10 L3 3 7 11 L4 4 8 12 Inspecionando a matriz > m2 [,1] [,2] [,3] [1,] 1 5 9 [2,] 2 6 10 [3,] 3 7 11 [4,] 4 8 12 > length(m2) [1] 12
> dim(m2) [1] 4 3
## dimens˜ao da matriz (linhas x colunas)
> nrow(m2) [1] 4
## n´umero de linhas da matriz
> ncol(m2) [1] 3
## n´umero de colunas da matriz
> m2[1, 2] [1] 5
## elemento da primeira linha e segunda coluna
> m2[, 1] [1] 1 2 3 4
## todos elementos da primeira coluna
> m2[1, ] [1] 1 5 9
## todos elementos da primeira linha
> m2[c(1, 3), c(1, 3)] [,1] [,2]
[1,] 1 9
[2,] 3 11
> m2[1:2, 2:3] [,1] [,2]
[1,] 5 9
[2,] 6 10
## submatriz com linhas 1 e 2 e colunas 2 e 3 Gerando uma matriz identidade
> diag(3) [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 > diag(5) [,1] [,2] [,3] [,4] [,5] [1,] 1 0 0 0 0 [2,] 0 1 0 0 0 [3,] 0 0 1 0 0 [4,] 0 0 0 1 0 [5,] 0 0 0 0 1
Opera¸c˜oes basicas com matrizes t() transposta
%*% produto interno det() determinante
solve() inversa de uma matriz ou resolver sistema de equa¸c˜oes lineares
> (m4 <- matrix(1:6, nc = 3)) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > (m5 <- matrix(10 * (1:6), nc = 3)) [,1] [,2] [,3] [1,] 10 30 50 [2,] 20 40 60 > m4 + m5 [,1] [,2] [,3] [1,] 11 33 55 [2,] 22 44 66 ## membro `a membro
> m5 - m4 [,1] [,2] [,3] [1,] 9 27 45 [2,] 18 36 54 ## membro `a membro > dim(t(m4)) [1] 3 2 > dim(m5) [1] 2 3 > (m6 <- t(m4) %*% m5) [,1] [,2] [,3] [1,] 50 110 170 [2,] 110 250 390 [3,] 170 390 610 > det(m6) [1] -4.054396e-12
## perceba que aqui h´a um erro de arredondamento. Para contornar isso basta utilizar o seguinte comando: > round(det(m6), digits = 1)
[1] 0
## Aqui obtemos o resultado esperado.
Sistema de equacoes lineares (Ax=b) x + 3y - z = 10 5x - 2y + z = 15 2x + y - z = 7 > mat <- matrix(c(1, 5, 2, 3, -2, 1, -1, 1, -1), + nc = 3) > mat [,1] [,2] [,3] [1,] 1 3 -1 [2,] 5 -2 1 [3,] 2 1 -1
> solve(mat) [,1] [,2] [,3] [1,] 0.07692308 0.15384615 0.07692308 [2,] 0.53846154 0.07692308 -0.46153846 [3,] 0.69230769 0.38461538 -1.30769231 ## inversa da matriz > vec <- c(10, 15, 7) > vec [1] 10 15 7 > solve(mat, vec) [1] 3.615385 3.307692 3.538462 ## Solu¸c˜ao do sistema Ax=b
Resolva os seguintes exerc´ıcios: 1) Dadas as matrizes: A = 2 −3 −5 −1 4 5 1 −3 −4 B = −1 3 5 1 −3 −5 −1 3 5 C = 2 −2 −4 −1 3 4 1 −2 −3
mostre que AB=BA = matriz nula , AC=A e CA=C
2) Um construtor tem contratos para construir 3 estilos de casa: moderno, mediterraneo e colonial. A quantidade de material empregada em cada tipo de casa ´e dada pela tabela:
Tabela 1: Estilos de casas
Estilo de casa Ferro Madeira Vidro Tinta Tijolo
Moderno 5 20 16 7 17
Mediterrˆaneo 7 18 12 9 21
Colonial 6 25 8 5 13
a) Se ele vai contruir 5, 7 e 12 casas dos tipos moderno, mediterraneo e colonial, respectivamente, quantas unidades de cada material ser˜ao empregadas?
b) Suponha agora que os pre¸cos por unidade de ferro, madeira, vidro, tinta e tijolo sejam, respectivamente, 15, 8, 5, 1 e 10 u.c.p. Qual ´e o pre¸co unit´ario de cada tipo de casa?
3) Suponha que um corretor da Bolsa de valores fa¸ca um pedido para comprar a¸c˜oes na segunda-feira, como segue:
400 quotas de a¸c˜ao A, 500 quotas da a¸c˜ao B e 600 quotas da a¸c˜ao C. As a¸c˜oes A, B e C custam por quota R$ 500,00, R$ 400,00 e R$ 250,00, respectivamente.
a) Encontre o custo total de acoes, usando multipicacao de matrizes.
b) Qual serah o ganho ou a perda quando as acoes forem vendidas seis meses mais tarde se as acoes A, B e C custam R$ 600,00, R$ 350,00 e R$ 300,00 por quota, respectivamente?
4) Encontre as solu¸c˜oes para o sistema de equa¸c˜oes. a) 3x + 5y = 2 2x + z = 3 5x + y - z = 0 b) 2x - y +3z = 11 4x - 3y +2z = 0 x + y + z = 6 3x + y + z = 4 c) 3x + 5y + 12z - t = -3 1x + 1y + 4z - t = -6 0x + 2y + 2z + t = 6
5) Calcule a determinante de:
A = 2 0 −1 3 0 2 4 −3 7 6) Dadas as matrizes A = 1 2 1 0 B = 3 −1 0 1 Calcule: a) det(A) + det(B) b) det(A + B)
7) Dada a matriz calcule
A = 2 1 −3 0 2 1 5 1 4 a) det(A) b) inversa de A
8) Considere C = −1 0 1 −1 3 1 0 1 1 a) Determine a inversa de C
b) Uma maneira de decodificar mensagens ´e por meio de multiplica¸c˜ao de matrizes. Associamos as letras do alfabeto aos n´umeros, segundo a correspondencia abaixo
a b c d e f g h i j l m n o p q r s t u v x z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Se desejamos enviar a mensagem ”eles”, por exemplo, utilizamos a correspondˆencia num´erica, montamos a matriz
M =
5 11 5 18
Fazemos CM, onde C ´e uma invers´ıvel, por exemplo,
C = 1 2 3 4 e enviamos CM = 15 47 35 105 .
Quem recebe a mensagem codificada, decodifica-a utilizando multiplicacao pela inversa de C(matriz chave). Voce recebe a mensagem codificada
CM = 16 35 2 12 52 51 14 36 18