R – Conceitos Básicos Monitoria de Estatística e Probabilidade para Computação 2 Introdução ao R R é um linguagem (ambiente) de programação para computação estatística e gráfica Baseada na linguagem S (S-Plus) O ambiente R é flexível Pode ser estendido através de pacotes Open source e gratuito Homepage do projeto: http://cran.r-project.org/ Utilizando o R 3 Introdução ao R No projeto, pode ser usado tanto o R em console ou para Windows, quanto IDEs IDE recomendada: Rstudio (http://www.rstudio.com/) Disponível para Windows, Linux e Ubuntu Instalado apenas nos PCs dos Grads 1 e 5 Utilizando o R 4 Instalando o R O pacote R e os principais manuais podem ser obtidos a partir do site http://cran.r-project.org/ ou em um mirror Versões para Windows, Linux e Mac No Ubuntu, basta instalar a partir da central de aplicativos, ou executar no terminal: sudo apt-get install r-base Utilizando o R 5 Utilizando o R pela primeira vez O R é tanto uma linguagem de linha de comando quanto de execução de scripts Ou seja, é possível executar comandos como um terminal, e também desenvolver e executar scripts No Windows, a interface contém um terminal e um editor de scripts No Linux, o R só é acessível pelo terminal (digite R para abrir) Executando linhas de comando Atalho: Ctrl + R (Windows) Utilizando o R 6 RGui Console Editor de Scripts Utilizando o R 7 RStudio Editor de scripts Variáveis/ Histórico de comandos Console Arquivos/ Plots/ Pacotes/ Ajuda Utilizando o R 8 Primeiros passos Atribuições de variáveis > a = 2 + 2 > string = "Hello World" > a <- 2 + 2 > 2 + 2 -> a Para ver o conteúdo de uma variável > a [1] 4 > print(a) [1] 4 > string [1] "Hello World" Utilizando o R 9 Tipos básicos de dados Numérico > a = 2 + 2 > b = 7 / 0 # Infinite value > c = 0 / 0 # Not a Number Caractere > c = "Hello World" Lógico > d = (7 > 3) NA # Not avaliable Obs.: para se determinar o tipo de uma variável, pode-se usar as funções mode(), typeof() ou class() Utilizando o R 10 Observações importantes Comandos são separados por “;” ou por novas linhas b = 2 + 2; print(b) [1] 4 Para ajuda > help(<nome do comando>) > ?<nome do comando> Se não sabe o nome corretamente > help.search("<parte do comando>") > apropos("parte do nome do comando") Utilizando o R 11 Operadores R suporta uma série de operadores matemáticos para variáveis numéricas, bem como operadores lógicos para variáveis booleanas +, -, *, /, ^, %/% (divisão inteira), %% (mod) > , >=, < , <=, ==, != &, |, ! Os operadores podem ser utilizados tanto em valores únicos quanto em vetores! Obs.: para concatenação de strings, utilize a função paste() Utilizando o R 12 Vetores Entrando com dados com "c"oncatenate > valores = c(6, 7, 4, 3, 2, 0, 0, 6) > valores [1] 6 7 4 3 2 0 0 6 Inserindo e editando variáveis > data.entry(x) > x = de(x) > x = edit(x) Utilizando o R 13 Vetores Selecionando valores de vetores > valores[1] # O índice da primeira posição do vetor é 1 [1] 6 > valores[4] [1] 3 > valores[3:5] [1] 3 2 0 > valores[-3] # Seleciona todos os valores, menos o terceiro [1] 6 7 3 2 0 0 6 Todos os dados são armazenados no R como vetores > a = 4 > a[1] [1] 4 Utilizando o R 14 Gerando valores automaticamente > vetor <- c(1:9) > vetor = (1:9) > vetor = (9:1) > seq(1, 9, by = 2) > seq(1, 9, by = pi) > seq(1, 9, by = 0.5) > rep(1, 10) > rep(vetor, 5) > rep(vetor, each = 5) Utilizando o R 15 Compreensão de listas > peso = c(60, 72, 57, 90, 95, 72) > altura = c(1.75, 1.80, 1.65, 1.90, 1.74, 1.91) > nome = c("jó", "josé", "joão", "zé", "noé", "mané") > peso > 70 > peso [peso > 70] > nome [(peso > 70)] > nome [(peso > 70) & (peso < 80)] > IMC = peso / altura ^ 2 > Nome [IMC > 25] Utilizando o R 16 Operações básicas com vetores Somatório sum(<variável>) Produtório prod(<variável>) Tamanho do vetor length(<variável>) Ordenação sort(<variável>) Valor absoluto abs(<variável>) Raiz quadrada sqrt(<variável>) Valor mínimo min(<variável>) Valor máximo max(<variável>) Utilizando o R 17 Operações estatísticas Média aritmética mean(<nome do vetor>) Mediana median(<nome do vetor>) Variância var(<nome do vetor>, na.rm = FALSE) Desvio padrão sd(<nome do vetor>, na.rm = FALSE) se na = TRUE, os missing values serão removidos Utilizando o R 18 Exemplos Média aritmética mean(peso) ou media = sum(peso) / length(peso) Mediana median(<nome do vetor>) Desvio padrão e variância sd(peso) ou mediaPeso = sum(peso) / length(peso) sqrt(sum((peso - mediaPeso) ^ 2)/ (length(peso) - 1)) Utilizando o R 19 Missing values Algumas operações podem retornar resultados "inexistentes", chamados “missing values” Inf: infinito positivo -Inf: infinito negativo NA: "Not Available“ Existem funções para testar se algum desses valores foi retornado, onde x pode ser um vetor: is.finite(x) is.infinite(x) is.na(x) O retorno dessas funções é um Booleano, definido em R como TRUE ou FALSE Utilizando o R 20 Distribuições de variáveis O R suporta uma variedade de distribuições (Normal, Binomial, Poisson, tStudent, etc.) Para consultar todas as distribuições disponíveis, digite “?distributions” no console Verifique os parâmetros de cada distribuição Para cada distribuição, o R possui 4 funções. Por exemplo, para a Normal: dnorm – função de densidade pnorm – função de probabilidade qnorm – função quantil rnorm – geração de um número aleatório Utilizando o R 21 Exemplos de uso do R Problema 1 – suponha que você anota a quilometragem do carro a cada abastecimento de 30 litros. As últimas anotações foram: 65311 65624 65908 66219 66499 66821 67145 67447 Qual o consumo médio do seu carro por litro? km = c(65311, 65624, 65908, 66219, 66499, 66821, 67145, 67447) x = diff(km) mean(x/30) Utilizando o R 22 Exemplos de uso do R Problema 2 – Uma pesquisa pergunta se as pessoas fumam ou não. As respostas foram: x = c("Yes", "No", "No", "Yes", "Yes", "No", "No", "Yes") Verificando a frequência table(x) factor(x) # verifica os níveis dos dados Utilizando o R 23 Lendo arquivos de dados O arquivo datafile.dat é composto pelos seguintes dados: tamanho lote de terra homens/hora 30 73 20 50 60 128 80 170 40 87 50 108 60 135 30 69 70 148 60 132 Utilizando o R 24 Lendo arquivos de dados Antes de ler arquivos, nós precisamos estabelecer o diretório de trabalho, através do comando setwd() (set work directory) > setwd("c:/temp") Observação no Windows O R se confunde se você usar um caminho como: “c:\mydocuments\myfile.txt” Isto se deve ao R enxergar a "\"com outra funcionalidade. Use: “c:\\mydocuments\\myfile.txt” ou “c:/mydocuments/myfile.txt” Utilizando o R 25 Lendo arquivos de dados Para ler arquivos com nomes de colunas na primeira linha, use > dataset <- read.table ("datafile.dat", header = TRUE) Para obter os vetores > dataset$tamanho_lote > dataset$homens_hora Utilizando o R 26 Lendo arquivos – parte II Para ler arquivos SEM nomes de colunas na primeira linha, use > dataset <- scan ("datafile2.dat", what = list (x = 0, y = 0)) Obs: a variável ficará no formato de lista, e não de tabela. Para obter os vetores > dataset$x > dataset$y Utilizando o R 27 Lendo dados – parte III > stack.dat <- scan(what = list(tamanho_lote = 0, homens_hora = 0)) 30 73 20 50 60 128 80 170 40 87 50 108 60 135 > attach(stack.dat) > stack.dat$tamanho_lote > stack.dat$homens_hora Os comandos acima podem ser inseridos em um arquivo ou diretamente a partir da linha de comando do R Utilizando o R 28 Referências úteis Manuais no site do projeto CRAN (http://cran.r-project.org/) Página wiki do projeto CRAN (http://wiki.r-project.org/) Site de busca http://www.rseek.org/ Tutoriais: http://www.statmethods.net/ http://www.cyclismo.org/tutorial/R/index.html http://www.r-tutor.com/ http://tryr.codeschool.com/ Utilizando o R 29 Exercício 1 Defina um diretório de trabalho que contenha os DataFiles disponibilizados pela monitoria (sugestão: C:\Temp). Leia o arquivo datafile1.dat (ou datafile2.dat) Calcule a média de tamanho_lote e homens_hora Calcule o desvio padrão de tamanho_lote e homens_hora Escreva um comando para mostrar o tamanho do lote que tem o maior número de homens/hora Utilizando o R 30 Exercício 2 O arquivo datafile3.dat é composto por dados que representam o nome do aluno e a natureza do ensino de nível médio Através da compreensão de listas, crie um vetor que contém os alunos que estudam em escola pública e outro que estudam em escola privada Desafio: crie uma tabela que mostre a quantidade de alunos desse arquivo que estuda em escola pública e privada Utilizando o R 31 Exercício 3 (montgomery) Um motor de foguete é fabricado unindo um propelente de ignição a um propelente para manter o foguete em vôo. O poder da força da junção dos propelentes é uma característica de qualidade importante. Suspeita-se que o "poder" dessa força está relacionado com a "idade" do recipiente do propelente. O arquivo de dados datafile4.dat contém os dados relativos a 20 observações da força da junção comparados com a idade do recipiente do propelente. Utilizando o R 32 Exercício 3 (montgomery) Encontre a média dos dois vetores de dados Para verificar se o poder do propelente está realmente relacionado com a sua idade, compare a média da força de junção (shear strength) dos propelentes com idades abaixo da média com a média da força de junção dos propelentes com idades acima da média. Como seria o código escrito em R para esta verificação? Teste se, em vez da média, nós separássemos a idade dos propelentes de acordo com a mediana. O resultado seria o mesmo? Utilizando o R 33 Dúvidas? Monitoria de Estatística e Probabilidade para Computação Utilizando o R 34 Projeto de R Análise estatística de um conjunto de dados Escolha de duas variáveis: uma discreta e outra contínua Medidas estatísticas (média, moda, mediana...) Histogramas, tabelas de frequência Intervalos de confiança Entre outros... Especificação completa do projeto estará disponível em: www.cin.ufpe.br/~et586cc Utilizando o R 35 Projeto de R Grupos Cinco (5) pessoas (no máximo!) O grupo poderá ser o mesmo dos miniprojetos. Serão disponibilizadas bases de dados para que os grupos possam trabalhar em cima delas (se o grupo tiver alguma sugestão, pode ser enviada) Entrega Datas de entrega e apresentação serão definidas na especificação Utilizando o R 36 Mais dúvidas? (agora sim o slide acabou =P) Monitoria de Estatística e Probabilidade para Computação Utilizando o R