curso básico de r

78
Prof. Dr. Roberto Dantas de Pinho, [email protected] Este curso tomou como base material dos profs. Dr. Paulo Justiniano Ribeiro Jr (UFPR) e Dr. Cosme Marcelo Furtado Passos da Silva (FIOCRUZ) 1

Upload: roberto-de-pinho

Post on 13-Jun-2015

1.764 views

Category:

Technology


3 download

DESCRIPTION

Curso básico de R preparado para o MCTI

TRANSCRIPT

Page 1: Curso Básico de R

Prof. Dr. Roberto Dantas de Pinho, [email protected]

Este curso tomou como base material dos profs. Dr. Paulo Justiniano Ribeiro Jr (UFPR) e Dr. Cosme Marcelo Furtado Passos da Silva (FIOCRUZ)

1

Page 2: Curso Básico de R

Um primeira sessão com o R

Objetos Entrada de dados Agora que temos

os dados... Algumas análises

Filtragem e seleção

Salvando seu trabalho

Manipulando dados

Somas e agregações

Regressão linear

2

E muitas outras coisas ao longo do caminho

Page 3: Curso Básico de R

Você pode usar o R para avaliar algumas expressões aritméticas simples. Digite:1 + 2 + 3

2 + 3 * 4

3/2 + 1

4 * 3**3

O R é uma ambiente e uma linguagem

6

Page 4: Curso Básico de R

O ambiente R permite que você envie comandos e veja seus resultados imediatamente

A linguagem R é composta pelo conjunto de regras e funções disponíveis que podem ser executados no ambiente R.

Você pode juntar sequências de comandos em scripts para uso posterior

7

Page 5: Curso Básico de R

Um série de funções estão disponíveis. Alguns exemplos simples:

sqrt(2)

abs(-10)

sin(pi)

pi é uma constante do R, seu valor já é definido

2

