Notas de Aulas da Disciplina Introdução ao R

Transcrição

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

Documentos relacionados