Notas de Aulas da Disciplina Introdução ao R
Transcrição
Notas de Aulas da Disciplina Introdução ao R
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE CENTRO DE CIÊNCIAS EXATAS E DA TERRA DEPARTAMENTO DE ESTATÍSTICA Notas de Aulas da Disciplina Introdução ao R Profa Iloneide Carlos de Oliveira Ramos Monitor: Ricardo de Souza Lima Natal, fevereiro de 2011 # Notas de Aulas da Disciplina Introdução ao R – página 1 PROGRAMA DA DISCIPLINA INTRODUÇÃO AO R UNIDADE I: CONCEITOS BÁSICOS 1.1 – Download e instalação 1.2 – Histórico, licença, citação e demonstração 1.3 – O ambiente R 1.3.1 – A área de trabalho e seus objetos 1.3.2 – O editor de código básico do R 1.3.3 – O sistema help 1.3.4 – Conjunto de dados pré-instalados 1.3.5 – Pacotes do R 1.3.6 – As funções attach(), detach() e with() 1.4 – Comandos básicos 1.4.1 – Operações e expressões 1.4.2 – Atribuições UNIDADE II: IMPORTAÇÃO E EXPORTAÇÃO DE DADOS 2.1 – Entrada de dados via teclado 2.2 – Leitura de dados de um arquivo texto 2.3 – Gravação de dados em um arquivo texto 2.4 – Importação de arquivos do Excel 2.5 – Exportação para arquivos do Excel 2.6 – Importação de dados do SPSS, SAS,... UNIDADE III: ELEMENTOS ESSENCIAIS DA LINGUAGEM R 3.1 – Vetores 3.2 – Funções e argumentos 3.3 – Data frames 3.3.1 – Indexação de data frames 3.3.2 – Seleção condicional de observações 3.4 – Matrizes 3.4.1 – Indexação de matrizes 3.5 – Listas 3.5.1 – Indexação de listas 3.6 – Fatores 3.7 – Dados agrupados 3.8 – Posto e ordenação 3.9 – As funções apply(), lapply(), sapply(), tapply() e by() UNIDADE IV: O SUBSISTEMA GRÁFICO 4.1 – A região gráfica 4.2 – A função plot.default() 4.3 – Algumas funções gráficas auxiliares 4.4 – A função par() 4.5 – Alguns gráficos da metodologia estatística UNIDADE V: COMANDOS DE PROGRAMAÇÃO 5.1 – A estrutura if 5.2 – A estrutura for 5.3 – A estrutura while 5.4 – A estrutura repeat 1 # Notas de Aulas da Disciplina Introdução ao R – página 2 UNIDADE VI: PROBABILIDADE 6.1 – Seleção de amostras aleatórias 6.2 – Funções para análise combinatória 6.3 – Distribuições de probabilidade 6.3.1 – Variáveis aleatórias discretas 6.3.2 – Variáveis aleatórias contínuas UNIDADE VII: ANÁLISE DESCRITIVA 7.1 – Estatísticas descritivas simples 7.2 – Representação tabular 7.3 – Representação gráfica 7.3.1 – Representação gráfica para variáveis qualitativas 7.3.2 – Representação gráfica para variáveis quantitativas 7.3.2 – Representação gráfica para variáveis mistas UNIDADE VIII: OPERAÇÕES COM VETORES E MATRIZES 8.1 – Operações com vetores 8.2 – Operações com matrizes 8.3 – Autovalores e autovetores de uma matriz 2 # Notas de Aulas da Disciplina Introdução ao R – página 3 # UNIDADE I: CONCEITOS BÁSICOS # 1.1 – Download e instalação # FAZENDO O DOWNLOAD ATRAVÉS DA PÁGINA DO R # http://www.r-project.org/, acessando-se os seguintes links: # CRAN; http://cran.br.r-project.org/ (Brazil); # Windows (se for o caso); base; R-<versão>.exe. # A instalação pode então ser iniciada. # 1.2 – Histórico, licença, citação e demonstração # Um breve histórico do R pode ser obtido em Pacheco et al. (p. 2-3), # com acesso em 31/07/2008 na seguinte página: # http://marcosfs2006.googlepages.com/Rbasico2005.pdf # USANDO FUNÇÕES RECOMENDADAS NA ABERTURA DO R license() # licença citation() # citação contributors() # contribuidores do R demo() # demonstração demo(graphics, package="graphics") demo(persp, package="graphics") y z # USANDO UM TRECHO (COMANDOS) DA DEMONSTRAÇÃO ACIMA PARA EXECUTAR NO R require(datasets); require(graphics) opar <- par(ask = dev.interactive(orNone = TRUE)) x <- seq(-10, 10, length = 50) y <- x rotsinc <- function(x, y) { sinc <- function(x) { y <- sin(x)/x y[is.na(y)] <- 1; y } 10 * sinc(sqrt(x^2 + y^2)) } sinc.exp<-expression(z==sinc(sqrt(x^2 + y^2))) z <- outer(x, y, rotsinc) par(bg = "white") persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue") x # 1.3 – O ambiente R # 1.3.1 – A área de trabalho e seus objetos # LISTANDO A ÁREA DE TRABALHO ls() # ACRESCENTANDO OBJETOS NA ÁREA DE TRABALHO x = 1 y = 1:10; z = -1 v = w = 3 ls() 3 # Notas de Aulas da Disciplina Introdução ao R – página 4 # VISUALIZANDO O CONTEÚDO DE UM OBJETO DA ÁREA DE TRABALHO x y (t=1.5) # REMOVENDO UM OBJETO DA ÁREA DE TRABALHO rm(v) ls() # REMOVENDO UMA SEQUÊNCIA DE OBJETOS DA ÁREA DE TRABALHO rm(list=ls()[2:4]) ls() # REMOVENDO TODOS OS OBJETOS DA ÁREA DE TRABALHO rm(list = ls()) ls() # REPONDO OBJETOS NA ÁREA DE TRABALHO (nome = "maria") x = 0; y = 0 altura = NA # valor não informado ou não se aplica vazio = NULL # o objeto existe, mas está vazio (logico1=FALSE) (logico2=T) ls() # CLASSIFICANDO ALGUNS DOS DIVERSOS TIPOS DE OBJETOS DO R class(logico) is.logical(logico) class(nome) is.logical(nome) is.character(nome) class(vazio) is.null(vazio) class(x) is.numeric(x) is.character(x) class(cars) is.matrix(cars) is.data.frame(cars) class(3 + 2i) is.complex(3 + 2i) # GRAVANDO A ÁREA DE TRABALHO EM UM ARQUIVO save.image("AreaTrab.RData") # ou acessar: Arquivo; Salvar área... # CARREGANDO A ÁREA DE TRABALHO CONTIDA NUM ARQUIVO load("AreaTrab.RData") # ou acessar: Arquivo; Carregar área ... # GRAVANDO O HISTÓRICO DE UTILIZAÇÃO DOS COMANDOS NUM ARQUIVO savehistory("Hist.Rhistory") # ou acessar: Arquivo; Salvar Hist... # CARREGANDO O HISTÓRICO CONTIDO NUM ARQUIVO loadhistory("Hist.Rhistory") # ou acessar: Arquivo; Carregar His... 4 # Notas de Aulas da Disciplina Introdução ao R – página 5 # 1.3.2 – O editor de código básico do R # EDITANDO E GRAVANDO ARQUIVOS DE COMANDOS DO R # Para criar um arquivo de comandos, acessar: Arquivo; Novo script e # editar os comandos. # Para gravar o arquivo acessar: Arquivo; Salvar Arquivo ou Salvar como. # ABRINDO UM ARQUIVO DE COMANDOS DO R # Para abrir um arquivo de comandos, acessar: Arquivo; Abrir script... # 1.3.3 – O sistema help() help() # COPIANDO ALGUNS EXEMPLOS DA SEÇÃO EXAMPLES DO help() help(lapply) ?lapply # the same help("for") ?"+" # or ?"for", but the quotes are needed help(package="splines") # get help even when package is not loaded data() ?women # list all available data sets # information about data set "women" # PODE-SE USAR, TAMBÉM, O SISTEMA HELP EM Html help.start() # ou acessar: Ajuda; Ajuda Html # A partir do help.start(), pode-se acessar os links: # Packages; graphics; P; plot e, assim, estudar o sistema help(plot). # ESTUDANDO EXEMPLOS DA SEÇÃO EXAMPLES DO help(plot) plot(cars) lines(lowess(cars)) plot(sin, -2*pi, 3*pi) curve(sin, -2*pi, 3*pi) # ou, igualmente: # ESTUDANDO ALGUMAS FUNÇÕES IMPORTANTES USANDO O HELP ?dnorm ?plot.default # PROCURANDO UM TEXTO NO SISTEMA HELP help.search("weighted mean") # o mesmo que: ??"weighted mean" # para versões atuais ??"weigted mean" # mesmo incorreto o texto é localizado help.search("histogram") help.search("pie 3d") # com o pacote plotrix instalado # PROCURANDO POR NOMES DE OBJETOS EM PACOTES INSTALADOS apropos("^ca") # objetos que começam com "ca" apropos("^.$") # objetos com um caracter apropos("^..?$") # objetos com dois caracteres apropos("^.{2,4}$") # objetos com 2, 3 ou 4 caracteres apropos("^.{30,}$") # objetos com 30 ou mais caracteres 5 # Notas de Aulas da Disciplina Introdução ao R – página 6 1.3.4 – Conjunto de dados pré-instalados # ACESSANDO OS DADOS PRÉ-INSTALADOS USANDO O MOUSE # A partir do help.start(), pode-se acessar os links: Packages; datasets; # C; cars e, assim, obter informações a respeito dos dados ali contidos. # ACESSANDO OS DADOS PRÉ-INSTALADOS USANDO AS FUNÇÕES DO R data() cars ls() data(cars) # carrega o objeto cars para a área de trabalho ls() # DETERMINANDO A CLASSE DE OBJETOS PRÉ-INSTALADOS class(cars) class(HairEyeColor) # DENOMINANDO COLUNAS DE OBJETOS PRÉ-INSTALADOS names(cars) # visto que se trata de data frame, há denominação names(HairEyeColor) # visto que se trata de tabela, não há denominação # LISTANDO TODOS OS DADOS DISPONÍVEIS (PACOTES CARREGADOS PREVIAMENTE) data(package = .packages(all.available = TRUE)) # 1.3.5 – Pacotes do R # A partir do help.start(), pode-se visualizar as funções contidas # em um pacote, acessando os links (mouse): Packages; graphics # VISUALIZANDO A LISTA DE PACOTES DISPONÍVEIS # OBS: inclui os objetos anexados com o uso do attach() – ver # 1.3.6 search() # CARREGANDO UM PACOTE QUE NÃO ESTÁ DISPONÍVEL library(stats4) # ou acessar (mouse): Pacotes; Carregar pacote... search() # INSTALANDO UM PACOTE (SE A INTERNET ESTIVER DISPONÍVEL) utils:::menuInstallPkgs() # ou acessar: Pacotes; Instalar pacote... # Em seguida, instalar o pacote RODBC que será útil futuramente # BAIXANDO PACOTES (SE A INTERNET ESTIVER DISPONÍVEL) EM ARQUIVOS .ZIP download.packages(c("RODBC","plotrix"),"C:/R") # CARREGANDO O PACOTE RODBC library(RODBC) # ou acessar (mouse): Pacotes; Carregar pacote... search() # VISUALIZANDO INFORMAÇÕES E FUNÇÕES DO PACOTE RODBC: help(package="RODBC") # # # # EXERCÍCIO Inslate, carregue, visualize informações e funções e use o help do pacote plotrix. Execute comandos da Seção Examples de uma das funções contidas no pacote. 6 # Notas de Aulas da Disciplina Introdução ao R – página 7 # 1.3.6 – As funções attach(), detach() e with() # USANDO AS FUNÇÕES attach(), detach() e with() class(cars); names(cars) speed # Erro: objeto "speed" não encontrado ls(); search() attach(cars) # só deve ser usado com objetos do tipo data.frame search() speed detach(cars) search() speed # Erro: objeto "speed" não encontrado with(cars, mean(speed)) # 1.4 – Comandos básicos # 1.4.1 – Operações e expressões 7*8 3+4*2 5+(-1) (2+6)*(5+4) 5*2-1,5/3 # Erro: erro de sintaxe em " 5*2-1," 5*2-1.5/3 exp(-1) 3%%2 # resto da divisão de 3 por 2 sin(pi/2) asin(1) abs(-3) log(10) log10(10) sqrt(16) 3i * 2i 9 == 3 # expressão lógica 3i * 2i == -6 3i * 2i = -6 # Erro em (0+3i) * (0+2i) = -6 : # destino da atribuição expande para um objeto fora da linguagem 9 > 3 factorial(3) choose(10,2) # combinação de 10 elementos 2 a 2 dada por factorial(10)/(factorial(2)*factorial(10-2)) n=10; k=2 comb=expression(n,k,factorial(n)/(factorial(k)*factorial(n-k))) eval(comb) class(comb) n=10; k=3 eval(comb) (1/sqrt(2*pi))*exp(-(2.5)^2/2) dnorm(2.5) dnorm(-2.5) # ou: 7 # Notas de Aulas da Disciplina Introdução ao R – página 8 # 1.4.2 – Atribuições e nomes de objetos # USANDO VÁRIAS FORMAS DE ATRIBUIÇÃO DE OBJETOS x <- 2 2 -> x x = 2; x # o mesmo que: (x = 2) x = z = 2 x z x <- z <- 4 x -> z -> 4 # erro y=x^2+3*x; y # o mesmo que: (y=x^2+3*x) # VERIFICANDO QUE LETRAS MAIÚSCULAS E MINÚSCULAS DIFERENCIAM UM OBJETO X # Erro: objeto "X" não encontrado x # VERIFICANDO QUE NÃO PODE HAVER ESPAÇOS NO NOME DE UM OBJETO media altura=168.33 # Erro: erro de sintaxe em "media altura" media.altura=168.33 # VERIFICANDO QUE O NOME DE UM OBJETO NÃO PODE INICIAR COM UM ALGARISMO 3s=5 # Erro: erro de sintaxe em "3s" EXERCÍCIOS DA UNIDADE I # 1) Use help.search("island") para descobrir como obter o resultado # apresentado no gráfico abaixo e interprete seus resultados. # 2) Descubra como calcular a integral de x2 entre 0 e 1 e informe o # resultado no exercício 3). # 3) Executte: demo(plotmath, package="graphics") e descubra como obter # o resultado apresentado no quadro abaixo. # 4) Calcule a idade média dos estudantes da Universidade de Adelaide # informadas no data frame denominado "survey". # 5) Execute os exemplos da função "grid.polygon" e personalize # alguns deles. islands data: log10(area) (log10(sq. miles)) Asia Africa North America South America Antarctica Europe Australia Greenland New Guinea Borneo Madagascar Baffin Sumatra Honshu Britain Victoria Ellesmere Celebes New Zealand (S) Java New Zealand (N) Newfoundland Cuba Luzon Iceland Mindanao Ireland Novaya Zemlya Hokkaido Hispaniola Sakhalin Moluccas Tasmania Celon Banks Devon Tierra del Fuego Southampton Melville Axel Heiberg Spitsbergen New Britain Taiwan Kyushu Timor Prince of Wales Hainan Vancouver 1.0 1.5 2.0 2.5 3.0 3.5 4.0 8 # Notas de Aulas da Disciplina Introdução ao R – página 9 # UNIDADE II: IMPORTAÇÃO E EXPORTAÇÃO DE DADOS # 2.1 – Entrada de dados via teclado # USANDO A FUNÇÃO c() PARA CRIAR UM VETOR DE DADOS (vet1 = c(10, 12, 13, 9, 11, 8, 7)) class(vet1) # USANDO A FUNÇÃO scan() PARA CRIAR UM VETOR DE DADOS vet2 = scan() # digitar dados (tamanho vet1) e <Enter> para finalizar # Caso o vetor vet2 possua tamanho diferente de vet1 ocorrerá a seguir: # Erro em data.frame(x = vet1, y = vet2 + 1) : # argumentos implicam em número de linhas conflitantes: 7, 0 # USANDO A FUNÇÃO data.frame() PARA CRIAR UMA TABELA DE DADOS (DATA FRAME) dados1 = data.frame(x=vet1, y=vet2+1) dados1 # EDITANDO UM DATA FRAME edit(dados1) dados1 # os dados não se alteram # OBS: Para alterá-los usar atribuição dados1 = edit(dados1) dados1 # EDITANDO E ALTERANDO UM DATA FRAME fix(dados1) # CRIANDO UM DATA FRAME VAZIO E USANDO A FUNÇÃO fix() PARA INSERIR DADOS dados2 = data.frame() fix(dados2) dados2 # 2.2 – Leitura de dados de um arquivo texto # LENDO UM ARQUIVO TEXTO COM DADOS SEPARADOS POR UM ESPAÇO dados3 = read.table(file="texto.txt") dados3 # LENDO O ARQUIVO TEXTO COM TÍTULOS DAS VARIÁVEIS (NA 1A LINHA) dados3 = read.table(file="texto.txt", header=T) dados3 # LENDO UM ARQUIVO GRAVADO COMO TIPO CSV (TEXTO) A PARTIR DO EXCEL alunos=read.table(file="DadosAlunos.csv", header=T, sep=";") alunos # LENDO O ARQUIVO TEXTO, USANDO COMO SEPARADOR A TABULAÇÃO dados4=read.table(file="texto.txt", header=T, sep="\t") dados4 # 2.3 – Gravação de dados em um arquivo texto write.table(dados2, file="dados2.txt", quote=F, row.names=F) 9 # Notas de Aulas da Disciplina Introdução ao R – página 10 # 2.4 – Importação de arquivos do Excel # IMPORTANDO UM ARQUIVO DO EXCEL library(RODBC) # Caso haja erro, o pacote RODBC deve ser instalado conexao=odbcConnectExcel("DadosAlunos.xls") conexao # apresenta dados da conexão sqlTables(conexao) # apresenta dados da(s) planilha(s) alunos = sqlFetch(conexao, "Plan1") close(conexao) # é importante fechar a conexão para abrir o arq. no Excel alunos class(alunos) str(alunos) # 2.5 – Exportação para arquivos do Excel # EXPORTANDO PARA UMA NOVA PLANILHA (CONEXÃO ABERTA COM readOnly = F) library(RODBC) con=odbcConnectExcel("Teste.xls", readOnly = F) # cria arq. se não existe sqlSave(con, data.frame(x=1:20), "MinhaPlan", rownames = FALSE) close(con) # fecha a conexão # 2.6 – Importação de dados do SPSS, SAS,... library(foreign) ?read.spss ?read.ssd # Caso haja erro, o pacote deve ser instalado # importa arquivo do SPSS # importa arquivo do SAS # EXERCÍCIOS DA UNIDADE II # 1) Importe para o R os dados dos alunos que cursaram Introdução ao R # nos últimos anos, a partir do arquivo .xls fornecido, usando as # as seguintes funções: # a) sqlFetch(); # b) read.table(), com o arquivo texto separado por tabulações; # c) read.csv(). Dica: Use o help para descobrir como usá-la. # 2) Use help.search() (ou ??) para descobrir como usar uma função que # deleta arquivos em um diretório. Use essa função para deletar o # arquivo Teste.xls criado no item 2.5 10 # Notas de Aulas da Disciplina Introdução ao R – página 11 # UNIDADE III: ELEMENTOS ESSENCIAIS DA LINGUAGEM R # 3.1 – Vetores # CRIANDO VÁRIOS TIPOS DE VETORES (nomes = c("pedro", "maria", "lucas")) class(nomes) (x = c(10.3, 2, 0.2, -2, -7.9)) class(x) (misto = c(x, nomes)) class(misto) (z = c(0.1+0.9i,0.2-0.7i)) class(z) (logico = c(T,F,F,T)) # ou: logico = c(TRUE,FALSE,FALSE,TRUE) # CRIANDO UM VETOR LÓGICO A PARTIR DE UMA EXPRESSÃO LÓGICA x >= 2 nomes != "maria" # USANDO FUNÇÕES ESPECIAIS PARA CRIAÇÃO DE VETORES 1:5 seq(1,10,2) # cria uma sequência de 1 a 10 com intervalo igual a 2 seq(0,6,.2) seq(1,9,3) seq(9,1,3) # Erro em seq.default(9,1,3) : sinal errado no argumento 'by' rep(0,10) # repete 0 dez vezes rep(c(1,2,3), 2) rep(c(1,2,3), c(2,3,4)) rep(c(-1,0,1), c(1,2,3)) rep(1:2, rep(4,2)) # USANDO CONSTANTES ESPECIAIS PARA CRIAÇÃO DE VETORES LETTERS[1:4] letters[1:5] month.abb month.name # USANDO AS FUNÇÕES format E ISOdate PARA GERAR VETORES REFERENTES A DATA ?format.POSIXct (meses=format(ISOdate(2000, 1:12, 1), "%b")) (MESES=format(ISOdate(2000, 1:12, 1), "%B")) (dias.semana=format(ISOdate(2000, 1, 2:8), "%a")) (DIAS.SEMANA=format(ISOdate(2000, 1, 2:8), "%A")) # REALIZANDO OPERAÇÕES COM VETORES peso = c(60,70,80) altura = c(1.60, 1.70, 1.80) peso/altura^2 peso+5 peso+c(2,3) # executa a expressão, mas gera a seguinte advertência # Warning message: # objeto de comprimento maior # não é múltiplo do objeto de comprimento menor in: peso + c(2, 3) peso+c(2,3,2) 11 # Notas de Aulas da Disciplina Introdução ao R – página 12 # USANDO OPERAÇÃO COM VETORES PARA CALCULAR A MÉDIA media = sum(peso)/length(peso) # ou: media=mean(peso) media # CALCULANDO O VETOR DE DESVIOS EM TORNO DA MÉDIA peso - media # CALCULANDO A SOMA DOS QUADRADOS DOS DESVIOS EM TORNO DA MÉDIA sum((peso - media)^2) # CALCULANDO O DESVIO PADRÃO s= sqrt (sum((peso - media)^2)/(length(peso) - 1)) s # ou: s=sd(peso) # EXERCÍCIO # Calcule o coeficiente de correlação, usando os vetores peso e altura # e confira o resultado com o da função cor(). # 3.2 – Funções e argumentos # USANDO A FUNÇÃO plot() COM SEUS ARGUMENTOS DEFAULTS (PADRÕES) ?plot.default y=c(1,4,9,3,8) plot.default(y) # ou: plot(y) x=c(5,-1,0,2,3) plot(x, y) plot(x, y, "h") # ou: plot(x, y, type="h") plot(x, y, "h", lwd=10) # COMETENDO UM ERRO plot(x, y, h) # Erro em plot.xy(xy, type, ...) : objeto "h" não encontrado h="h" plot(x, y, h) # ou: plot(x, y, "h") # USANDO A FUNÇÃO args() E APRESENTANDO OUTRO EXEMPLO args(dnorm) dnorm(2) # atribui argumentos defaults aos não definidos. Equivale a: dnorm(2, mean=0, sd=1) # ou: dnorm(2,0,1) # ou, ainda, a: dnorm(x, sd=1, mean=0) # difere de: dnorm(2,1,0) # CRIANDO UMA FUNÇÃO PARA O CÁLCULO DO INVERSO DA RAIZ QUADRADA mf = function (x) { return(1/sqrt(x)) } # TESTANDO A FUNÇÃO CRIADA mf(16) 1/sqrt(16) # CRIANDO UMA FUNÇÃO, ATRIBUINDO UM ARGUMENTO DEFAULT mf = function (x=25) { return(1/sqrt(x)) } 12 # Notas de Aulas da Disciplina Introdução ao R – página 13 # TESTANDO A FUNÇÃO mf mf() # ou: mf(25) # ou ainda: mf(x=25) mf(16) # CRIANDO UMA FUNÇÃO COM DOIS ARGUMENTOS, EQUIVALENTE A dnorm() dnor=function(x, media=0, dp=1) { nor=(1/(sqrt(2*pi)*dp))*exp(-(x-media)^2/(2*dp^2)) return(nor) } # TESTANDO A FUNÇÃO CRIADA dnor(2,1,.3) dnorm(2,1,.3) # teste válido! # COMETENDO ERROS dnor(2,mean=0,sd=1) # Erro em dnor(2, mean=0, sd=1) : unused argument(s) (mean=0, sd=1) # CORRIGINDO O ERRO dnor(2,media=0,dp=1) class(dnor) # USANDO FUNÇÕES DENTRO DE FUNÇÕES (FUNÇÕES ANINHADAS) plot(seq(-4,4,.1), dnor(seq(-4,4,.1)), type="l") # EXERCÍCIO RESOLVIDO # Crie uma função para calcular o desvio padrão. Teste sua função. # SOLUÇÃO dp = function(x){ s=sqrt (sum((x - mean(x))^2)/(length(x) - 1)) return(s) } # TESTANDO A FUNÇÃO dp(c(5,3,6,8)) sd(c(5,3,6,8)) # # # # # # EXERCÍCIOS 1) Crie uma função para calcular a média. Teste-a, comparando com a função mean(). 2) Crie uma função com dois argumentos para calcular porcentagens. 3) Crie uma função para calcular o coeficiente de correlação. Teste-a, comparando com a função cor(). # 3.3 – Data frames # USANDO A FUNÇÃO data.frame() SEM DENOMINAR AS COLUNAS vet1 = vet2 = 1:7 dados1 = data.frame(vet1, vet2+1, check.names = F) # não deve ser usado! names(dados1) dados1$vet2 + 1 # o "+" usado no nome da coluna confudiu o resultado dados1$"vet2 + 1" # aspas devem ser usadas para obter o resultado correto dados1 = data.frame(vet1, vet2+1) # usado o default: check.names=T names(dados1) dados1$vet2...1 13 # Notas de Aulas da Disciplina Introdução ao R – página 14 # USANDO A FUNÇÃO data.frame() PARA CRIAÇÃO DE DATA FRAMES dados1 = data.frame(x=vet1, y=vet2+1) dados1 # USANDO A FUNÇÃO data.frame(), DENOMINANDO LINHAS E COLUNAS (dados1 = data.frame(X=vet1, Y=vet2+1, row.names=LETTERS[1:7])) # melhor! # ACRESCENTANDO UMA COLUNA AO DATA FRAME dados1 (dados2 = data.frame(dados1, Z=vet1*2)) # ou (dados2 = cbind(dados1, Z=vet1*2)) # ACRESCENTANDO LINHAS AO DATA FRAME dados1 (dados2 = rbind(dados1, c(10,5))) (dados2 = rbind(dados1, dados1)) # APRESENTANDO A DENOMINAÇÃO DE LINHAS E COLUNAS rownames(dados1) colnames(dados1) dimnames(dados1) # EXERCÍCIO # Acrescente a variável IMC aos dados da turma (data frame alunos), # sabendo que IMC=peso/altura^2 (altura medida em metros). # 3.3.1 – Indexação de data frames # USANDO "[]" E "$" dados1[2,2] dados1[,2] dados1[1,] dados1[1:3,] dados1[c(1,3,5),] dados1[c(1,3,5),2] dados1[c(1,3,3,5),2] dados1[rep(1:7,2),] # ou: rbind(dados1, dados1) dados1[-c(1,3,5),2] dados1[c(T,T,T,F,F,F,F),2] dados1[c(T,F),2] dados1$X dados1$Y dados1$X[2] # ALTERANDO DADOS dados1 dados1$X[2]=19 dados1 # ou: dados1[2,1]=19 # USANDO VÁRIAS FORMAS DE APRESENTAÇÃO DOS DADOS DE UM DATA FRAME names(alunos) alunos[,2] alunos$Idade alunos$"Idade" alunos$Ida alunos$"I" alunos$Pes # há outras colunas iniciando por "Pes" 14 # Notas de Aulas da Disciplina Introdução ao R – página 15 # 3.3.2 – Seleção condicional de observações dados1 dados1[dados1$Y==7,] # ou: dados1[dados1[,2]==7,] dados1[dados1$Y==7|dados1$Y==6,] dados1[dados1$Y==7|dados1$Y==6,1] dados1$Y[dados1$Y>6] dados1$Y>6 dados1$X<=10 dados1$Y>6 & dados1$X<=10 dados1$Y[dados1$Y>6 & dados1$X<=10] dados1$Y<=6 dados1$Y>=10 dados1$Y<=6|dados1$Y>=10 dados1$Y[dados1$Y<=6 | dados1$Y>=10] dados1$Y[!(dados1$Y>7)] dados1$X[!(dados1$Y>7)] dados1$X[dados1$Y==7] # EXERCÍCIO # Refaça os comandos acima usando [] em substituição a $ # SELEÇÃO CONDICIONAL USANDO A FUNÇÃO attach() attach(dados1) X; Y Y[Y>6] Y>6 Y[Y<=6 | Y>=10] X[dados1$Y==7] # # # # # # # # # EXERCÍCIOS Usando os dados dos alunos de Estatística: 1) Apresente o vetor de alturas dos alunos do sexo masculino. 2) Liste a variável Sexo para alunos com altura entre 150cm e 160cm. 3) Apresente a idade dos 50 primeiros alunos do banco de dados, usando duas formas diferentes. 4) Calcule a idade média das alunas. 5) Apresente o vetor lógico para alunas menores de 20 anos. 6) Usando o attach(), liste a idade das alunas cujo lazer é praia. # USANDO AS FUNÇÕES subset() E transform() subset(dados1, dados1$Y>=7) # ou: dados1[dados1$Y>=7,] transform(dados1,log.Y=log(dados1$Y)) # ou: data.frame(dados1,log.Y=log(dados1$Y)) # 3.4 – Matrizes # USANDO A FUNÇÃO matrix() PARA CRIAR MATRIZES... A = matrix(1:20, nrow=4, byrow=T) # ...organizando por linha B = matrix(1:20, nrow=4, byrow=F) # ...organizando por coluna # USANDO AS FUNÇÕES rownames(), colnames()... rownames(A)=LETTERS[1:4] # ...para denominar linhas colnames(A)=c("X1","X2","X3","X4","X5") # ...para denominar colunas A 15 # Notas de Aulas da Disciplina Introdução ao R – página 16 # # # # EXERCÍCIO Construa uma matriz igual à matriz A acima, usando o argumento dimnames da função matrix(). Para conseguir ajuda, use o último exemplo do help(matrix). # USANDO AS FUNÇÕES cbind() E rbind() PARA CRIAR MATRIZES cbind(1:5,6:10,11:15) # concatenando por coluna cbind(X1=1:5,X2=6:10,X3=11:15) # denominando as colunas rbind(1:5,6:10,11:15) # concatenando por linha rbind(A=1:5,B=6:10,C=11:15) # denominando as linhas # USANDO AS FUNÇÕES dim() E t() dim(A) t(A) # 3.4.1 – Indexação de matrizes A A[2,2] A[,2] A[1,] A[,2]==7 A[A[,2]==7,] A[A[,2]==7,1] A[A[,2]==7,2:3] A[A[,2]>=7,c(2,4)] A[A[,2]>=7,rep(2,4)] A[4,]=rep(20,5) A # TRANSFORMANDO UMA MATRIZ EM DATA FRAME (dad=data.frame(A)) # Observação dad$X2 A$X2 class(dad) class(A) # # # # # # # # # # # # # # # # # "$" pode ser usado em data frame... # ...mas não em matriz EXERCÍCIOS 1) Crie uma matriz numérica qualquer de ordem 10x2: a) usando a função matrix(); b) usando a função rbind(); c) usando a função cbind(). 2) Atribua nomes às duas colunas da matriz. 3) Use "[]" para extrair os seguintes subconjuntos da matriz criada: a) a primeira coluna completa; b) a segunda linha completa; c) o elemento situado na 10ª linha e 2ª coluna; d) elemento(s) da coluna 1 maiores que um certo valor. e) elemento(s) da coluna 2 entre dois valores específicos. 4) Transforme a matriz criada em um data frame, estudando a função "as.data.frame". 5) Use "$" no data frame criado no exercício 4) para extrair os subconjuntos apresentados em 3). 16 # Notas de Aulas da Disciplina Introdução ao R – página 17 # 3.5 – Listas # CRIANDO LISTAS (lista1 = list(1:5, 1:8)) class(lista1) nomes = c("pedro", "maria", "lucas") y = 1:10 (lista2 = list(Nomes=nomes, Y=y)) names(lista2) (lista3=list(lista2, Matriz=A)) names(lista3) # 3.5.1 – Indexação de listas # USANDO "[...]" EM LISTAS lista1[[1]] # ou: lista1[1] lista1[[1]][3] # é diferente de: lista1[1][3] lista2[[2]] lista2[[2]][4] lista3[[2]][2,2] lista3[[1]][[1]][3] # USANDO "$" EM LISTAS lista2$Y lista2$Y[4] lista3$Matriz lista3[[1]]$Nomes[3] # # # # ou: lista2[[2]] ou: lista2[[2]][4] é diferente de: lista3$A ou: lista3[[1]][[1]][3] # 3.6 – Fatores # VERIFICANDO O TIPO DE VARIÁVEL DO DATA FRAME alunos attach(alunos) class(Sexo) is.factor(Sexo) summary(Sexo) class(Idade) summary(Idade) is.factor(Idade) # TRANSFORMANDO A VARIÁVEL IDADE EM FAIXAS DE IDADE alunos$Faixa.etaria[Idade<20]=1 alunos$Faixa.etaria[Idade>=20&Idade<30]=2 alunos$Faixa.etaria[Idade>=30]=3 class(alunos$Faixa.etaria) summary(alunos$Faixa.etaria) is.factor(alunos$Faixa.etaria) # TRANSFORMANDO A COLUNA Faixa.etaria DE NUMÉRICA PARA FATOR alunos$Faixa.etaria=factor(alunos$Faixa.etaria,levels=1:3) # ou: alunos$Faixa.etaria=as.factor(alunos$Faixa.etaria) class(alunos$Faixa.etaria) summary(alunos$Faixa.etaria) is.factor(alunos$Faixa.etaria) 17 # Notas de Aulas da Disciplina Introdução ao R – página 18 # DENOMINANDO AS FAIXAS ETÁRIAS (NÍVEIS DO FATOR) alunos$Faixa.etaria levels(alunos$Faixa.etaria)=c("< 20 anos","20 a 30 anos",">= 30 anos") alunos$Faixa.etaria is.factor(alunos$Faixa.etaria) # TRANSFORMANDO EM FATOR E, AO MESMO TEMPO, DENOMINANDO OS NÍVEIS factor(alunos$Faixa.etaria,labels=c("< 20 anos","20 a 30 anos", ">= 30 anos")) # EXERCÍCIO # Denomine os níveis da variável categórica (fator) Sexo como: # Masculino para M e Feminino para F. # 3.7 – Dados agrupados # USANDO A FUNÇÃO split() PARA AGRUPAR DADOS EM UMA LISTA attach(alunos) idade.sexo=split(Idade,Sexo) idade.sexo class(idade.sexo) mode(idade.sexo) idade.sexo$F idade.sexo$M # BOXPLOT USANDO DADOS AGRUPADOS boxplot(idade.sexo) # ou: boxplot(Idade~Sexo) #ou: plot(Idade~Sexo) # 3.8 – Posto e ordenação # ORDENANDO DADOS DE FORMA CRESCENTE E DECRESCENTE sort(c(22,24,25,21,27,26)) sort(c(22,24,25,21,27,26), decreasing = TRUE) # APRESENTANDO OS DADOS EM ORDEM INVERSA rev(c(22,24,25,21,27,26)) # IDENTIFICANDO A POSIÇÃO (O POSTO) DOS ELEMENTOS EM UM VETOR rank(c(22,24,25,21,27,26)) # resulta em: 22 é o 2º menor elemento… rank(c(22,22,25,21,27,26)) # IDENTIFICANDO A POSIÇÃO PARA ORDENAÇÃO DOS ELEMENTOS DE UM VETOR order(c(22,24,25,21,27,26)) # resulta em: o menor elemento é o 4º… # USANDO A FUNÇÃO order() PARA ORDENAR VETORES ord=order(c(22,24,25,21,27,26)) c(22,24,25,21,27,26)[ord] # ou: c(22,24,25,21,27,26)[order(c(22,24,25,21,27,26))] posto=rank(c(22,24,25,21,27,26)) # a função rank() não é apropriada: c(22,24,25,21,27,26)[posto] # APRESENTANDO DADOS DE UM VETOR CONFORME A ORDENAÇÃO DE OUTRO order(alunos$Idade) alunos$Idade[order(alunos$Idade)] alunos$Peso[order(alunos$Idade)] 18 # Notas de Aulas da Disciplina Introdução ao R – página 19 # ORDENANDO UM VETOR SEGUINDO A ORDEM HIERÁRQUICA DE DOIS VETORES ord.idade.peso=order(alunos$Idade,alunos$Peso) alunos$Idade[ord.idade.peso] alunos$Peso[ord.idade.peso] # 3.9 – As funções apply(), lapply(), sapply(), tapply() e by() # CALCULANDO MÉDIAS POR LINHA E POR COLUNA DE UMA MATRIZ notas.2008.1=cbind(Aval1=c(7.8,9.0,7.8,5.2,6.9,9.8,4.2), Aval2=c(6.2,6.8,8.7,2.5,5.6,8.6,6.4), Aval3=c(7.8,6.0,8.9,5.0,6.5,9.2,4.4)) notas.2008.1 apply(notas.2008.1,2,mean) # média por avaliação apply(notas.2008.1,1,mean) # média por aluno class(notas.2008.1) # USANDO ARGUMENTOS NA FUNÇÃO APLICADA POR apply() apply(notas.2008.1,2,quantile,prob=c(.1,.9)) # percentis 10 e 90 # TRANSFORMANDO A MATRIZ DE NOTAS EM LISTA E USANDO A FUNÇÃO lapply() (lista.not=list(notas.2008.1[,1],notas.2008.1[,2],notas.2008.1[,3])) lapply(lista.not,mean) class(lista.not) # USANDO A FUNÇÃO sapply() sapply(lista.not,mean) # mesmo resultado de lapply() mais atraente names(lista.not)=c("A1","A2","A3") # melhor ainda com denominações: sapply(lista.not,mean) # USANDO A FUNÇÃO tapply() tapply(alunos$Idade,alunos$Sexo,mean) # compare com EXERC.1) anterior class(alunos$Idade) class(alunos$Sexo) # USANDO A FUNÇÃO by() by(alunos[,2:4],alunos$Sexo, summary) # ADAPTANDO O ÚLTIMO EXEMPLO DO help(by) PARA NOSSOS DADOS attach(alunos) tmp = by(alunos, Sexo, function(x) lm(Peso ~ Altura, data = x)) sapply(tmp, coef) # fornece os coeficientes das retas # Entendendo os resultados obtidos lm(Peso[Sexo=="F"]~Altura[Sexo=="F"]) # regressão simples (Sexo==F) lm(Peso[Sexo=="M"]~Altura[Sexo=="M"]) # regressão simples (Sexo==M) # Estudando para explorar outros resultados tmp class(tmp) tmp$F class(tmp$F) names(tmp$F) # nomes para obtenção de outros resultados sapply(tmp, fitted.values) # fornece os valores ajustados por Sexo sapply(tmp, residuals) # fornece os resíduos por Sexo detach(alunos) 19 # Notas de Aulas da Disciplina Introdução ao R – página 20 # EXEMPLO ADAPTADO DE TORGO (2006): Torgo-ProgrammingIntro.pdf, p.51 attach(alunos) sapply(Peso, function(y) (y - mean(Peso))/sd(Peso)) # Ou de maneira mais simples (Peso - mean(Peso))/sd(Peso) # EXERCÍCIOS DA UNIDADE III # 1) Estude as seguintes linhas de comandos: # > A=matrix(c(2,3,6,2,3,4), ncol = 2, # + dimnames = list(c("Cas", "Solt", "Outro"), c("M", "F"))) # > DF=as.data.frame(as.table(A)) # > colnames(DF)=c("EstadoCivil","Sexo","Freq") # Adapte esses comandos para criar um data frame com as variáveis # "TipoSanguineo" e "FatorRH" com as frequências entre parênteses # dadas a seguir: # O+ (38); O- (7); A+ (34); A- (6); B+ (9); B- (2); AB+ (3); AB- (1) # 2) Crie uma função para resolver o exercício 1), usando 4 argumentos # denominados "Frequencia", "num.col", "Niveis.Var", "Var". # 3) Descubra como ordenar dados de forma decrescente, usando a função # order(). # 4) Ordene o data frame alunos segundo a idade e a altura dos alunos, # guardando todo o data frame ordenado em um objeto. # 5) Atribua nomes fictícios aos alunos e calcule a média de cada um. # 6) Considerando a matrix "notas.2008.1" criada no item 3.9, calcule a # média parcial (sistema UFRN) de cada aluno. # 7) Considerando a matriz referida no exercício 6), calcule a média por # avaliação, arredondando os resultados para duas casas decimais. # Dica: use ?round. # 8) Sem executar a linha de comando, explique o que será obtido com: # lapply(split(alunos$Idade,alunos$Sexo), mean) # 9) Usando lapply(), calcule o desvio padrão em cada avaliação. # 10) Usando as funções tapply() e data.frame(), execute comandos # aplicados ao data frame alunos para obter resultado semelhante a: # > Idade.média DP # > F 22.29630 4.046031 # > M 25.35714 8.675228 20 # Notas de Aulas da Disciplina Introdução ao R – página 21 # UNIDADE IV: O SUBSISTEMA GRÁFICO # 4.1 – A região gráfica # USANDO VÁRIAS JANELAS GRÁFICAS x11() plot(0:10,0:10) win.graph() # ou: x11() ou ainda: X11() plot(0:10,(0:10)^2) dev.set(2) # Estudar ?dev.set e funções afins plot(0:20,0:20) dev.next() dev.set(dev.next()) plot(0:50,0:50) dev.set(dev.prev()) plot(0:50,(0:50)^2) 40 20 30 x (x) 0.0 -1.0 10 -0.5 x (x) 0.5 50 1.0 # USANDO UMA MESMA JANELA GRÁFICA PARA ELABORAR VÁRIOS GRÁFICOS par(mfrow=c(2,2)) plot(sin, pi, 8*pi) # A função plot() é muito versátil: plot(function(x) 2*x-3*sin(x), pi, 8*pi) # desenha qualquer função attach(alunos) plot(Altura,Peso) # produz Diagrama de Dispersão plot(Peso~Sexo) # produz Box-plot segundo níveis de um fator # Veja o resultado: 5 10 15 20 25 5 10 160 170 180 190 40 50 60 70 80 90 100 Peso 150 20 x 40 50 60 70 80 90 100 Peso x 15 F Altura M Sexo 21 25 # Notas de Aulas da Disciplina Introdução ao R – página 22 # 4.2 – A função plot.default() # USANDO A FUNÇÃO plot.default() EQUIVALENTE A plot() plot(0:10, 0:10, type="l", main="Título principal", sub="Subtítulo", xlab="Título do eixo x", ylab="Título do eixo y") plot(0:10, 0:10, type="s", col=2, lwd=3, lty=3, xlim=c(10,0)) plot(0:10, 0:10, col="blue", ylim=c(10,0), cex=2, pch=16, axes=F) # 4.3 – Algumas funções gráficas auxiliares # USANDO A FUNÇÃO text() plot(0:10, 0:10) text(2, 2, "Texto na coordenada (2, 2)") plot(0:10, 0:10) text(2, "Texto") text(1, 2, "Texto") # igual a: plot(0:10, 0:10) text(1:6, "Texto") plot(0:10,0:10, type = "n") text(sqrt(1:10)) # USANDO A FUNÇÃO abline() - RETAS HORIZONTAL E VERTICAL abline(v=5, h=sqrt(5)) # USANDO A FUNÇÃO abline() - RETA Y=A+BX COM A=0 E B=1 abline(0,1) # é igual a abline(a=0,b=1), mas difere de: abline(v=0,h=1) # USANDO A FUNÇÃO grid() plot(cars) grid(10,10, col="red") # USANDO A FUNÇÃO arrows() plot(0:10) arrows(5, 5, 4, 4, code=2) arrows(2, 5, 3, 4, code=3, angle=90 , length=0.1) # USANDO A FUNÇÃO segments() plot(0:10) segments(3, 7, 5, 4, lwd=3) # USANDO A FUNÇÃO lines() plot(0:10,(0:10)^2) lines(0:10,(0:10)^2) # USANDO A FUNÇÃO mtext() mtext("Lado3 / at=2", at=2) mtext("Lado1 / linha=2", side=1, line=2) mtext("Lado2 / linha=2,5", line=2.5, side=2, cex=.6) mtext("Lado=4 / linha=-1 / fonte=2", font=2, side=4, line=-1) 22 # Notas de Aulas da Disciplina Introdução ao R – página 23 # USANDO OUTRAS FUNÇÕES GRÁFICAS symbols(1:10, 1:10, squares=seq(0.1,1,0.1), inches=F) symbols(1:10, 1:10, stars=matrix(rep(.5,50),ncol=5), inches=F) colors() colors()[1:10] # CONSTRUINDO UM GRÁFICO POR PARTES plot(0:10, type="n", xlab="", ylab="", axes=F) axis(1) # OBS: axis é função; axes é arg. de plot() axis(2, at=seq(0, 10, 3)) axis(side=4, at=seq(0, 10, 1)) points(5, 5, pch=16) points(sample(1:10), sample(1:10)) lines(1:10, sample(1:10)) box() # CRIANDO DESENHOS plot(1:10,1:10,type="n",main="Casinha",axes=F,xlab="",ylab="") rect(5,1,9,5,col=" steelblue2") rect(6.5,1,7.5,2.5,col="tomato3") segments(1,1,5,1) segments(9,1,10,1) polygon(c(5,7,9),c(5,7,5),col="brown",density= 10,angle=45,lwd=2) polygon(c(5,7,9),c(5,7,5),col="brown",density= 10,angle=-45,lwd=2) polygon(c(8,8,8.5,8.5),c(6,7,7,5.5),col= "greenyellow" ) polygon(3:2,1:2,border="brown",lwd=2) polygon(3:4,1:2,border="brown",lwd=2) lines(c(3,3),c(1,2),col="brown",lwd=2) points(c(2,3,4),c(2,2,2),pch=16,col="green",cex=1.8) points(c(3),c(8),cex=7,pch=16,col="gray") points(c(2.8),c(8.3),cex=7,pch=16,col="white") # 4.4 – A função par() # APRESENTANDO OS ARGUMENTOS DA FUNÇÃO par() par() # RETORNANDO AO DEFAULT APÓS USAR A FUNÇÃO par() op = par(mfrow=c(2,1)) plot(0:10) par(op) plot(0:10) # OBS: Outra forma de retornar ao default é fechar a janela gráfica ou # redefinir os argumentos utilizados. # # # # TRABALHO Estude todos os argumentos da função par(), usando o help(par) e os exemplos a seguir. Apresentar em sala de aula dois deles escolhidos por sorteio. # USANDO OS ARGUMENTOS DA FUNÇÃO par() # 1) adj par(adj=0); plot(0:10) 23 # Notas de Aulas da Disciplina Introdução ao R – página 24 # 2) ann par(ann=FALSE); plot(0:10) # 3) ask op = par(ask=TRUE); plot(0:10); plot(0:8) # tecle <Enter> par(op); # retornando ao default # 4) bg par(bg="pink"); plot(0:10) # difere de: plot(1:5,pch=21:25,bg=c("pink","blue","red","green","gray"),cex=4) # 5) bty plot(0:10, bty="u") # 6) cex plot(0:10, cex=2) # 7) cex.axis plot(0:10, cex.axis=2) # 8) cex.lab plot(0:10, cex.lab=2) # 9) cex.main plot(0:10, main="Exemplo", cex.main=2) # 10) cex.sub plot(0:10, sub="Exemplo", cex.sub=2) # 11) col plot(0:10, col="blue") # difere de: par(col="blue"); plot(0:10) # 12) col.axis plot(0:10, col.axis="red") # 13) col.lab plot(0:10, col.lab="magenta") # 14) col.main plot(0:10, main="Exemplo", col.main="cyan") # 15) col.sub plot(0:10, sub="Exemplo", col.sub=" magenta") # 16) family par(family="mono"); plot(0:10,0:10, main="Exemplo") par(family="Hershey") plot(0:10,0:10); text(6, 4, "teste", vfont=c("script", "plain"), cex=3) demo(Hershey) # Usando a função windowsFonts() – estudar: help(windowsFonts) windowsFonts(A=windowsFont("Coronet"), B=windowsFont("Andalus")) plot(1:10,1:10,type="n"); text(4,4,family="A","Testando Coronet"); text(5,5,family="B","Testando Andalus") par(family="A"); plot(0:10,0:10,main="Teste") # para eixos e títulos 24 # Notas de Aulas da Disciplina Introdução ao R – página 25 # 17) fg plot(0:10, fg="violetred3") # 18) fig par(fig=c(0.1,0.8,0.5,1)); plot(0:10) mtext(c("0,1","0,8","0,5","1,0"), line=-1, side=c(2,4,1,3)) # 19) fin par(fin=c(2,5)); plot(0:10) # 20) font plot(0:10, font=2) # 21) font.axis plot(0:10, font.axis=3) # 22) font.lab plot(0:10, font.lab=4) # 23) font.main plot(0:10, main= "Exemplo", font.main=3) # 24) font.sub plot(0:10, sub= "Exemplo", font.sub=3) # 25) lab par(lab=c(8, 2, 7)); plot(0:10) # 26) las plot(0:10, las=2) # 27) lend plot(0:10, type='l', lend=0, lwd=20, lty=3) # 28) lheight par(lheight=3); plot(0:10); text(2, 6, "teste \n teste") # 29) ljoin par(ljoin=0); plot(0:8); lines(4:7, c(1,3,1,3), lwd=20); par(ljoin=1); lines(4:7,c(4,6,4,6), lwd=20) # 30) lmitre plot(0:8); lines(4:7, c(1,3,1,1), lwd=20, ljoin=1, lmitre=1) lines(4:7, c(4,6,4,6), lwd=20, ljoin=1, lmitre=3) # 31) lty plot(0:10, type='l', lty=3) # 32) lwd plot(0:10, type='l', lwd=4) # 33) mai par(mai=c(1,2,0,.5)); plot(0:10) 25 # Notas de Aulas da Disciplina Introdução ao R – página 26 # 34) mar par(mar=c(5,5,5,5)); plot(0:10) # 35) mex par(mar=c(4,2,3,1), mex=.6); plot(1:8,1:8) mtext(0:5, side=2, line=0:5); mtext(0:5, side=3, line=0:5) # 36) mfcol; mfrow par(mfcol=c(2,2)); for (i in 1:4) {plot(0:8, type="n"); text(5,4,i)} par(mfrow=c(2,2)); for (i in 1:4) {plot(0:8, type="n"); text(5,4,i)} # 37) mfg par(mfrow=c(2,3), mfg=c(2,1)); plot(0:10) # 38) mgp plot(0:10, mgp=c(3, 1, 0)); plot(0:10, mgp=c(2, 1, 0)) # 39) new par(fig=c(0.2,.8,0.3,1)); plot(0:10,0:10) par(fig=c(0,.4,0,.4), new=T); plot(0:10,(0:10)^2) # 40) oma par(oma=c(0,4,1,1)); plot(0:10) # 41) omd par(omd=c(.1,.8,.2,.8)); plot(0:10) # 42) omi par(omi=c(1,2,1,.5)); plot(0:10) # 43) pch plot(1:25, pch=1:25 , cex=3) # 44) pin par(pin=c(2,3)); plot(0:10) # 45) plt par(plt=c(.2,.9,.1,.8)); plot(0:10) # 46) ps par(ps=7); plot(0:10) # 47) omd par(omd=c(.1,1,.2,.8), pty="s"); plot(0:10) # 48) tck par(tck=.2); plot(0:10); par(tck=-.05); plot(0:10) # 49) tcl par(tcl=1); plot(0:10) # 50) xaxs par(xaxs="i"); plot(0:10) # 51) xaxt par(xaxt="n"); plot(0:10) 26 # Notas de Aulas da Disciplina Introdução ao R – página 27 # 52) xlog par(xlog=T); plot(exp(1:10), 1:10, log="x") # 53) xpd par(mfrow=c(3,1), lheight=3) par(xpd=F); plot(0:10); text(2, 11, "xpd=F \n omitiu linha 1") par(xpd=T); plot(0:10); text(2, 11, "xpd=T") par(xpd=NA); plot(0:10, 0:10); text(2, 17, "xpd=NA") box("figure", col="red") # 54) yaxs par(yaxs="i"); plot(0:10) # 55) yaxt par(yaxt="n"); plot(0:10) # 56) ylog par(ylog=T); plot(1:10, exp(1:10), log="y") # 4.5 – Alguns gráficos da metodologia estatística # USANDO A FUNÇÃO pie() attach(alunos) pie(table(Sexo),col=2:3); legend(.5,-.8, c("Feminino", "Masculino"), col=2:3, pch=15) # USANDO A FUNÇÃO barplot() barplot(table(Lazer)) barplot(table(Sexo, Lazer), col=2:3) legend("topright", c("Feminino", "Masculino"), col=2:3, pch=18) # USANDO A FUNÇÃO hist() hist(Peso) # USANDO A FUNÇÃO interaction.plot() interaction.plot(Lazer, Sexo, Peso) # USANDO A FUNÇÃO pairs() pairs(alunos[c(2,4,5)]) # USANDO A FUNÇÃO boxplot() boxplot(Peso ~ Sexo) # USANDO A FUNÇÃO stripchart() stripchart(Peso ~ Sexo, vertical=T, add=T) # # # # # # # # TRABALHO Considere cada uma das seguintes funções: abline; axis; barplot; hist; interaction.plot; legend; lines; mosaic; pairs; pie; points; polygon; qqplot; qqnorm; rect; scatter.smooth; stripchart; symbols; win.graph. Cada aluno deverá apresentar em sala de aula uma função escolhida por sorteio. Estude cada função da seguinte forma: a) Execute um exemplo da seção Examples, explicando os resultados. b) Crie seu próprio exemplo. 27 # Notas de Aulas da Disciplina Introdução ao R – página 28 # # # # # # # # # # # # EXERCÍCIOS DA UNIDADE IV 1) Descubra algo mais (outros argumentos) a respeito de cada função apresentada neste capítulo. 2) Produza o gráfico intitulado "Relógio" apresentado abaixo, modificando os dados usados nos comandos do primeiro exemplo de help(text). 3) Usando a função symbols() e os dados fornecidos na área de trabalho Aval1.RData reproduza o gráfico abaixo. 4) Usando a função plot() e os dados fornecidos na área de trabalho Aval1.RData reproduza o diagrama de dispersão abaixo. 5) Usando a função plot() e os dados dos alunos reproduza o diagrama de dispersão de peso versus altura. Média das avaliações dos alunos de Introdução ao R segundo ano de ingresso e número médio de faltas 1.0 Relógio Legenda: Aval. 2 40 12 11 1 Aval. 1 8 4 0 5 -1.0 7 6 -1.0 20 3 10 9 30 2 Número de faltas 10 -0.5 0.0 0.5 Aval. 3 -0.5 0.0 0.5 2003 1.0 2004 2005 2006 2007 2008 Ano de Ingresso Peso x Alutra dos Alunos de Estatística Nota: o tamanho do ponto corresponde ao número de faltas 90 70 60 4 Peso 6 80 (peso, altura) da professora 50 2 40 0 Nota na segunda avaliação 8 100 10 Nota na primeira avaliação versus nota na segunda avaliação segundo o número de faltas 0 2 4 6 8 150 10 Nota na primeira avaliação 160 170 Altura 28 180 190 # Notas de Aulas da Disciplina Introdução ao R – página 29 # UNIDADE V: COMANDOS DE PROGRAMAÇÃO # 5.1 – A estrutura if # USANDO A ESTRUTURA if if (5>3) print("Verdadeiro") if (3==3) print("Verdadeiro") if (TRUE) print("Verdadeiro") if (2>3) print("Não imprime, pois é falso") if (FALSE) print("Não imprime, pois é falso") if (3==3) {print("3 é igual a 3"); print("Verdadeiro")} # ou melhor: if (3==3) { print("3 é igual a 3") print("Verdadeiro") } # USANDO A ESTRUTURA if else CORRETAMENTE if (5<3) print("É falso, não imprime") else print("Verdadeiro") #ou: if (5<3) print("É falso, não imprime") else print("Verdadeiro") # ou ainda: if (5<3) print("É falso, não imprime") else print("Verdadeiro") # ou destacando o if e o else: if (5<3) { print("É falso, não imprime") } else { print("Verdadeiro") } # USANDO A ESTRUTURA if else DE FORMA INCORRETA if (5<3) print("Não imprime, pois é falso") else print("Verdadeiro") if (5<3) print("Não imprime, pois é falso") else print("Verdadeiro") # EXEMPLO # usando a estrutura if else corretamente x = sample(1:20, 1) print(paste("O número sorteado é: ",x)) if (x%%2 == 0) { print("Resultado par") if (x%%4 == 0) { print("Resultado múltiplo de 4") } } else { print("Resultado ímpar") } 29 # Notas de Aulas da Disciplina Introdução ao R – página 30 # EXERCÍCIO RESOLVIDO # Simule o lançamento de um dado e apresente o resultado numa janela # gráfica. # SOLUÇÃO plot(0:10,0:10, type="n") rect(0, 0, 2, 2) d=sample(1:6, 1) x=0; y=0 if (d==1) points(x+1,y+1,cex=1.4,pch=16) if (d==2) points(x+c(.5,1.5),y+c(.5,1.5),cex=1.4,pch=16) if (d==3) points(x+c(.5,1,1.5),y+c(.5,1,1.5),cex=1.4,pch=16) if (d==4) points(x+c(.5,.5,1.5,1.5),y+c(.5,1.5,.5,1.5),cex=1.4,pch=16) if (d==5) points(x+c(.5,.5,1,1.5,1.5),y+c(.5,1.5,1,.5,1.5),cex=1.4,pch=16) if (d==6) points(x+c(.5,.5,.5,1.5,1.5,1.5),y+c(.5,1,1.5,.5,1,1.5),cex=1.4,pch=16) # 5.2 – A estruturas for # USANDO A ESTRUTURA for for(i in 1:5) print(i) for(i in 1:5) print(1:i) for(i in 1:3) for(j in 1:3) print(c(i,j)) for(i in 1:3) for(j in 1:3) print(c(i,j,i*j)) # ou melhor: for(i in 1:3) { print(paste("Tabuada de ", i, ":")) print(c(" ")) for(j in 1:3) { print(c(i,j,i*j)) } } # USANDO A ESTRUTURA for EM GRÁFICOS par(mfrow=c(2,2)) for (i in 1:4) hist(rnorm(10^i), main=paste("Amostra de Tamanho",10^i)) 30 # Notas de Aulas da Disciplina Introdução ao R – página 31 # USANDO A ESTRUTURA for PARA INCREMENTAR VALORES j=0 # elemento neutro da adição for(i in 1:20) {j=j+2; print(j)} # USANDO A ESTRUTURA for PARA ACRESCENTAR ELEMENTOS EM UM CONJUNTO letras=NULL # objeto "letras" criado sem conteúdo (vazio) for(i in 1:10) {letras=c(letras, letters[i]); print(letras)} # USANDO A ESTRUTURA for PARA MULTIPLICAR VALORES SUCESSIVAMENTE PG=1 # elemento neutro da multiplicação for(i in 1:50) {PG=PG*0.5; print(PG)} # EXERCÍCIOS # 1) Use o "for" para obter a soma de uma PG infinita de razão < 1. # 2) Use o "for" para apresentar todos os arranjos possíveis (com # repetição) para duas letras vogais. # 3) Estude a função demo.pal() abaixo, retirada da seção Examples de # help(rainbow). #================ FUNÇÃO demo.pal() ===================================== #------ Some palettes -----------demo.pal <function(n, border = if (n<32) "light gray" else NA, main = paste("color palettes; n=",n), ch.col = c("rainbow(n, start=.7, end=.1)", "heat.colors(n)", "terrain.colors(n)", "topo.colors(n)", "cm.colors(n)")) { nt <- length(ch.col) i <- 1:n; j <- n / nt; d <- j/6; dy <- 2*d plot(i,i+d, type="n", yaxt="n", ylab="", main=main) for (k in 1:nt) { rect(i-.5, (k-1)*j+ dy, i+.4, k*j, col = eval(parse(text=ch.col[k])), border = border) text(2*j, k * j +dy/4, ch.col[k]) } } n <- if(.Device == "postscript") 64 else 16 # Since for screen, larger n may give color allocation problem demo.pal(n) #================ FIM DA FUNÇÃO demo.pal() ============================== # USANDO AS ESTRUTURAS for E if # Imprimindo os números entre 12 e 30 divisíveis por 3 for (i in 12:30){ if (i%%3==0) { print(i) } } # CONTANDO O NÚMERO DE ALUNOS POR SEXO A PARTIR DO DATA FRAME alunos fem = 0; mas = 0 for (i in 1:length(alunos$Sexo)) { if (alunos$Sexo[i]=="F") fem = fem + 1 if (alunos$Sexo[i]=="M") mas = mas + 1 } mas; fem 31 # Notas de Aulas da Disciplina Introdução ao R – página 32 # 5.3 – A estrutura while # USANDO A ESTRUTURA while # CONTANDO O NÚMERO DE TENTATIVAS ATÉ QUE OCORRA O PRIMEIRO SUCESSO dado=sample(1:6, 1) n=1 while(dado != 5){ dado=sample(1:6, 1) n=n+1 } print(paste("Foram necessários", n, "lançamentos do dado para se obter o primeiro 5")) # # # # # # # EXERCÍCIOS 1) Melhorar o programa acima prevendo o caso de sucesso no primeiro lançamento (usar "Foi" em vez de "Foram", etc.) 2) Simular 100 repetições do experimento anterior e apresentar o percentual de obtenção de sucesso na terceira tentativa. 3) Comparar o percentual obtido em 2) com o resultado da probabilidade de ocorrer sucesso na terceira tentativa. # 5.4 – A estrutura repeat # USANDO A ESTRUTURA repeat repeat { cat("Digite um número (zero para terminar)") n <- scan(n=1) if (n == 0) break if (n < 0) print(c("O número é menor que zero")) if (n > 0) { print(c("O número é maior que zero")) if (n%%3==0) print(c("O número é múltiplo de 3")) } } # EXERCÍCIOS DA UNIDADE V # 1) Usando as estruturas de programação e os recursos gráficos, # reproduza as figuras abaixo. Dado 1 Dado 2 color palettes; n= 16 colors()[(n+1):(n+16)] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 6 7 8 9 10 11 12 13 14 15 16 6 7 8 9 10 11 12 13 14 15 16 7 8 9 10 11 12 13 14 15 16 7 8 9 10 11 12 13 14 15 16 7 8 9 10 11 12 13 14 15 16 8 9 10 11 12 13 14 15 16 colors()[1:n] 1 2 3 4 5 cm.colors(n) 1 2 3 4 5 topo.colors(n) 1 Dado 3 2 Dado 4 3 4 5 6 terrain.colors(n) 1 2 3 4 5 6 heat.colors(n) 1 2 3 4 5 6 rainbow(n, start=.7, end=.1) 1 2 3 4 5 6 7 5 10 i 32 15 # Notas de Aulas da Disciplina Introdução ao R – página 33 # UNIDADE VI: PROBABILIDADE # 6.1 – Seleção de amostras aleatórias # USANDO A FUNÇÃO sample() # Selecionando uma Amostra Aleatória Simples (sem reposição) de # tamanho n = 5 de uma população de N = 10 unidades: sample(1:10, 5) # SELECIONANDO UMA AMOSTRA ALEATÓRIA SIMPLES (COM REPOSIÇÃO) DE # TAMANHO n = 5 DE UMA POPULAÇÃO DE N = 10 UNIDADES sample(1:10, 5, replace=T) # SIMULANDO O LANÇAMENTO DE UMA MOEDA HONESTA sample(c("Cara", "Coroa"), 5, replace=T) # SIMULANDO O LANÇAMENTO DE UMA MOEDA DESONESTA COM P(CARA)=0.6 table(sample(c("Cara", "Coroa"), 1000, replace=T, prob=c(0.6,0.4))) # EXERCÍCIOS # 1) Com apenas uma linha de comando, calcule o peso médio para uma # amostra de 5 alunos escolhidos aleatoriamente sem reposição # dentre os alunos do nosso banco de dados. # 2) Simule o Teorema do Limite Central, usando o nosso banco de dados. # 6.2 – Funções para análise combinatória # CALCULANDO O NÚMERO DE PERMUTAÇÕES DE 3 ELEMENTOS factorial(3) # CALCULANDO O NÚMERO DE ARRANJOS DE 7 ELEMENTOS TOMADOS 3 A 3 # Obs: A{7,3} = 7! / (7 - 3)! = 7 x 6 x 5 x 4! / 4! = 7 x 6 x 5 prod(7:5) # CALCULANDO O NÚMERO DE COMBINAÇÕES DE 10 ELEMENTOS TOMADOS 4 A 4 choose(10, 4) # confirmando o cálculo: factorial(10)/(factorial(4)*factorial(6)) # ou melhor: prod(10:7)/factorial(4) # LISTANDO TODAS AS COMBINAÇÕES POSSÍVEIS ENTRE ELEMENTOS DE UM CONJUNTO combn(letters[1:10], 3) # confirmando o número de combinações: choose(10, 3) combn(c("João", "José", "Maria", "Rita"), 2) choose(4, 2) combn(sample(1:60,10), 6) # combinações para jogar na Mega-Sena choose(10, 6) combn(6, 3) choose(6, 3) # EXERCÍCIO # Encontre todos as combinações de jogos da Mega-Sena para os números: # 1,5,12,25,36,45,55,60 33 # Notas de Aulas da Disciplina Introdução ao R – página 34 # 6.3 – Distribuições de probabilidade # 6.3.1 – Variáveis aleatórias discretas # CALCULANDO PROBABILIDADES DA DISTRIBUIÇÃO BINOMIAL dbinom(1,3,0.5) # ou cálculo de P(X=1) para X~B(n=3,p=0.5): choose(3,1)*0.5^3 dbinom(0.1,3,0.5) # P(X=0.1)-> erro pois a v.a. X é discreta! plot(0:10, dbinom(0:10,10,0.5), type="h", lwd=4, lend=1) # CALCULANDO PROBABILIDADES DA DISTRIBUIÇÃO ACUMULADA BINOMIAL pbinom(1,3,0.5) # ou cálculo de P(X<=1): choose(3,0)*0.5^3 + choose(3,1)*0.5^3 pbinom(0.1,3,0.5) # não erro -> é viável o cálculo de P(X<=0.1) plot(-1:4, pbinom(-1:4,3,0.5), type="s") points(0:3, pbinom(0:3,3,0.5),pch=16) points(0:3, pbinom(-1:2,3,0.5)) # CALCULANDO QUANTIS DA DIST. BINOMIAL - FUNÇÃO INVERSA DA pbinom() qbinom(0.5,3,0.5) qbinom(0.51,3,0.5) # OBTENDO VALORES ALEATÓRIOS DA DISTRIBUIÇÃO BINOMIAL rbinom(5,10,0.5) table(rbinom(100,10,0.5)) barplot(table(rbinom(10000,10,0.5))) # EXERCÍCIOS # 1) Crie uma função idêntica à pbinom(), usando function, for e # dbinom; # 2) Crie exemplos de utilização das funções dpois(), ppois(), # qpois() e rpois(). # DISTRIBUIÇÃO BINOMIAL: binom() x11(20,8); par(mfrow=c(1,3)) a1=20; a2=0.8 tab=prop.table(table(rbinom(10000,a1,a2))) barplot(tab,col="blue") lim=range(as.numeric(names(tab))) plot(lim[1]:lim[2],dbinom(lim[1]:lim[2],a1,a2),type="h",lwd=6,lend=1) q=qbinom(0.5,a1,a2) abline(v=q,col="red",lwd=2) mtext("Mediana",1,at=q,col="red",cex=.7) plot((lim[1]-1):(lim[2]+1),pbinom((lim[1]-1):(lim[2]+1),a1,a2),type="s") # DISTRIBUIÇÃO BINOMIAL NEGATIVA: nbinom() x11(20,8); par(mfrow=c(1,3)) a1=20; a2=0.8 tab=prop.table(table(rnbinom(10000,a1,a2))) barplot(tab,col="blue") lim=range(as.numeric(names(tab))) plot(lim[1]:lim[2],dnbinom(lim[1]:lim[2],a1,a2),type="h",lwd=6,lend=1) q=qnbinom(0.5,a1,a2) abline(v=q,col="red",lwd=2) mtext("Mediana",1,at=q,col="red",cex=.7) plot((lim[1]-1):(lim[2]+1),pnbinom((lim[1]-1):(lim[2]+1),a1,a2),type="s") 34 # Notas de Aulas da Disciplina Introdução ao R – página 35 # DISTRIBUIÇÃO GEOMÉTRICA: geom() x11(20,8) par(mfrow=c(1,3)) a1=.2 tab=prop.table(table(rgeom(500,a1))) barplot(tab,col="blue") lim=range(as.numeric(names(tab))) plot(lim[1]:lim[2],dgeom(lim[1]:lim[2],a1),type="h",lwd=6,lend=1) q=qgeom(0.5,a1) abline(v=q,col="red",lwd=2) mtext("Mediana",1,at=q,col="red",cex=.7) plot((lim[1]-1):(lim[2]+1),pgeom((lim[1]-1):(lim[2]+1),a1),type="s") # DISTRIBUIÇÃO HIPERGEOMÉTRICA: hyper() x11(20,8) par(mfrow=c(1,3)) a1=15; a2=20; a3=10 tab=prop.table(table(rhyper(1000,a1,a2,a3))) barplot(tab,col="blue") lim=range(as.numeric(names(tab))) plot(lim[1]:lim[2],dhyper(lim[1]:lim[2],a1,a2,a3),type="h",lwd=6,lend=1) phyper(6,a1,a2,a3) q=qhyper(0.5,a1,a2,a3) abline(v=q,col="red",lwd=2) mtext("Mediana",1,at=q,col="red",cex=.7) plot((lim[1]-1):(lim[2]+1),phyper((lim[1]-1):(lim[2]+1),a1,a2,a3),type="s") # DISTRIBUIÇÃO POISSON: pois() x11(20,8) par(mfrow=c(1,3)) a1=5 tab=prop.table(table(rpois(10000,a1))) barplot(tab,col="blue") lim=range(as.numeric(names(tab))) plot(lim[1]:lim[2],dpois(lim[1]:lim[2],a1),type="h",lwd=6,lend=1) q=qpois(0.5,a1) abline(v=q,col="red",lwd=2) mtext("Mediana",1,at=q,col="red",cex=.7) plot((lim[1]-1):(lim[2]+1),ppois((lim[1]-1):(lim[2]+1),a1),type="s") # SIMULANDO A DISTRIBUIÇÃO UNIFORME DISCRETA, USANDO sample() x11(20,8) par(mfrow=c(1,3)) a1=1 a2=6 tab=prop.table(table(sample(a1:a2,10, rep=T))) barplot(tab,col="blue") lim=range(as.numeric(names(tab))) plot(a1:a2,rep(1/(a2-a1+1),length(a1:a2)),type="h",lwd=6,lend=1) q=sum(a1:a2)/length(a1:a2) abline(v=q,col="red",lwd=2) mtext("Mediana",1,at=q,col="red",cex=.7) plot(a1:a2,cumsum(rep(1/6,6)),type="s") 35 # Notas de Aulas da Disciplina Introdução ao R – página 36 # 6.3.1 – Variáveis aleatórias contínuas # ESTUDANDO A DISTRIBUIÇÃO NORMAL: x11(20,6) par(mfrow=c(1,3)) a1=20; a2=5 gera=rnorm(100,a1,a2) hist(gera,prob=T) lines(density(gera)) rug(gera) x=seq(0,40,0.01) y=dnorm(x,a1,a2) plot(x,y,col=4,type="l",lwd=2) x1=seq(0,25,0.01) y1=dnorm(x1,a1,a2) polygon(c(x1,25,0),c(y1,0,0),col="red") text(a1-2,0.01,paste("P(X<=25) = ", round(pnorm(25,a1,a2),2)), font=2, cex=1.2, col="white") plot(x,pnorm(x,a1,a2)) p=pnorm(25,a1,a2) q=qnorm(p,a1,a2) points(q,pnorm(25,a1,a2),pch=16,col=2,cex=2.5) text(32,0.75,paste("(",25,",",round(p,2),")"),font=2,cex=2,col="red") abline(v=qnorm(0.8413,a1,a2),h=pnorm(25,a1,a2),col="red") # APRESENTANDO O GRÁFICO DA FDP NORMAL MULTIVARIADA: x = y = seq(-3, 3, length = 70) mult.normal.pad = function(x, y) exp(-(x^2-x*y+y^2)/2)/sqrt(2*pi) z = outer(x, y, mult.normal.pad) persp(x, y, z, theta=20, phi=30, expand=0.4, col="lightblue") # GERANDO AMOSTRAS ALEATÓRIAS DE UMA NORMAL MULTIVARIADA: library(MASS) m1 = m2 = 10; v1 = v2 = 4; r = 0.7 co = r*sqrt(v1)*sqrt(v2) X=mvrnorm(n = 50, mu=c(m1, m2), Sigma=matrix(c(v1,co,co,v2),ncol=2)) m1 = m2 = 20; v1 = 4; v2 = 9; r = -0.7 co = r*sqrt(v1)*sqrt(v2) Y=mvrnorm(n = 50, mu=c(m1, m2), Sigma=matrix(c(v1,co,co,v2),ncol=2)) plot(X,pch=1, xlim=c(0,30),ylim=c(0,30)) points(Y,pch=2) # OUTRAS DISTRIBUIÇÕES DE VARIÁVEIS ALEATÓRIAS CONTÍNUAS: # DISTRIBUIÇÃO BETA: beta() x11(20,8) par(mfrow=c(1,2)) a1=4; a2=5; a3=2 hist(rbeta(1000,a1,a2,a3),prob=T) x=seq(0,1,0.01) y=dbeta(seq(0,1,0.01),a1,a2,a3) lines(x,y,xpd=T,col=4,lwd=2) (q=qbeta(0.5,a1,a2,a3)) abline(v=q,col="red",lwd=2) text(q,0.05,"Mediana",pos=4,col="red") prob=pbeta(x,a1,a2,a3) plot(x,prob,type="l") 36 # Notas de Aulas da Disciplina Introdução ao R – página 37 # DISTRIBUIÇÃO CAUCHY: cauchy() x11(20,8); par(mfrow=c(1,2)) a1=0; a2=1 hist(rcauchy(50,a1,a2),prob=T) x=seq(-40,40,0.1) y=dcauchy(x,a1,a2) lines(x,y,xpd=T,col=4,lwd=2) (q=qcauchy(0.5,a1,a2)) abline(v=q,col="red",lwd=2) text(q,0.005,"Mediana",pos=4,col="red") prob=pcauchy(x,a1,a2) plot(x,prob,type="l") # DISTRIBUIÇÃO QUI-QUADRADO: chisq() x11(20,8); par(mfrow=c(1,2)) a1=4; ncp=1 hist(rchisq(1000,a1,ncp),prob=T) x=seq(0,15,0.01); y=dchisq(x,a1,ncp) lines(x,y,xpd=T,col=4,lwd=2) (q=qchisq(0.5,a1,ncp)) abline(v=q,col="red",lwd=2) text(q,0.03,"Mediana",pos=4,col="red") prob=pchisq(x,a1,ncp) plot(x,prob,type="l") # VERIFICANDO A RELAÇÃO ENTRE AS DISTRIBUIÇÕES QUI-QUADRADO E NORMAL: hist((rnorm(100000)^2),prob=T) # (Normal(0,1))^2 = Qui-quadrado(1): y=dchisq(seq(0,15,0.01),1,0) lines(x,y,xpd=T,col=4,lwd=2) # DISTRIBUIÇÃO EXPONENCIAL: exp() x11(20,8); par(mfrow=c(1,2)) a1=1 hist(rexp(1000,a1),prob=T) x=seq(0,10,0.01) y=dexp(x,a1) lines(x,y,xpd=T,col=4,lwd=2) (q=qexp(0.5,a1)) abline(v=q,col="red",lwd=2) text(q,0.03,"Mediana",pos=4,col="red") prob=pexp(x,a1) plot(x,prob,type="l") # DISTRIBUIÇÃO F DE SNEDECOR: f() x11(20,8); par(mfrow=c(1,2)) a1=18; a2=10 hist(rf(500,a1,a2),prob=T) x=seq(0,10,0.01) y=df(x,a1,a2) lines(x,y,xpd=T,col=4,lwd=2) (q=qf(0.5,a1,a2)) abline(v=q,col="red",lwd=2) text(q,0.015,"Mediana",pos=4,col="red") prob=pf(x,a1,a2) plot(x,prob,type="l") 37 # Notas de Aulas da Disciplina Introdução ao R – página 38 # DISTRIBUIÇÃO GAMA: gamma() x11(20,8) par(mfrow=c(1,2)) a1=18; a2=10 hist(rgamma(500,a1,a2),prob=T) x=seq(0,10,0.01) y=dgamma(x,a1,a2) lines(x,y,xpd=T,col=4,lwd=2) (q=qgamma(0.5,a1,a2)) abline(v=q,col="red",lwd=2) text(q,0.02,"Mediana",pos=4,col="red") prob=pgamma(x,a1,a2) plot(x,prob,type="l") # DISTRIBUIÇÃO LOG-NORMAL: lnorm() x11(20,8) par(mfrow=c(1,2)) a1=3; a2=.2 hist(rlnorm(500,a1,a2),prob=T) x=seq(10,50,0.01) y=dlnorm(x,a1,a2) lines(x,y,xpd=T,col=4,lwd=2) (q=qlnorm(0.5,a1,a2)) abline(v=q,col="red",lwd=2) text(q,0.002,"Mediana",pos=4,col="red") prob=plnorm(x,a1,a2) plot(x,prob,type="l") # DISTRIBUIÇÃO LOGÍSTICA: logis() x11(20,8) par(mfrow=c(1,2)) a1=3; a2=.2 hist(rlogis(500,a1,a2),prob=T) x=seq(0,5,0.01) y=dlogis(x,a1,a2) lines(x,y,xpd=T,col=4,lwd=2) (q=qlogis(0.5,a1,a2)) abline(v=q,col="red",lwd=2) text(q,0.05,"Mediana",pos=4,col="red") prob=plogis(x,a1,a2) plot(x,prob,type="l") # DISTRIBUIÇÃO NORMAL: norm() x11(20,8) par(mfrow=c(1,2)) a1=20; a2=5 hist(rnorm(1000,a1,a2),prob=T) x=seq(0,40,0.01) y=dnorm(x,a1,a2) lines(x,y,xpd=T,col=4,lwd=2) (q=qnorm(0.5,a1,a2)) abline(v=q,col="red",lwd=2) text(q,0.05,"Mediana",pos=4,col="red") prob=pnorm(x,a1,a2) plot(x,prob,type="l") 38 # Notas de Aulas da Disciplina Introdução ao R – página 39 # DISTRIBUIÇÃO T DE STUDENT: t() x11(20,8) par(mfrow=c(1,2)) a1=20 ncp=15 hist(rt(1000,a1,ncp),prob=T) x=seq(-4,4,0.01) y=dt(x,a1,ncp) lines(x,y,xpd=T,col=4,lwd=2) (q=qt(0.5,a1,ncp)) abline(v=q,col="red",lwd=2) text(q,0.03,"Mediana",pos=4,col="red") prob=pt(x,a1,ncp) plot(x,prob,type="l") # DISTRIBUIÇÃO UNIFORM: unif() x11(20,8) par(mfrow=c(1,2)) a1=20 a2=40 hist(runif(1000,a1,a2),prob=T) x=seq(0,50,0.01) y=dunif(x,a1,a2) lines(x,y,xpd=T,col=4,lwd=2) (q=qunif(0.5,a1,a2)) abline(v=q,col="red",lwd=2) text(q,0.01,"Mediana",pos=4,col="red") prob=punif(x,a1,a2) plot(x,prob,type="l") # DISTRIBUIÇÃO WEIBULL: weibull() x11(20,8) par(mfrow=c(1,2)) a1=4 a2=5 hist(rweibull(1000,a1,a2),prob=T) x=seq(0,10,0.01) y=dweibull(x,a1,a2) lines(x,y,xpd=T,col=4,lwd=2) (q=qweibull(0.5,a1,a2)) abline(v=q,col="red",lwd=2) text(q,0.01,"Mediana",pos=4,col="red") prob=pweibull(x,a1,a2) plot(x,prob,type="l") # TRABALHO: Crie outros exemplos de utilização das funções abaixo # (precedidas de r, d, p, q): # 1. beta; 2. binom; 3. cauchy; 4. chisq; 5. exp; 6. f; 7. gamma; # 8. geom; 9. hyper; 10. lnorm; 11. logis; 12. nbinom; 13. norm; # 14. pois; 15. t; 16. unif; 17. weibull. 39 # Notas de Aulas da Disciplina Introdução ao R – página 40 # EXERCÍCIOS DA UNIDADE VI # 1) Usando as funções dedicadas à distribuição Binomial, dentre # outras, reproduza uma figura semelhante à seguinte. # 3) Melhore a apresentação de cada uma das distribuições de variáveis # aleatórias discretas apresentadas nesta unidade de forma semelhante # ao exercício anterior. # 2) Usando a função sample() dentre outras, simule a distribuição # uniforme discreta, produzindo uma figura semelhante à seguinte. 40 # Notas de Aulas da Disciplina Introdução ao R – página 41 # 4) Usando as funções dedicadas à distribuição Exponencial, dentre # outras, reproduza uma figura semelhante à seguinte. 41 # Notas de Aulas da Disciplina Introdução ao R – página 42 # UNIDADE VII: ANÁLISE DESCRITIVA # 7.1 – Estatísticas descritivas simples # USANDO OS DADOS DOS ALUNOS attach(alunos) min(Altura) max(Altura) length(Altura) mean(Altura) median(Altura) var(Altura) sd(Altura) quantile(Altura) perc = seq(0, 1, 0.1) quantile(Altura, perc) fivenum(Peso) range(Peso) diff(range(Peso)) diff(Peso) cor(Peso, Altura) cov(Peso, Altura) summary(Altura) summary(alunos) # CONSTRUINDO RESULTADOS PERSONALIZADOS # COMPARANDO ESTATÍSTICAS DESCRITIVAS PARA DUAS VARIÁVEIS resumo = function(Var1, Var2) { mp = mean(Var1, na.rm=T) mep = median(Var1, na.rm=T) sp = sd(Var1, na.rm=T) mm = mean(Var2, na.rm=T) mem = median(Var2, na.rm=T) sm = sd(Var2, na.rm=T) d = data.frame(Média=c(mp,mm), Desvio.padrão=c(sp,sm), Mediana=c(mep,mem)) c = cor(Var2, Var1, use="pairwise.complete.obs") return(list(Estatísticas.descritivas=d,Correlação=c)) } resumo(Alt_pai, Alt_mae) # 7.2 – Representação tabular # CONSTRUINDO TABELAS PARA VARIÁVEIS QUALITATIVAS attach(alunos) table(Sexo) prop.table(table(Sexo)) table(Lazer) prop.table(table(Lazer)) t = table(Sexo, Lazer) prop.table(t,1) prop.table(t,2) margin.table(t, 1) margin.table(t, 2) 42 # Notas de Aulas da Disciplina Introdução ao R – página 43 # CONSTRUINDO TABELAS DE CONTINGÊNCIA COM TOTAL (VALORES ABSOLUTOS) tc=table(alunos$Sexo, alunos$Lazer) tcT=rbind(tc, Total=apply(tc,2,sum)) (tcT=cbind(tcT, Total=apply(tcT,1,sum))) class(tc) class(tcT) # CONSTRUINDO TABELAS DE CONTINGÊNCIA COM TOTAL (VALORES PERCENTUAIS) (tc=table(alunos$Sexo, alunos$Lazer)) (tcP=round(100*prop.table(tc, 1), 1)) (marg=round(100*prop.table(table(alunos$Lazer)), 1)) (tcPT=cbind(tcP, Total=apply(tcP, 1, sum))) (tcPT=rbind(tcPT, Total=c(marg, sum(marg)))) # CONSTRUINDO TABELAS PARA VARIÁVEIS QUANTITATIVAS attach(alunos) table(cut(Peso, b = 5)) table(cut(Peso, breaks = 10*(4:11))) table(cut(Peso, breaks = 10*(4:11), right = FALSE)) # CRUZANDO VARIÁVEIS QUALITATIVAS VERSUS QUANTITATIVAS attach(alunos) table(Sexo, cut(Peso, breaks = 10*(4:11), right = FALSE)) # 7.3 – Representação gráfica # 7.3.1 – Representação gráfica para variáveis qualitativas # CONSTRUINDO UM GRÁFICO DE PIZZA attach(alunos) pie(table(Sexo), col= c("red", "green")) legend(x="bottomright", c("Feminino", "Masculino"), col=2:3, title("Sexo") pch=15) # CONSTRUINDO UM GRÁFICO DE PIZZA TRIDIMENSIONAL library(plotrix) # antes de carregar deve-se instalar o pacote "plotrix" pie3D(table(Sexo), col= c("red", "green")) # CONSTRUINDO GRÁFICOS DE COLUNAS op=par(mfrow=c(2,2)) barplot(table(Sexo, Lazer)) barplot(prop.table(table(Lazer, Sexo),2)) barplot(table(Sexo, Lazer), beside=T) mosaicplot(table(Sexo, Lazer), color=T) par(op) # CONSTRUINDO UM GRÁFICO DE BARRAS COM RÓTULOS attach(alunos) tab=table(Lazer) par(fig=c(.2,1,0,1)) barplot(tab, horiz=T, xlim=c(0, max(tab)+10), las=2) text(tab[1:dim(tab)]+2,seq(0.7,0.7+(dim(tab)-1)*1.2,1.2),tab[1:dim(tab)]) title("Opção de Lazer para Alunos\n das Turmas de Introdução ao R") 43 # Notas de Aulas da Disciplina Introdução ao R – página 44 # CONSTRUINDO UM GRÁFICO DE COLUNAS COM RÓTULOS tab=table(Idade) barplot(tab, ylim=c(0, max(tab)+10)) d=dim(tab) text(seq(0.7,0.7+(dim(tab)-1)*1.2,1.2), tab[1:d], tab[1:d], pos=3) title("Idade dos Alunos das Turmas de Introdução ao R") # CONSTRUINDO UM GRÁFICO DE COLUNAS PARA DUAS VARIÁVEIS QUALITATIVAS tab=table(Lazer) tc=table(Sexo,Lazer) tcT=rbind(tc,Total=apply(tc,2,sum)) tcT=cbind(tcT,Total=apply(tcT,1,sum)) p2=prop.table(tc,1)*100 pm=prop.table(tab)*100 win.graph(width=9) barplot(rbind(p2,pm), beside=T, font.lab=2, col=c(2,4,"gray"), xlab="Opção de Lazer", ylab="Percentual sobre o Sexo") legend("topright", col=c(2,4,"gray"), pch=15, cex=1.2, legend=c("Feminino","Masculino","Perfil Médio")) title("Opção de Lazer segundo o Sexo") # 7.3.1 – Representação gráfica para variáveis quantitativas # CONSTRUINDO DIAGRAMAS DE RAMOS E FOLHAS attach(alunos) stem(Altura,scale=1) stem(Altura,scale=2) stem(Peso,scale=1) stem(Peso,scale=2) stem(rnorm(1000), scale=1) stem(rnorm(1000), scale=2) # CONSTRUINDO HISTOGRAMAS attach(alunos) par(mfrow=c(2,2)) hist(Peso, col="springgreen2") br=seq(40,120,20); hist(Peso, breaks=br, col="orchid") hist(Peso, breaks=seq(40,120,10), col="salmon2") hist(Peso, breaks=seq(40,120,2), prob=T, col="lightblue2") curve(dnorm(x, mean(Peso), sd(Peso)), add=T, xpd=T, col=4, lwd=2) # CONSTRUINDO UM HISTOGRAMA COM LEGENDA hist(Peso, xlab="Peso dos Alunos", ylab="Frequência",main= "Pesos dos Alunos de Estatística", breaks=seq(40,120,10),col="wheat", axes=F) axis(side=1,at=seq(40,120,10)); axis(side=2); box() legend(x="topright",legend=paste("Média = ", round(mean(Peso,na.rm=T),1), "\nD. Padrão = ",round(sd(Peso, na.rm=T),1), "\nMínimo = ",min(Peso, na.rm=T), "\nMáximo = ",max(Peso, na.rm=T), "\nN = ",length(Peso)), bty="n") 44 # Notas de Aulas da Disciplina Introdução ao R – página 45 # CONSTRUINDO HISTOGRAMAS PARA SUBGRUPOS attach(alunos) peso.sexo=split(Peso,Sexo) par(mfrow=c(2,1)) hist(peso.sexo$F, breaks=seq(40,105,5)) abline(v=median(peso.sexo$F),lwd=3,col="red") mtext("Mediana", at=median(peso.sexo$F), side=1, line=0, col="red") hist(peso.sexo$M, breaks=seq(40,105,5)) abline(v=median(peso.sexo$M),lwd=3,col="red") mtext("Mediana", at=median(peso.sexo$M), side=1, line=0, col="red") # CONSTRUINDO UMA OGIVA DE GALTON x=rnorm(100) h=hist(x, br=-4:4, plot=F); h plot(h$breaks,c(0,cumsum(h$count)),type="s") # CONSTRUINDO GRÁFICOS QUANTIL-QUANTIL attach(alunos) op=par(mfrow=c(2,2)) y = rnorm(100); qqnorm(y); qqline(y) y = rexp(100); qqnorm(y); qqline(y) qqnorm(Peso, main="Peso"); qqline(Peso) qqplot(rnorm(20),rexp(1000), main="Exemplo do qqplot") # ESTUDANDO A CONSTRUÇÃO DE UM BOX PLOT, USANDO stripchart par(op); boxplot(Idade, ylab="Idade") stripchart(Idade, add=T, vertical=T, pch="-", col="red" , cex=1.5) # CONSTRUINDO E ESTUDANDO BOXPLOTS attach(alunos) boxplot.stats(Peso) # ou: fivenum(Peso) op=par(mfrow=c(2,2)) boxplot(Peso, notch=T, ylab="Peso", col="gray") boxplot(Peso, xlab="Peso", col=4, horizontal=T) boxplot(Peso~Sexo, ylab="Peso", col=2:3) boxplot(Peso~Sexo, ylab="Peso", border=2:3) stripchart(Peso~Sexo, ylab="Peso", add=T, vert=T, pch="-") par(op) # CONSTRUINDO UM DIAGRAMA DE DISPERSÃO COM RETA DE REGRESSÃO plot(Altura, Peso, pch=as.character(Sexo)) title("Diagrama de Dispersão entre Peso e Altura segundo o Sexo") abline(lm(Peso~Altura)) identify(Altura, Peso) # clique com o mouse no ponto para identicá-lo locator(5) # clique com o mouse em 5 pontos para obter Altura e Peso # CONSTRUINDO UMA MATRIZ COM DIAGRAMAS DE DISPERSÃO pairs(alunos[c(2,4:9)]) 7.3.2 – Representação gráfica de variáveis mistas # CONSTRUINDO UM BOXPLOT (VARIÁVEL QUANTITATIVA VERSUS QUALITATIVA) attach(alunos) boxplot(Peso ~ Sexo, xlab="Sexo", ylab="Peso (kg)", col=c("red","blue")) title("Peso segundo o Sexo") 45 # Notas de Aulas da Disciplina Introdução ao R – página 46 # CONSTRUINDO UM BOXPLOT (VARIÁVEL QUANTITATIVA VERSUS DUAS QUALITATIVAS) boxplot(Idade ~ Sexo + Lazer, xlab="Opção de Lazer e Sexo", ylab="Idade", col=c("red","blue")) title("Idade segundo Opção de Lazer e Sexo ") # CONSTRUINDO UM GRÁFICO DE INTERAÇÃO ENTRE VARIÁVEIS interaction.plot(Lazer, Sexo, Idade, xlab="Opção de Lazer", ylab="Idade Média",trace.label=c("Sexo")) title("Idade Média segundo Opção de Lazer e Sexo") # # # # # # # # EXERCÍCIOS DA UNIDADE VII 1) Melhore a apresentação de cada um dos gráficos desta unidade. 2) Com os dados dos alunos, produza uma saída para Sexo x Peso semelhante a: Sexo [40,50) [50,60) [60,70) [70,80) [80,90) [90,100) [100,110) F 8.2 16.5 10.6 1.2 1.2 0.0 0.0 M 0.0 3.5 22.4 23.5 8.2 2.4 2.4 3) Usando os dados dos alunos, reproduza as figuras abaixo. 46 # Notas de Aulas da Disciplina Introdução ao R – página 47 # UNIDADE VIII: OPERAÇÕES COM VETORES E MATRIZES # 8.1 – Operações com vetores # REVENDO OPERAÇÕES ELEMENTARES COM VETORES help("+") (x = seq(2, 10 , 2)) (y = sample(1:10,5)) x + y 2*x # ou: rep(2,5)*x rep(2,4)*x # erro 3*(x+y) x - y # ou: x + (-1)*y x + 2 x^2 log(x) x*y x/y x%%y # resto da divisão x%/%y # divisão inteira # CALCULANDO O PRODUTO INTERNO ENTRE VETORES help("%*%") x%*%y # 8.2 – Operações com matrizes # REALIZANDO OPERAÇÕES ELEMENTARES COM MATRIZES (A = matrix(1:9, nrow=3)) (B = matrix(seq(2,18, 2), nrow=3)) A + B 4*A A - B # OBTENDO A TRANSPOSTA DE UMA MATRIZ t(A) # OBS: a função t também pode ser usada para transpor data frames t(alunos[1:5,1:8]) # ou tabelas: t(table(Sexo,Lazer)) # REALIZANDO MULTIPLICAÇÃO ENTRE MATRIZES A%*%B # é diferente de: A*B # CALCULANDO A SOMA DE ELEMENTOS DE UMA MATRIZ c(1, 1, 1) %*% A # somando por coluna A %*% c(1, 1, 1) # somando por linha # CALCULANDO A MATRIZ (X'X) X = matrix(c(rep(1,length(Altura)),Altura),ncol=2) t(X)%*%X 47 # Notas de Aulas da Disciplina Introdução ao R – página 48 # CALCULANDO O DETERMINANTE DE UMA MATRIZ (C = matrix(sample(1:9, 9, replace=T), nrow=3)) det(C) # CALCULANDO A INVERSA DE UMA MATRIZ solve(C) # OBTENDO A SOLUÇÃO DO SISTEMA Cx = b (b = c(3, 2, 1)) (x = solve(C, b)) # CALCULANDO AS ESTIMATIVAS DOS PARÂMETROS DE UM AJUSTE LINEAR, # ENTRE O PESO E A ALTURA, USANDO A FÓRMULA B=((X'X)-1)*(X'Y) attach(alunos) X = matrix(c(rep(1,length(Altura)),Altura),ncol=2) Y = Peso (B = (solve(t(X)%*%X)) %*% (t(X)%*%Y)) # ou: lm(Peso~Altura) # 8.3 – Autovalores e autovetores de uma matriz # OBTENDO OS AUTOVALORES DA MATRIZ C auto = eigen(C) auto$values # OBTENDO OS AUTOVETORES DA MATRIZ C auto$vectors # UMA APLICAÇÃO DE AUTOVALORES E AUTOVETORES AOS DADOS DOS ALUNOS attach(alunos) AlturaP=(Altura-mean(Altura))/sd(Altura) PesoP=(Peso-mean(Peso))/sd(Peso) MatrizVar=cov(matrix(c(PesoP,AlturaP),ncol=2)) auto = eigen(MatrizVar) auto$values auto$vectors auto$values[1]/sum(auto$values) auto$values[2]/sum(auto$values) par(mfrow=c(2,2)) plot(AlturaP,PesoP) #plot((AlturaP-mean(AlturaP))/sd(AlturaP),(PesoP-mean(PesoP))/sd(PesoP)) points(AlturaP[4],PesoP[4],col=2,pch=16,cex=1.5) points(AlturaP[47],PesoP[47],col=4,pch=16,cex=1.5) plot(-1:1,-1:1, type="n") abline(v=0,h=0) points(auto$vectors[1,],auto$vectors[2,],pch=16) lines(c(0,auto$vectors[1,1]),c(0,auto$vectors[2,1])) lines(c(0,auto$vectors[1,2]),c(0,auto$vectors[2,2])) CompPrinc=matrix(c(PesoP,AlturaP),ncol=2)%*%auto$vectors plot(CompPrinc) points(CompPrinc[4,1],CompPrinc[4,2],col=2,pch=16,cex=1.5) points(CompPrinc[47,1],CompPrinc[47,2],col=4,pch=16,cex=1.5) plot(CompPrinc[,1],rep(0,length(PesoP))) points(CompPrinc[4,1],0,col=2,pch=16,cex=1.5) points(CompPrinc[47,1],0,col=4,pch=16,cex=1.5) 48 # Notas de Aulas da Disciplina Introdução ao R – página 49 # EXERCÍCIO RESOLVIDO # Calcule as notas necessárias na terceira avaliação para a aprovação por # média dos alunos de uma turma, segundo o sistema de avaliação da UFRN. # SOLUÇÃO notas.2008.2=cbind(Aval1=c(0.5, 7.2, 8.2, 9.3, 6.7, 5.9, 9.8, 7.4, 9.1, 8.4, 3.7, 1.5, 9.2, 0.0, 4.2, 8.6, 5.8, 5.3, 8.4, 5.4, 0.9, 5.9, 0.4), Aval2=c(0.0, 8.1, 5.8, 8.9, 6.1, 7.4, 8.8, 7.2, 7.9, 4.7, 3.1, 2.0, 1.9, 0.0, 2.0, 6.4, 3.7, 3.9, 6.9, 4.3, 0.8, 3.8, 0.0)) (105-notas.2008.2%*%c(4,5))/6 49 # Notas de Aulas da Disciplina Introdução ao R – página 50 REFERÊNCIAS Itano, F. Santos, S. M. Tópicos de Estatística utilizando R. Disponível em <http://cran.r-project.org/doc/contrib/Itano-descriptive-stats.pdf> Acesso em 05 ago. 2008. Kabacoff, R. I. Quick-R. Disponível em <www.statmethods.net>. Acesso em 06 maio 2011. Pacheco, A. G. F., Cunha, G. M., Andreozzi, V. L. Aprendendo R. Disponível em <http://marcosfs2006.googlepages.com/Rbasico2005.pdf>. Acesso em 31 jul. 2008. Reis, A. F. Noções básicas de S-PLUS for windows. Disponível em < http://eagle.ufrj.br/~hedibert/edna.pdf> Acesso em 05 ago. 2008. Torgo, L. Introdução à Programação em R. Disponível em <http://cran.rproject.org/doc/contrib/Torgo-ProgrammingIntro.pdf> Acesso em 05 ago. 2008. Silva, D. N. Curso de introdução ao pacote estatístico R. Notas de aula, Departamento de Estatística, UFRN. 50 # Notas de Aulas da Disciplina Introdução ao R – página 51 GLOSSÁRIO: Funções do R utilizadas nestas notas != %% %*% %/% * / ? ^ + < <= == > >= abline abs apply args arrows as asin acos apropos atan attach axis barplot box boxplot by c cbind choose citation class close colnames colors contributors cor cov curve cumsum cut cumsum Operador aritmético de subtração Operador lógico "diferente de" Resto da divisão Multiplicação entre matrizes Quociente da divisão inteira Operador aritmético de multiplicação Operador aritmético de divisão Fornece acesso à documentação do R (idêntica à função help()) Operador aritmético de potenciação Operador aritmético de soma Operador lógico "menor que" Operador lógico "menor ou igual" Operador lógico "igual" Operador lógico "maior que" Operador lógico "maior ou igual" Adiciona uma ou mais linhas retas a um gráfico Valor absoluto, módulo Retorna um vetor, matriz ou lista aplicando uma determinada função a uma matriz Retorna os argumentos de uma determinada função Plota uma seta Força um objeto a assumir uma determinada classe Calcula o arco seno Calcula o arco cosseno Procura por nomes de objetos em pacotes instalados Calcula o arco tangente Acessa as variáveis de um banco de dados Adiciona um eixo ao gráfico Cria um gráfico de barras horizontal ou vertical Adiciona uma caixa ao redor do gráfico Cria um gráfico de caixas Equivalente à função tapply() Concatena elementos em um vetor Cria matriz a partir da concatenação das colunas Combinação de elementos em análise combinatória Citação de pacotes e publicações do R Retorna a classe de um objeto Fecha uma conexão aberta previamente Recupera ou define o nome de colunas de uma matriz Retorna o nome das cores que o R possui Descreve os autores das contribuições mais significativas para o R Correlação entre duas variáveis Covariância entre duas variáveis Desenha uma curva para a função determinada Retorna a soma acumulada de um vetor Transforma uma variável numérica em faixas do 51 # Notas de Aulas da Disciplina Introdução ao R – página 52 data data.frame dbeta dbinom dcauchy dchisq demo density det detach dev.interactive dev.next dev.set dexp diff dim df dgamma dgeom dhyper dlnorm dlogis dnbinom dnorm dpois dt dunif dweibull edit eigen else eval exp expression factor factorial fivenum tipo "fator" Lista um conjunto de dados disponíveis no R Cria um banco de dados Retorna valores da densidade de probabilidade da Distribuição Beta Retorna probabilidades da Distribuição Binomial Retorna valores da densidade de probabilidade da Distribuição de Cauchy Retorna valores da densidade de probabilidade da Distribuição Qui-quadrado Lista as demonstrações disponíveis no R Gera estimativas de densidades pelo método de Kernel Determinante de uma matriz Desfaz o comando attach() Testa se o gráfico é interativo Torna ativa a próxima janela gráfica Escolhe qual janela gráfica deve ficar ativa Retorna valores da densidade de probabilidade da Distribuição Exponencial Retorna as diferenças sucessivas de um vetor Recupera ou determina dimensões de um objeto Retorna valores da densidade de probabilidade da Distribuição F de Snedecor Retorna valores da densidade de probabilidade da Distribuição Gamma Retorna probabilidades da Distribuição Geométrica Retorna probabilidades da Distribuição Hipergeométrica Retorna valores da densidade de probabilidade da Distribuição Log-normal Retorna valores da densidade de probabilidade da Distribuição Logística Retorna probabilidades da Distribuição Binomial Negativa Retorna valores da densidade de probabilidade da Distribuição Normal Retorna probabilidades da Distribuição de Poisson Retorna valores da densidade de probabilidade da Distribuição t de Student Retorna valores da densidade de probabilidade da Distribuição Uniforme Retorna valores da densidade de probabilidade da Distribuição de Weibull Invoca um editor de texto para um objeto do R Determina os autovalores e autovetores de uma matriz Comando de programação com valor "então" Avalia uma expressão - expression() Calcula valores da função exponencial Cria objetos com formato de expressão Codifica um vetor como fator Fatorial de um número Fornece os "5 números": min, Q1, mediana, Q3, max 52 # Notas de Aulas da Disciplina Introdução ao R – página 53 fix for format function grid help help.start hist identify if interaction.plot is ISOdate lapply legend length LETTERS letters levels library license lines lm load loadhistory locator log log10 ls margin.table matrix max mean median min mode mosaicplot mtext names odbcConnectExcel order par Invoca o editor do R e em seguida salva as alterações no objeto Comando de programação "para" Formata dados Comando que possibilita criar uma função Adiciona grade retangular a um gráfico existente Fornece acesso à documentação do R Fornece acesso à documentação do R em .html Retorna o histograma dos valores especificados Retorna a posição de um ponto com um clique do mouse sobre o mesmo Comando de programação "se" Cria um gráfico de perfis médios Testa se o objeto pertence a uma determinada classe Converte do tipo caracter para data Aplica uma função a valores em um objeto da classe lista Adiciona uma legenda a objetos gráficos Retorna o tamanho de um objeto Constante contendo as letras maiúsculas do alfabeto Constante contendo as letras minúsculas do alfabeto Determina ou acessa os níveis de um fator Acessa pacotes do R Informações a respeito da licença para uso do R Traça linhas em um objeto gráfico Estima um modelo linear Carrega a área de trabalho guardada em um arquivo Carrega o histórico de comandos guardados em um arquivo Retorna as coordenadas de pontos com cliques do mouse sobre os mesmos Logaritmo neperiano Logaritmo na base 10 Lista os objetos contidos na área de trabalho Retorna a marginal de uma tabela Cria uma matriz Retorna o valor máximo de uma série de dados Retorna a média aritmética de uma série de dados Retorna a mediana de uma série de dados Retorna o valor mínimo de uma série de dados Classifica um objeto Gera um gráfico do tipo mosaico Escreve texto em um dos quatro lados de um gráfico Obtêm ou define nomes de um objeto Função utilizada para realizar a conexão entre o R e o MS Excel Retorna a posição que cada elemento ocupa no vetor para uma ordem crescente Define ou consulta os principais parâmetros gráficos do R 53 # Notas de Aulas da Disciplina Introdução ao R – página 54 pbeta pbinom pcauchy pchisq persp pexp pexp pf pgamma pgeom phyper pie plnorm plogis plot plot.default pnbinom pnorm points polygon ppois print prod prop.table pt punif pweibull qbeta qbinom Retorna a probabilidade acumulada à esquerda de uma Distribuição Beta Retorna a probabilidade acumulada à esquerda de uma Distribuição Binomial Retorna a probabilidade acumulada à esquerda de uma Distribuição de Cauchy Retorna a probabilidade acumulada à esquerda de uma Distribuição Qui-quadrado Gera um gráfico em terceira dimensão Retorna a probabilidade acumulada à esquerda de uma Distribuição Exponencial Retorna a probabilidade acumulada à esquerda de uma Distribuição Exponencial Retorna a probabilidade acumulada à esquerda de uma Distribuição F de Snedecor Retorna a probabilidade acumulada à esquerda de uma Distribuição Gamma Retorna a probabilidade acumulada à esquerda de uma Distribuição Geométrica Retorna a probabilidade acumulada à esquerda de uma Distribuição Hipergeométrica Gera um gráfico de setores (pizza) Retorna a probabilidade acumulada à esquerda de uma Distribuição Log-normal Retorna a probabilidade acumulada à esquerda de uma Distribuição Logística Gera um gráfico (inicialmente de dispersão) Executa funções próximas do plot(), com acesso mais detalhado no help. Ver "?plot.default" Retorna a probabilidade acumulada à esquerda de uma Distribuição Binomial Negativa Retorna a probabilidade acumulada à esquerda de uma Distribuição Normal Adiciona um ou mais pontos a um gráfico Gera polígonos em um objeto gráfico Retorna a probabilidade acumulada à esquerda de uma Distribuição de Poisson Imprime um objeto no console (default) Retorna o produto entre todos os valores de um objeto Apresenta as proporções de uma tabela gerada pela função table() Retorna a probabilidade acumulada à esquerda de uma Distribuição t de Student Retorna a probabilidade acumulada à esquerda de uma Distribuição Uniforme Retorna a probabilidade acumulada à esquerda de uma Distribuição de Weibull Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Beta Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Binomial 54 # Notas de Aulas da Disciplina Introdução ao R – página 55 qcauchy qchisq qexp qf qgamma qgeom qhyper qlnorm qlogis qnbinom qnorm qpois qqnorm qqplot qt quantile qunif qweibull range rank rbeta Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição de Cauchy Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Qui-quadrado Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Exponencial Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição F de Snedecor Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Gamma Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Geométrica Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Hipergeométrica Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Log-normal Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Logística Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Binomial Negativa Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Normal Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição de Poisson Gráfico quantil-quantil para uma Distribuição Normal Gráfico quantil-quantil Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição t de Student Retorna quantis amostrais (mediana, quartis, percentis, etc.) Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição Uniforme Retorna o quantil correspondente a uma probabilidade acumulada à esquerda de uma Distribuição de Weibull Fornece o mínimo e o máximo Retorna qual a posição que o elemento do vetor ocuparia se a sequência fosse cerscente Gera valores aleatórios com base numa Distribuição Beta 55 # Notas de Aulas da Disciplina Introdução ao R – página 56 rbind rbinom rcauchy rchisq read.spss read.ssd read.table rect rep repeat require return rev rexp rf rgamma rgeom rhyper rlnorm rlogis rm rnbinom rnorm round rownames rpois rt rug runif rweibull sapply save.image savehistory subset Acescenta linhas a uma matriz Gera valores aleatórios com base numa Distribuição Binomial Gera valores aleatórios com base numa Distribuição de Cauchy Gera valores aleatórios com base numa Distribuição Qui-quadrado Comando para lê arquivos formatado em SPSS Comando para lê arquivos formatado no SAS Comando para lê arquivos em formato de texto Cria retângulos em uma janela gráfica Repete elementos em um determinado objeto Comando de programação com o valor de "repita" Carrega um pacote do R Função atrelada criação de novas funções no R. Em geral retorna a resposta de uma função criada Inverte a ordem dos elementos de um objeto Gera valores aleatórios com base numa Distribuição Exponencial Gera valores aleatórios com base numa Distribuição F de Snedecor Gera valores aleatórios com base numa Distribuição Gamma Gera valores aleatórios com base numa Distribuição Geométrica Gera valores aleatórios com base numa Distribuição Hipergeométrica Gera valores aleatórios com base numa Distribuição Log-normal Gera valores aleatórios com base numa Distribuição Logística Remove um ou mais objetos da área de trabalho Gera valores aleatórios com base numa Distribuição Binomial Negativa Gera valores aleatórios com base numa Distribuição Normal Arredonda números Recupera ou define o nome de uma linha da matriz Gera valores aleatórios com base numa Distribuição de Poisson Gera valores aleatórios com base numa Distribuição t de Student Representa os pontos (uma dimensão) de um vetor na lateral do gráfico ativo Gera valores aleatórios com base numa Distribuição Uniforme Gera valores aleatórios com base numa Distribuição de Weibull É uma versão amigável do lapply(), retornando uma matriz ou um vetor, dependendo do caso Salva a área de trabalho de uma sessão do R Salva o histórico de digitações da área de trabalho do R Crie um subconjuto de um data frame 56 # Notas de Aulas da Disciplina Introdução ao R – página 57 scan sd search segments seq sin solve sort sqlFetch sqlSabe sqlTables sqrt stem str stripchart sum summary symbols t table tapply text transform var while win.graph with write.table x11 Ler dados para serem introduzidos em um vetor ou lista Calcula o desvio padrão Lista de pacotes disponíveis Plota um segmento de reta Gera uma sequência de valores Calcula o seno Calcula a inversa de uma matriz Retorna o vetor ou fator em ordem crescente ou decrescente Funções usadas para importação e/ou exportação de dados Funções usadas para importação e/ou exportação de dados Funções usadas para importação e/ou exportação de dados Rair quadrada de um valor Produz ramo-e-folhas Fornece informações (resumo) de um objeto Gráfico de pontos de uma variável quantitativa segundo uma variável categórica Retorna o somatório de uma séria e dados Calcula algumas estatísticas básicas Gera símbolos diversos Transposta de uma matriz Gera uma tabela simples ou de dupla entrada Aplica uma determinada função a uma variável segundo os níveis de um fator Adiciona um texto a um gráfico em coordenadas especificadas Modifica um data frame Retorna a variância de uma série de dados Comando de programação com a valor de "enquanto" Abre uma janela gráfica vazia Executa uma função (expressão) usando os dados contidos em uma coluna de um data frame ou em um elemento de uma lista, etc. Exporta dados para o formato texto Abre uma janela gráfica vazia 57