notas de aulas da disciplina introdução ao rpetestatisticaufrn.weebly.com/uploads/8/3/6/6/... ·...
TRANSCRIPT
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
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
# Notas de Aulas da Disciplina Introdução ao R – página 2
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
# Notas de Aulas da Disciplina Introdução ao R – página 3
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")
# 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")
# 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()
x
y
z
# Notas de Aulas da Disciplina Introdução ao R – página 4
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...
# Notas de Aulas da Disciplina Introdução ao R – página 5
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() # list all available data sets
?women # 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) # ou, igualmente:
curve(sin, -2*pi, 3*pi)
# 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
# Notas de Aulas da Disciplina Introdução ao R – página 6
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.
# Notas de Aulas da Disciplina Introdução ao R – página 7
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) # ou:
dnorm(2.5)
dnorm(-2.5)
# Notas de Aulas da Disciplina Introdução ao R – página 8
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.
VancouverHainanPrince of WalesTimorKyushuTaiwanNew BritainSpitsbergenAxel HeibergMelvilleSouthamptonTierra del FuegoDevonBanksCelonTasmaniaMoluccasSakhalinHispaniolaHokkaidoNovaya ZemlyaIrelandMindanaoIcelandLuzonCubaNewfoundlandNew Zealand (N)JavaNew Zealand (S)CelebesEllesmereVictoriaBritainHonshuSumatraBaffinMadagascarBorneoNew GuineaGreenlandAustraliaEuropeAntarcticaSouth AmericaNorth AmericaAfricaAsia
1.0 1.5 2.0 2.5 3.0 3.5 4.0
islands data: log10(area) (log10(sq. miles))
# Notas de Aulas da Disciplina Introdução ao R – página 9
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)
# Notas de Aulas da Disciplina Introdução ao R – página 10
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) # Caso haja erro, o pacote deve ser instalado
?read.spss # importa arquivo do SPSS
?read.ssd # 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
# Notas de Aulas da Disciplina Introdução ao R – página 11
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)
# Notas de Aulas da Disciplina Introdução ao R – página 12
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)) # ou: s=sd(peso)
s
# 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))
}
# Notas de Aulas da Disciplina Introdução ao R – página 13
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
# Notas de Aulas da Disciplina Introdução ao R – página 14
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 # ou: dados1[2,1]=19
dados1
# 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"
# Notas de Aulas da Disciplina Introdução ao R – página 15
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
# Notas de Aulas da Disciplina Introdução ao R – página 16
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 # "$" pode ser usado em data frame...
A$X2 # ...mas não em matriz
class(dad)
class(A)
# 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).
# Notas de Aulas da Disciplina Introdução ao R – página 17
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 # ou: lista2[[2]]
lista2$Y[4] # ou: lista2[[2]][4]
lista3$Matriz # é diferente de: lista3$A
lista3[[1]]$Nomes[3] # 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)
# Notas de Aulas da Disciplina Introdução ao R – página 18
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)]
# Notas de Aulas da Disciplina Introdução ao R – página 19
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)
# Notas de Aulas da Disciplina Introdução ao R – página 20
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
# Notas de Aulas da Disciplina Introdução ao R – página 21
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)
# 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
-1.0
-0.5
0.0
0.5
1.0
x
x (x
)
5 10 15 20 25
1020
3040
50
x
x (x
)
150 160 170 180 190
4050
6070
8090
100
Altura
Pes
o
F M
4050
6070
8090
100
Sexo
Pes
o
# Notas de Aulas da Disciplina Introdução ao R – página 22
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") # igual a:
text(1, 2, "Texto")
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)
# Notas de Aulas da Disciplina Introdução ao R – página 23
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)
# Notas de Aulas da Disciplina Introdução ao R – página 24
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
# Notas de Aulas da Disciplina Introdução ao R – página 25
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)
# Notas de Aulas da Disciplina Introdução ao R – página 26
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)
# Notas de Aulas da Disciplina Introdução ao R – página 27
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.
# Notas de Aulas da Disciplina Introdução ao R – página 28
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.
-1.0 -0.5 0.0 0.5 1.0
-1.0
-0.5
0.0
0.5
1.0
1
2
3
4
5
6
7
8
9
10
11
12
Relógio
2003 2004 2005 2006 2007 2008
01
02
03
04
0
Ano de Ingresso
Nú
me
ro d
e fa
lta
s
Aval. 1
Aval. 2
Aval. 3
Legenda:
Média das avaliações dos alunos de Introdução ao R
segundo ano de ingresso e número médio de faltas
0 2 4 6 8 10
02
46
81
0
Nota na primeira avaliação versus nota na segunda avaliação
segundo o número de faltas
Nota na primeira avaliação
No
ta n
a s
eg
un
da
ava
lia
çã
o
Nota: o tamanho do ponto corresponde ao número de faltas
150 160 170 180 190
40
50
60
70
80
90
10
0
Peso x Alutra dos Alunos de Estatística
Altura
Pe
so
(peso, altura) da professora
# Notas de Aulas da Disciplina Introdução ao R – página 29
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")
}
# Notas de Aulas da Disciplina Introdução ao R – página 30
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))
# Notas de Aulas da Disciplina Introdução ao R – página 31
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
# Notas de Aulas da Disciplina Introdução ao R – página 32
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
Dado 3 Dado 4
5 10 15
color palettes; n= 16
i
rainbow(n, start=.7, end=.1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
heat.colors(n)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
terrain.colors(n)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
topo.colors(n)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
cm.colors(n)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
colors()[1:n]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
colors()[(n+1):(n+16)]
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
# Notas de Aulas da Disciplina Introdução ao R – página 33
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
# Notas de Aulas da Disciplina Introdução ao R – página 34
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")
# Notas de Aulas da Disciplina Introdução ao R – página 35
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")
# Notas de Aulas da Disciplina Introdução ao R – página 36
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")
# Notas de Aulas da Disciplina Introdução ao R – página 37
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")
# Notas de Aulas da Disciplina Introdução ao R – página 38
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")
# Notas de Aulas da Disciplina Introdução ao R – página 39
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.
# Notas de Aulas da Disciplina Introdução ao R – página 40
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.
# Notas de Aulas da Disciplina Introdução ao R – página 41
41
# 4) Usando as funções dedicadas à distribuição Exponencial, dentre
# outras, reproduza uma figura semelhante à seguinte.
# Notas de Aulas da Disciplina Introdução ao R – página 42
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)
# Notas de Aulas da Disciplina Introdução ao R – página 43
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, pch=15)
title("Sexo")
# 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")
# Notas de Aulas da Disciplina Introdução ao R – página 44
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")
# Notas de Aulas da Disciplina Introdução ao R – página 45
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")
# Notas de Aulas da Disciplina Introdução ao R – página 46
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.
# Notas de Aulas da Disciplina Introdução ao R – página 47
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
# Notas de Aulas da Disciplina Introdução ao R – página 48
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)
# Notas de Aulas da Disciplina Introdução ao R – página 49
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
# Notas de Aulas da Disciplina Introdução ao R – página 50
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.r-
project.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.
# Notas de Aulas da Disciplina Introdução ao R – página 51
51
GLOSSÁRIO: Funções do R utilizadas nestas notas
- 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"
abline Adiciona uma ou mais linhas retas a um gráfico
abs Valor absoluto, módulo
apply Retorna um vetor, matriz ou lista aplicando uma
determinada função a uma matriz
args Retorna os argumentos de uma determinada função
arrows Plota uma seta
as Força um objeto a assumir uma determinada classe
asin Calcula o arco seno
acos Calcula o arco cosseno
apropos Procura por nomes de objetos em pacotes
instalados
atan Calcula o arco tangente
attach Acessa as variáveis de um banco de dados
axis Adiciona um eixo ao gráfico
barplot Cria um gráfico de barras horizontal ou vertical
box Adiciona uma caixa ao redor do gráfico
boxplot Cria um gráfico de caixas
by Equivalente à função tapply()
c Concatena elementos em um vetor
cbind Cria matriz a partir da concatenação das colunas
choose Combinação de elementos em análise combinatória
citation Citação de pacotes e publicações do R
class Retorna a classe de um objeto
close Fecha uma conexão aberta previamente
colnames Recupera ou define o nome de colunas de uma
matriz
colors Retorna o nome das cores que o R possui
contributors Descreve os autores das contribuições mais
significativas para o R
cor Correlação entre duas variáveis
cov Covariância entre duas variáveis
curve Desenha uma curva para a função determinada
cumsum Retorna a soma acumulada de um vetor
cut cumsum Transforma uma variável numérica em faixas do
# Notas de Aulas da Disciplina Introdução ao R – página 52
52
tipo "fator"
data Lista um conjunto de dados disponíveis no R
data.frame Cria um banco de dados
dbeta Retorna valores da densidade de probabilidade da
Distribuição Beta
dbinom Retorna probabilidades da Distribuição Binomial
dcauchy Retorna valores da densidade de probabilidade da
Distribuição de Cauchy
dchisq Retorna valores da densidade de probabilidade da
Distribuição Qui-quadrado
demo Lista as demonstrações disponíveis no R
density Gera estimativas de densidades pelo método de
Kernel
det Determinante de uma matriz
detach Desfaz o comando attach()
dev.interactive Testa se o gráfico é interativo
dev.next Torna ativa a próxima janela gráfica
dev.set Escolhe qual janela gráfica deve ficar ativa
dexp Retorna valores da densidade de probabilidade da
Distribuição Exponencial
diff Retorna as diferenças sucessivas de um vetor
dim Recupera ou determina dimensões de um objeto
df Retorna valores da densidade de probabilidade da
Distribuição F de Snedecor
dgamma Retorna valores da densidade de probabilidade da
Distribuição Gamma
dgeom Retorna probabilidades da Distribuição Geométrica
dhyper Retorna probabilidades da Distribuição
Hipergeométrica
dlnorm Retorna valores da densidade de probabilidade da
Distribuição Log-normal
dlogis Retorna valores da densidade de probabilidade da
Distribuição Logística
dnbinom Retorna probabilidades da Distribuição Binomial
Negativa
dnorm Retorna valores da densidade de probabilidade da
Distribuição Normal
dpois Retorna probabilidades da Distribuição de Poisson
dt Retorna valores da densidade de probabilidade da
Distribuição t de Student
dunif Retorna valores da densidade de probabilidade da
Distribuição Uniforme
dweibull Retorna valores da densidade de probabilidade da
Distribuição de Weibull
edit Invoca um editor de texto para um objeto do R
eigen Determina os autovalores e autovetores de uma
matriz
else Comando de programação com valor "então"
eval Avalia uma expressão - expression()
exp Calcula valores da função exponencial
expression Cria objetos com formato de expressão
factor Codifica um vetor como fator
factorial Fatorial de um número
fivenum Fornece os "5 números": min, Q1, mediana, Q3, max
# Notas de Aulas da Disciplina Introdução ao R – página 53
53
fix Invoca o editor do R e em seguida salva as
alterações no objeto
for Comando de programação "para"
format Formata dados
function Comando que possibilita criar uma função
grid Adiciona grade retangular a um gráfico existente
help Fornece acesso à documentação do R
help.start Fornece acesso à documentação do R em .html
hist Retorna o histograma dos valores especificados
identify Retorna a posição de um ponto com um clique do
mouse sobre o mesmo
if Comando de programação "se"
interaction.plot Cria um gráfico de perfis médios
is Testa se o objeto pertence a uma determinada
classe
ISOdate Converte do tipo caracter para data
lapply Aplica uma função a valores em um objeto da
classe lista
legend Adiciona uma legenda a objetos gráficos
length Retorna o tamanho de um objeto
LETTERS Constante contendo as letras maiúsculas do
alfabeto
letters Constante contendo as letras minúsculas do
alfabeto
levels Determina ou acessa os níveis de um fator
library Acessa pacotes do R
license Informações a respeito da licença para uso do R
lines Traça linhas em um objeto gráfico
lm Estima um modelo linear
load Carrega a área de trabalho guardada em um arquivo
loadhistory Carrega o histórico de comandos guardados em um
arquivo
locator Retorna as coordenadas de pontos com cliques do
mouse sobre os mesmos
log Logaritmo neperiano
log10 Logaritmo na base 10
ls Lista os objetos contidos na área de trabalho
margin.table Retorna a marginal de uma tabela
matrix Cria uma matriz
max Retorna o valor máximo de uma série de dados
mean Retorna a média aritmética de uma série de dados
median Retorna a mediana de uma série de dados
min Retorna o valor mínimo de uma série de dados
mode Classifica um objeto
mosaicplot Gera um gráfico do tipo mosaico
mtext Escreve texto em um dos quatro lados de um
gráfico
names Obtêm ou define nomes de um objeto
odbcConnectExcel Função utilizada para realizar a conexão entre o
R e o MS Excel
order Retorna a posição que cada elemento ocupa no
vetor para uma ordem crescente
par Define ou consulta os principais parâmetros
gráficos do R
# Notas de Aulas da Disciplina Introdução ao R – página 54
54
pbeta Retorna a probabilidade acumulada à esquerda de
uma Distribuição Beta
pbinom Retorna a probabilidade acumulada à esquerda de
uma Distribuição Binomial
pcauchy Retorna a probabilidade acumulada à esquerda de
uma Distribuição de Cauchy
pchisq Retorna a probabilidade acumulada à esquerda de
uma Distribuição Qui-quadrado
persp Gera um gráfico em terceira dimensão
pexp Retorna a probabilidade acumulada à esquerda de
uma Distribuição Exponencial
pexp Retorna a probabilidade acumulada à esquerda de
uma Distribuição Exponencial
pf Retorna a probabilidade acumulada à esquerda de
uma Distribuição F de Snedecor
pgamma Retorna a probabilidade acumulada à esquerda de
uma Distribuição Gamma
pgeom Retorna a probabilidade acumulada à esquerda de
uma Distribuição Geométrica
phyper Retorna a probabilidade acumulada à esquerda de
uma Distribuição Hipergeométrica
pie Gera um gráfico de setores (pizza)
plnorm Retorna a probabilidade acumulada à esquerda de
uma Distribuição Log-normal
plogis Retorna a probabilidade acumulada à esquerda de
uma Distribuição Logística
plot Gera um gráfico (inicialmente de dispersão)
plot.default Executa funções próximas do plot(), com acesso
mais detalhado no help. Ver "?plot.default"
pnbinom Retorna a probabilidade acumulada à esquerda de
uma Distribuição Binomial Negativa
pnorm Retorna a probabilidade acumulada à esquerda de
uma Distribuição Normal
points Adiciona um ou mais pontos a um gráfico
polygon Gera polígonos em um objeto gráfico
ppois Retorna a probabilidade acumulada à esquerda de
uma Distribuição de Poisson
print Imprime um objeto no console (default)
prod
Retorna o produto entre todos os valores de um
objeto
prop.table Apresenta as proporções de uma tabela gerada pela
função table()
pt Retorna a probabilidade acumulada à esquerda de
uma Distribuição t de Student
punif Retorna a probabilidade acumulada à esquerda de
uma Distribuição Uniforme
pweibull Retorna a probabilidade acumulada à esquerda de
uma Distribuição de Weibull
qbeta Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Beta
qbinom Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Binomial
# Notas de Aulas da Disciplina Introdução ao R – página 55
55
qcauchy Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição de Cauchy
qchisq Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Qui-quadrado
qexp Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Exponencial
qf Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição F de Snedecor
qgamma Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Gamma
qgeom Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Geométrica
qhyper Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Hipergeométrica
qlnorm Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Log-normal
qlogis Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Logística
qnbinom Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Binomial Negativa
qnorm Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Normal
qpois Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição de Poisson
qqnorm Gráfico quantil-quantil para uma Distribuição
Normal
qqplot Gráfico quantil-quantil
qt Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição t de Student
quantile Retorna quantis amostrais (mediana, quartis,
percentis, etc.)
qunif Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição Uniforme
qweibull Retorna o quantil correspondente a uma
probabilidade acumulada à esquerda de uma
Distribuição de Weibull
range Fornece o mínimo e o máximo
rank Retorna qual a posição que o elemento do vetor
ocuparia se a sequência fosse cerscente
rbeta Gera valores aleatórios com base numa
Distribuição Beta
# Notas de Aulas da Disciplina Introdução ao R – página 56
56
rbind Acescenta linhas a uma matriz
rbinom Gera valores aleatórios com base numa
Distribuição Binomial
rcauchy Gera valores aleatórios com base numa
Distribuição de Cauchy
rchisq Gera valores aleatórios com base numa
Distribuição Qui-quadrado
read.spss Comando para lê arquivos formatado em SPSS
read.ssd Comando para lê arquivos formatado no SAS
read.table Comando para lê arquivos em formato de texto
rect Cria retângulos em uma janela gráfica
rep Repete elementos em um determinado objeto
repeat Comando de programação com o valor de "repita"
require Carrega um pacote do R
return Função atrelada criação de novas funções no R. Em
geral retorna a resposta de uma função criada
rev Inverte a ordem dos elementos de um objeto
rexp Gera valores aleatórios com base numa
Distribuição Exponencial
rf Gera valores aleatórios com base numa
Distribuição F de Snedecor
rgamma Gera valores aleatórios com base numa
Distribuição Gamma
rgeom Gera valores aleatórios com base numa
Distribuição Geométrica
rhyper Gera valores aleatórios com base numa
Distribuição Hipergeométrica
rlnorm Gera valores aleatórios com base numa
Distribuição Log-normal
rlogis Gera valores aleatórios com base numa
Distribuição Logística
rm Remove um ou mais objetos da área de trabalho
rnbinom Gera valores aleatórios com base numa
Distribuição Binomial Negativa
rnorm Gera valores aleatórios com base numa
Distribuição Normal
round Arredonda números
rownames Recupera ou define o nome de uma linha da matriz
rpois Gera valores aleatórios com base numa
Distribuição de Poisson
rt Gera valores aleatórios com base numa
Distribuição t de Student
rug Representa os pontos (uma dimensão) de um vetor
na lateral do gráfico ativo
runif Gera valores aleatórios com base numa
Distribuição Uniforme
rweibull Gera valores aleatórios com base numa
Distribuição de Weibull
sapply É uma versão amigável do lapply(), retornando uma
matriz ou um vetor, dependendo do caso
save.image Salva a área de trabalho de uma sessão do R
savehistory Salva o histórico de digitações da área de
trabalho do R
subset Crie um subconjuto de um data frame
# Notas de Aulas da Disciplina Introdução ao R – página 57
57
scan Ler dados para serem introduzidos em um vetor ou
lista
sd Calcula o desvio padrão
search Lista de pacotes disponíveis
segments Plota um segmento de reta
seq Gera uma sequência de valores
sin Calcula o seno
solve Calcula a inversa de uma matriz
sort Retorna o vetor ou fator em ordem crescente ou
decrescente
sqlFetch Funções usadas para importação e/ou exportação de
dados
sqlSabe Funções usadas para importação e/ou exportação de
dados
sqlTables Funções usadas para importação e/ou exportação de
dados
sqrt Rair quadrada de um valor
stem Produz ramo-e-folhas
str Fornece informações (resumo) de um objeto
stripchart Gráfico de pontos de uma variável quantitativa
segundo uma variável categórica
sum Retorna o somatório de uma séria e dados
summary Calcula algumas estatísticas básicas
symbols Gera símbolos diversos
t Transposta de uma matriz
table Gera uma tabela simples ou de dupla entrada
tapply Aplica uma determinada função a uma variável
segundo os níveis de um fator
text Adiciona um texto a um gráfico em coordenadas
especificadas
transform Modifica um data frame
var Retorna a variância de uma série de dados
while Comando de programação com a valor de "enquanto"
win.graph Abre uma janela gráfica vazia
with
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.
write.table Exporta dados para o formato texto
x11 Abre uma janela gráfica vazia