10

)sin(

8

Page 6: Curso Básico de R

Resultados, dados de entrada , tabelas, etcsão armazenados no R em Objetos

Objetos possuem um nome, conteúdo , um tipo e são armazenados na memória. Ex.

Criar o objeto “x” contendo o número 10:x <- 10

Exibir o conteúdo de x:x

No R, abc é diferente de ABC

9

Page 7: Curso Básico de R

Experimente:X <- sqrt(2)

Y = sin(pi)

Z = sqrt(X+Y)

Nos exemplos acima, X, Y e Z armazenam os resultados das respectivas operações

No R, sempre existem muitas formas de fazer a mesma coisa.

<- e = são equivalentes.

Vamos focar sempre em uma.

10

Page 8: Curso Básico de R

Qual o valor de C ao final da sequência de comandos abaixo?A = 1

B = 2

C = A + B

A = 5

B = 5

Por quê?

11

Page 9: Curso Básico de R

12

Page 10: Curso Básico de R

Ambiente que facilita o uso do R Organiza as janelas de trabalho Acesso facilitado aos objetos e histórico de

comandos.

13

Page 11: Curso Básico de R

Edição de Scripts e

exibição de objetos

Console

14

Page 12: Curso Básico de R

Lista de objetos

e histórico

Ajuda, gráficos,

arquivos e

pacotes

15

Page 13: Curso Básico de R

Objeto que armazena múltiplos dados de um único tipo

A função c( ) (“c” de concatenar ou de conjunto) permite agrupar valores para formar um vetor:X = c(1,3,6)

Para acessar elementos do vetor:X[1] X[3]

16

Page 14: Curso Básico de R

Operações aritméticas e funções podem ser aplicadas a todo um vetor. Ex.X = c(1,3,5)

Y = c(10,20,30)

X+Y

11 23 35

sum(X)

9

E X + 100 ?101 103 105 pela Lei da reciclagem

17

Page 15: Curso Básico de R

Quando o tamanho pedido por uma operação é diferente dos dados disponíveis, os dados existentes são repetidos até completar o necessário.

Como X tem 3 elementos, X+100 é o

mesmo que X + c(100,100,100)

18

Page 16: Curso Básico de R

> X = 1:10

> [1] 1 2 3 4 5 6 7 8 9 10

> X = seq(0,1,by=0.1)

> [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

> rep(“a”,5)

> “a” “a” “a” “a” “a”

> nomes = c("fulano", "beltrano",

"cicrano")

> nomes [1] "fulano" "beltrano" "cicrano"

> letras = letters[1:5]

> letras [1] "a" "b" "c" "d" "e"

> letras = LETTERS[1:5]

> letras [1] "A" "B" "C" "D" "E"

19

Page 17: Curso Básico de R

numeric is.numeric( )

as.numeric( )

character is.character( )

as.character( )

integer is.integer( )

as.integer( )

logical T == TRUE == 1

F == FALSE == 0

A == B significa “A é igual a B?”

20

Page 18: Curso Básico de R

Vetor organizado em linhas e colunasm1 <- matrix(1:12, ncol = 3)

[,1] [,2] [,3]

[1,] 1 5 9

[2,] 2 6 10

[3,] 3 7 11

[4,] 4 8 12

21

Page 19: Curso Básico de R

length(m1) [1] 12 dim(m1) [1] 4 3 nrow(m1) [1] 4 ncol(m1) [1] 3

22

Page 20: Curso Básico de R

m1[1, 2]

[1] 5

m1[2, 2]

[1] 6

m1[ , 2]

[1] 5 6 7 8

m1[3, ]

[1] 3 7 11

23

m1[1,2]= 99

muda o valor da célula

Page 21: Curso Básico de R

m1[1:2, 2:3]

[,1] [,2]

[1,] 5 9

[2,] 6 10

24

Page 22: Curso Básico de R

colnames(m1)

NULL

rownames(m1)

NULL

colnames(m1) = c("C1","C2","C3")

m1[,”C1”]

[1] 1 2 3 4t(m1) transposta de m1

25

Page 23: Curso Básico de R

“matriz” com várias dimensões. Ex. com 3 dim.:ar1 <- array(1:24, dim = c(3, 4, 2)), , 1

[,1] [,2] [,3] [,4][1,] 1 4 7 10[2,] 2 5 8 11[3,] 3 6 9 12

, , 2

[,1] [,2] [,3] [,4][1,] 13 16 19 22[2,] 14 17 20 23[3,] 15 18 21 24

Para um array de 3 dimensões, você pode entender a 3ª

dimensão como uma coleção de matrizes.

1ª matriz

2ª matriz

26

Page 24: Curso Básico de R

Como trabalhar com coisas assim?

Ano UFCódigo do ÓrgãoÓrgão Código da UO unidade orçamentária função subfunção programa açãolocalizador descrição da ação valor P&D valor ACTC

2010 AC 1

Adm

direta e

indireta 1 Adm direta e indireta 19 121 2056 1548

MODERNIZAÇÃO DO SISTEMA DE

PLANEJAMENTO E GESTÃO DA SDCT R$ - R$ 16.655,00

2010 AC 1

Adm

direta e

indireta 1 Adm direta e indireta 19 121 2056 1549

PROGRAMA DE COOPERAÇÃO TÉCNICA E

FINANCEIRA COM INSTIT. NAC. INTERN.

GOVERNAMENTAIS E NÃO

GOVERNAMENTAIS R$ - R$ 715.000,00

2010 AC 1

Adm

direta e

indireta 1 Adm direta e indireta 19 122 2009 2224

MANUTENÇÃO DO GABINETE DO SECRETÁ

RIO R$ - R$ 27.732,11

2010 AC 1

Adm

direta e

indireta 1 Adm direta e indireta 19 122 2009 2227 DEPARTAMENTO DE GESTÃO INTERNA R$ - R$ 2.266.169,90

27

Page 25: Curso Básico de R

Cada coluna tem o seu tipod = data.frame(letters[1:4], 1:4, 10.5)

letters.1.4. X1.4 X10.5

1 a 1 10.5

2 b 2 10.5

3 c 3 10.5

4 d 4 10.5

Podemos mudar o nome das colunas:colnames(d) = c("letra","num", "valor")

colnames(d)

[1] "letra" "num" "valor“

d$valor # seleciona a coluna “valor” de d

colnames(d) [1] "letra" "num" "valor"

Na maior parte do tempo usaremos data.frames

28

Page 26: Curso Básico de R

lista fator

29

veremos depois...

Page 27: Curso Básico de R

Diversas fontes. Veremos:

Teclado x = scan( )

Arquivos Excel

Arquivos CSV

Bancos de Dados SQL

30

Page 28: Curso Básico de R

require(XLConnect)

wb <- loadWorkbook(“AC_PDACTCaula.xls”)

plan1 <- readWorksheet(wb, sheet = 1)

str(plan1)

View(plan1)

31

Page 29: Curso Básico de R

require(XLConnect)

Carrega o pacote XLConnect Pacotes são conjuntos de funções e dados

que adicionam funcionalidades ao R. Se o pacote não estiver instalado:

setInternet2() #somente no windows

install.packages("XLConnect", dep=T)

32

Page 30: Curso Básico de R

Cria um objeto “wb” que aponta para o arquivo excel:

wb <-

loadWorkbook(“AC_PDACTCaula.xls”)

33

Page 31: Curso Básico de R

Carrega os dados da primeira planilha (“aba”) em um objeto chamado “plan1”

plan1 <- readWorksheet(wb, sheet = 1)

As funções no R identificam os parâmetros pela ordem

34

As funções no R identificam os

parâmetros pela ordem

Ou utilizando o nome do

parâmetro

Page 32: Curso Básico de R

Mostra a estrutura do objeto criado:

str(plan1)

Mostra os dados carregados em uma janela:

View(plan1)

35

str() funciona para qualquer

objeto do R. É muito útil.

No RStudio, você pode clicar em um objeto na lista de objetos

Page 33: Curso Básico de R

args(readWorksheet) #mostra parâmetros

function (

object, #o workbook “wb”

sheet, #número ou nome da

“aba”/planilha

startRow, #linha inicial daimportação

startCol, #col. inicial da importação

endRow, #linha final da importação

endCol, #col. final da importação

header # T ou F: usar primeira

linha para dar nome às

colunas )

36

Page 34: Curso Básico de R

Comma-separated values: valores separados por vírgula

Formato de arquivo muito comum para troca de dados

São comuns outros separadores: <tab> ; <espaço>

Exemplo:uf ano valido somaactc somapd

AC 2009 1 34296430.67 3630841.04

AC 2010 1 29397712.04 3579715.12

AL 2009 1 12650160.51 8903714.41

37

Page 35: Curso Básico de R

Exemplo:uf ano valido somaactc somapd

AC 2009 1 34296430,67 3630841,04

AC 2010 1 29397712,04 3579715,12

AL 2009 1 12650160,51 8903714,41

Para ler este arquivo:d = read.csv(file="AgregaUF20110930_b.txt",

header=T, # usa primeira linha como cabeçalho

sep="\t", # separador de valores é <tab>

dec="," # separador decimal é vírgula

)

38

Page 36: Curso Básico de R

str(d) #estrutura criada

summary(d) #resumo estatístico

head(d) #primeiros registros

tail(d) #últimos registros

plot(d) #visualização padrão

39

Page 37: Curso Básico de R

require(RODBC)

canal <- odbcConnect(

“base_ODBC",

case="tolower“,

uid=“usuário”,

pwd=“senha”)

d <- sqlQuery(canal,

”select * from tabela where ano = 2010”,

as.is=T)

40

Page 38: Curso Básico de R

Como fazer a soma de uma coluna de um data.frame?sum(data.frame$coluna)

sum(d$somapd)

[1] NA

41

Page 39: Curso Básico de R

NA Not Available

denota dados faltantes. Note que deve utilizar maiúsculas.

NaN Not a Number

denota um valor que não é representável por um número.

Inf e -Inf

mais ou menos infinito.

42

Tente: c(-1,0,1)/0

Page 40: Curso Básico de R

Soma:sum(d$somapd, na.rm=T)

[1] 4836882446

Média:sum(d$somapd, na.rm=T)

Mediana:median(d$somapd, na.rm=T)

Desvio padrão:sd(d$somapd, na.rm=T)

43

Page 41: Curso Básico de R

Para estes exemplos:milsa = read.csv("milsaText.txt",

sep="\t", head=T, dec=".")

44

Page 42: Curso Básico de R

Frequências absolutastable(milsa$civil)

Frequências relativastable(milsa$civil) /

length(milsa$civil)

ou

prop.table(milsa$civil)

Gráfico de setorespie(table(milsa$civil))

45

Page 43: Curso Básico de R

Com attach(milsa)

Frequências absolutastable(civil)

Frequências relativastable(civil) /

length(civil)

ou

prop.table(civil)

Gráfico de setorespie(table(civil))

46

depois: detach(milsa)

Page 44: Curso Básico de R

Gráfico de barras:barplot(table(instrucao))

Lembrando:

Posso salvar resultados como objetos e usá-los várias vezes

instrucao.tb = table(instrucao)

barplot(instrucao.tb )

pie(instrucao.tb )

47

Page 45: Curso Básico de R

Tente:prop.table(filhos)

Solução:prop.table(table(filhos))

Outra solução:

Filtrar os elementos com NA

48

Page 46: Curso Básico de R

mean(filhos, na.rm=T) #média

median(filhos, na.rm=T) #mediana

range(filhos, na.rm=T) #amplitude

var(filhos, na.rm=T) #variância

sd(filhos, na.rm=T) #desvio padrão

Quartis: filhos.quartis = quantile(filhos, na.rm=T)

Amplitude inter-quartis:

filhos.quartis [4] -filhos.quartis [1]

49

Page 47: Curso Básico de R

plot(milsa)

plot(salario ~ ano)

hist(salario)

boxplot(salario)

stem(salario)

50

Page 48: Curso Básico de R

Selecionando algumas linhas milsaNovo = milsa[c(1,3,5,6) , ]

Selecionando algumas colunas milsaNovo = milsa[ , c(1,3,5)]

milsaNovo = milsa[ , c(“funcionario”,

”instrucao“, “salario”)]

Atenção: Cria cópia

milsaNovo=milsa[c(1,3,5,6) ,]

Substitui anterior milsa=milsa[c(1,3,5,6) , ]

51

Page 49: Curso Básico de R

Quem ganha acima da mediana acimamediana = milsa[ salario >

median(salario), ]

Quais são os casados com nível superior? casadoEsuperior = milsa[

civil==“casado” & instrucao ==

“Superior”, ]

52

E: ambas as condições devem ser verdadeiras

Page 50: Curso Básico de R

Quais são os casados ou quem tem nível superior?

casadoOUsuperior = milsa[

civil==“casado” | instrucao ==

“Superior”, ]

53

OU: pelo menos uma das condições deve ser

verdadeira

Page 51: Curso Básico de R

milsaLimpo=milsa[!is.na(salario), ]

Em português: Nova tabela milsaLimpo

É igual =

Tabela antiga milsa

Selecione [

Linhas Salário não é NA ! is.na(salario)

e todas as colunas , ]

54

NÃO

Page 52: Curso Básico de R

QUANTOS são os casados? sum(civil==“casado”)

ou

table(civil)["casado"]

QUANTOS são os casados e tem nível superior? sum(civil==“casado” & instrucao

== “Superior” )

table(civil,instrucao)["casado",

"Superior"]

55

Page 53: Curso Básico de R

milsaNovo é igual a milsa, sem as linhas 1,2 e 5 e sem as colunas 1 e 8:

milsaNovo =

milsa[-c(1,2,5), -c(1,8)]

56

Page 54: Curso Básico de R

sup = which(instrucao=="Superior“)

[1] 19 24 31 33 34 36

Posso usar depois: mean(milsa[sup,”salario”])

Média salarial dos que tem nível superior

57

Quais linhas atendem à condição

vantagem: não cria cópia!!

Page 55: Curso Básico de R

Uma amostra aleatória de 10 elementos de milsa:

amostra =

sample(x=nrow(milsa),size=10)

[1] 12 29 1 3 17 14 26 33 20

31

Média salarial da amostra:

mean(milsa[amostra,”salario”])

58

Page 56: Curso Básico de R

Em ordem de número de filhos:milsa[order(filhos),]

Decrescente:milsa[order(filhos, decreasing=T),]

Em ordem de número de filhos e depois por idade:milsa[order(filhos,ano),]

Ver os 10 mais novos:head(milsa[order(ano),], 10)

Ver os 10 mais velhos:tail(milsa[order(ano),], 10)

59

Page 57: Curso Básico de R

Apagando um objeto

rm(milsaNovo)

Apagando tudo

rm(list = ls())

60

ls() : lista de objetos correntes

Page 58: Curso Básico de R

Objetos do tipo lista são coleções que podem conter objetos de tipos diferentes.

lis = list(A=1:10, B=“Texto”,

C = matrix(1:9,ncol=3)

São muito utilizadas na passagem de parâmetros para funções ou nos resultados de funções.

lis[1:2]

uma lista com os dois primeiros itens de lis (A e B) lis[[1]]: objeto armazenado na primeira posição da lista ( o conteúdo

de A). O mesmo que lis$A

61

Page 59: Curso Básico de R

Para salvar todos os objetos:save.image(“arquivo.RData”)

Para salvar alguns objetos:save( x, y,

file=“arquivo.RData”)

Carregando:load(“arquivo.RData“)

62

Vários “load”: os objetos com nomes distintos se acumulam

Page 60: Curso Básico de R

Salvar um script “.R” que reproduza os passos feitos.

Vantagem: Além de servir de documentação da criação da base, incorpora alterações na base, se houver.

Modelo híbrido:

Resultados intermediários que requerem muito tempo processamento pode ser salvos em imagem. Ex. agregação de dados de empregados por empresa

63

Page 61: Curso Básico de R

Criando uma coluna em um data.frame:

milsa$idade =

milsa$ano + milsa$mes/12

64

Page 62: Curso Básico de R

65

X Y

6+3+5=14

Page 63: Curso Básico de R

66

X Y

Page 64: Curso Básico de R

67

X Y

Page 65: Curso Básico de R

68

X Y

Page 66: Curso Básico de R

69

X Y

Page 67: Curso Básico de R

Exemplo:

com

70

Page 68: Curso Básico de R

Registros com correspondência :merge(x=milsa,

y=tabInst,by.x="instrucao", by.y="desc“,

all=F)

Todos os registros da tabela X:merge(x=milsa,

y=tabInst,by.x="instrucao", by.y="desc",

all.x=T)

71

Page 69: Curso Básico de R

Todos os registros da tabela y:merge(x=milsa,

y=tabInst,by.x="instrucao", by.y="desc",

all.y=T)

Todos os registros das tabela x e y:merge(x=milsa,

y=tabInst,by.x="instrucao",

by.y="desc", all=T)

72

Page 70: Curso Básico de R

De texto para númerod.f$novaColuna = as.numeric(d.f$coluna)

De número para texto:d.f$novaColuna=as.character(d.f$coluna)

De texto ou número para inteiro:d.f$novaColuna = as.integer(d.f$coluna)

73

Inteiros economizam memória

Page 71: Curso Básico de R

Representação de variáveis qualitativas

Nominais

▪ “casado”, “solteiro”

Ordinais

▪ “alto”, “baixo”

Economizam espaço de memória Tratamento apropriado para este tipo de

variável pelas funções do R

74

Fatores economizam memória

Page 72: Curso Básico de R

Nominal:milsa$fatorcivil=factor(milsa$civil, ordered=F)

$fatorcivil : Factor w/ 2 levels

"casado","solteiro": 2 1 1 2 2 1 2 2 1 2

Ordinal:milsa$fatormes = factor(milsa$mes, ordered=T)

$fatormes : Ord.factor w/ 12 levels

"0"<"1"<"2"<"3"<..: 4 11 6 11 8 1 1 5 11 7 ...

75

É possível definir uma ordem específica: ?factor

Page 73: Curso Básico de R

De fator para texto:d.f$novaColuna =

as.character(d.f$colunaFator)

De fator para número:d.f$novaColuna =

as.numeric(

as.character(d.f$colunaFator))

76

A representação interna de um fator é diferente do seu texto

Page 74: Curso Básico de R

Para:m1 <- matrix(1:12, ncol = 3)

Soma das colunas (um valor para cada coluna):colSums(m1)

[1] 10 26 42

Ouapply(m1,2,sum)

[1] 10 26 42

77

Page 75: Curso Básico de R

Soma das linhas (um valor para cada linha):rowSums(m1)

[1] 15 18 21 24

Ouapply(m1,1,sum)

[1] 15 18 21 24

78

Posso usar qualquer função.

Até próprias

Page 76: Curso Básico de R

aggregate(salario ~ instrucao,

data = milsa, mean)

instrucao salario

1 1oGrau 7.836667

2 2oGrau 11.528333

3 Superior 16.475000

79

Page 77: Curso Básico de R

aggregate(

salario ~ instrucao + civil,

data = milsa, mean)

instrucao civil salario

1 1oGrau casado 7.044000

2 2oGrau casado 12.825000

3 Superior casado 17.783333

4 1oGrau solteiro 8.402857

5 2oGrau solteiro 8.935000

6 Superior solteiro 15.166667

80

Page 78: Curso Básico de R

modelo = lm(

formula = salario ~ ano + instrucao,

data = milsa)

summary(modelo)

81

É uma linha mesmo!!!