Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Sumário
1. Introdução ............................................................................................................................... 4
2.1. Windows........................................................................................................................... 6
3. Layout do R........................................................................................................................... 19
5. Script no R ............................................................................................................................ 23
6. Pacotes do R .......................................................................................................................... 25
7. A ajuda do R ......................................................................................................................... 30
8.3.2. Matrizes................................................................................................................... 35
9. Indexação no R ..................................................................................................................... 41
19.1.1. Média................................................................................................................... 88
19.1.3. Moda.................................................................................................................... 89
1. Introdução
O uso de softwares e pacotes estatísticos para análise de dados é de grande importância, desde
Dentre os softwares de domínio público, um em especial tem ganhado destaque e cada vez
mais adeptos e colaboradores têm ajudado para o seu desenvolvimento. Este software é conhecido
programação estatística mais utilizada no mundo, além disso é gratuito, tem código fonte aberto,
➔ Fornece uma coleção grande, coerente e integrada de ferramentas para análises de dados;
O R é uma importante ferramenta na análise e manipulação de dados, por apresentar uma gama
de ferramentas como testes paramétricos e não paramétricos, modelagem linear e não linear,
2. Como instalar o R
Além da plataforma R existe a opção mais interativa conhecida como RStudio que pode ser obtido
2.1. Windows
1 – Acesse a página do R.
2 – Clique sobre a palavra CRAN (repositório) na seção download da barra de menu à esquerda
arquivo de instalação.
3 – Nesta nova página selecione o sistema operacional utilizado em seu computador. Para
Windows ME ou Windows XP selecione a opção Windows (95 and later). Clique então na palavra
base para transferir o arquivo principal de instalação, ou sobre a palavra contrib para escolher
4 – Nesta nova página encontramos o arquivo de instalação principal e algumas outras informações
sobre instalação e novidades com relação aos lançamentos anteriores. Clique então sobre o link
5 – Na nova janela clique na opção referente a salvar arquivo e selecione a pasta onde o arquivo
será salvo.
6 – Localize o arquivo que foi salvo e clique nele. A seguir selecione a linguagem e clique em OK.
8 – Em seguida leia o contrato de Licença de Uso e, caso aceite, clique sobre Eu aceito os termos
9 – Selecione a pasta onde o R será instalado, ou caso aceite a sugestão do programa de instalação,
10 – Existem algumas opções de seleção dos arquivos para instalação, como documentação de
ajuda, manuais, etc. Se estiver instalando o R pela primeira vez, selecione o tipo de instalação
11 – Escolha o nome da pasta para o atalho que será criado no menu iniciar, ou aceite a sugestão
e clique em avançar.
13 – Em seguida aparecerá uma tela para você marcar se deseja criar um ícone do R na área de
trabalho além de outras opções. Selecione aquelas que desejar e clique em avançar.
programa.
5 - Será exibida uma página com a recomendação para você baixar o RStudio 0.99.467 - Windows
Vista/7/8.
7 - Depois é só clicar no setup que foi salvo e começar a instalar. Clique em next.
Após a instalação, você pode abrir o RStudio pelo ícone, e o estará pronto para ser utilizado.
2.3. OS X ou Linux
2 – Caso seja solicitado a instalação do pacote “libjpeg62”, basta inserir o nome do pacote no
comando citado acima. Vale ressaltar que, para utilizar o RStudio, a versão do R deve ser igual
ou superior a v.2.11.1.
comando anterior:
4 - A instalação do RStudio, por ser disponibilizado em formato binário (.deb), basta estar na pasta
5 - Uma vez executado, é preciso entender e se adaptar ao novo sistema que agora permite
visualizar, não apenas o console do R, mas também visualizar os gráficos gerados, todos os objetos
do workspace e etc., no mesmo ambiente através de diferentes janelas que podem ser configuradas
3. Layout do R
O layout do R é bem simples. Onde apenas a tela de console é exibida na tela inicial do R.
Nesta tela o usuário pode digitar diretamente nela e todos os resultados também serão
mostrados nela. Além disso o usuário pode digitar em uma tela especial chamada script (Editor do
Já o RStudio apresenta quatro telas na sua interface inicial: A tela do console e a tela do
script que são iguais as telas do R, e tela do history que mostra todas as funções que foram
executadas no RStudio e a tela onde são exibidos os arquivos (file), os gráficos (plot), os pacotes
Na barra de ferramentas do R existe basicamente cinco abas: Arquivos, Editar, Pacotes, Janelas
e Ajuda.
Na aba de arquivos o usuário pode criar um script, abrir um novo script, fechar um script que
já não está sendo usado, e salvar um script que ainda não foi salvo ou a tela do console do R.
Quando se salva a tela do console do R todas as funções que foram executadas e arquivos criados
ficam salvos.
Na aba Editar é possível recortar, copiar, colar ou excluir qualquer parte de um script ou
texto escrito no console. Ainda tem as opções executar linha de comando (Ctrl + R), selecionar
tudo (Ctrl + A), executar tudo, localizar (Ctrl + F) e substituir (Ctrl + H). Existe também a função
de limpar o console (Ctrl + L). Além disso tem a aba preferencias de interface gráfica onde o
usuário pode mudar formatação de letra, cor de fundo, entre outras funções.
Na aba Pacotes existem as opções instalar, atualizar e carregar pacotes, escolher o espelho
CRAN, selecionar repositórios. E install packages from local files que é utilizado quando o arquivo
Na aba Janelas existem as opções de posicionar as janelas (console, script, janela gráfica)
na posição desejada tais como Cascada, Dividir na Horizontal, e Dividir Lado a Lado.
Na aba Ajuda encontra-se todos os locais onde é possível buscar ajuda sobre funções e
pacotes no R tais como Manuais (em PDF), Funções R (texto), Ajuda Html, Procurar na ajuda,
5. Script no R
Uma maneira que otimiza o uso do R e que poupa muito tempo é usar um script (um arquivo
.txt) para digitar seus comandos. Neste caso, os comandos não são digitados diretamente na linha
de comandos (console do R) e sim em um editor de texto (por exemplo: R editor, notepad, tinn-
R). Um script do R é apenas um arquivo .txt onde você digitará todos os comandos e análises.
Ao usar um script você pode facilmente fazer alterações e correções em seus comandos, pois
salvando o script você poderá refazer rapidamente suas análises, por exemplo, caso algum revisor
de um de seus artigos solicite uma mudança em uma de suas análises ou em um de seus gráficos.
Para criar um script dentro do RStudio clique em File no menu do R, depois clique em
New File (Novo arquivo) e clique em R script. Uma janela será aberta (veja figura abaixo). O
script aparece com o nome de “Untitled1” (Sem título 1). Para salvar o seu script após digitar seus
comandos dê um nome ao arquivo e inclua a extensão “.R” no final do nome (p. ex. análises.R).
Digite 3+3 no script e aperte Ctrl+R. O 3+3 será enviado para a linha de comandos do R e
o resultado aparecerá na tela. Para fazer outro comando aperte “Enter” para passar para a linha de
baixo e escreva outro comando (recomendação: cada comando deve ser digitado em uma linha
diferente). No script você também pode inserir observações sobre o que foi feito, usando # para
de nome x.
6. Pacotes do R
Pacotes ou bibliotecas são os nomes mais usados para designar um conjunto de funções
(comandos) e, ou, dados agrupados. As funções básicas do R por exemplo estão em uma biblioteca
chamada “base”. Existem inúmeras bibliotecas e algumas já estão inclusas na instalação padrão do
R. Várias delas foram desenvolvidas por usuários do R que, em determinado momento, julgaram
importante criar funções que suprissem suas necessidades. Depois, esses usuários disponibilizaram
estas funções na forma de um pacote (uma biblioteca) com certo nome, para que outras pessoas
que necessitem usar as mesmas funções não precisem implementá-las novamente. É essa
1 – Abra o R como mostrado anteriormente e clique na barra de ferramentas em pacotes -> instalar
pacotes.
3 – Escolha o pacote que deseja instalar como por exemplo o pacote ExpDes muito útil em
2- Digite o nome do pacote (por exemplo: MASS) na caixa em azul (figura abaixo). Depois aperte
o botão instalar.
O argumento dependencies = TRUE é usado para ativar a instalação das dependências do pacote,
como segue:
install.packages("MASS", dependencies=TRUE)
Não basta apenas instalar um pacote. Para usá-lo é necessário "carregar" o pacote sempre que você
abrir o R e for usá-lo. Use a função library(NOME DO PACOTE) para carregar um pacote.
OBS: Lembre-se que sempre que abrir o R será necessário carregar o pacote novamente.
DICA: Ao criar um script, deixe os comandos de carregar os pacotes library() que serão
utilizados nas análises, nas primeiras linhas. Pois, toda vez que você abrir e executar o script, os
No R existe um comando que mostra como citar o R ou um de seus pacotes. Veja como
fazer:
Veja que na parte com o nome dos autores aparece "R development core team",
isso está correto, cite o R desta forma. Algumas pessoas não sabem disso e citam o R com
Para citar um pacote, por exemplo o MASS, basta colocar o nome do pacote entre aspas.
7. A ajuda do R
A ajuda em linha do R pode ser muito útil quando se deseja saber como empregar certa função.
Exemplo: Suponha que você deseja fazer um histograma de um conjunto de dados (um vetor)
armazenado em um objeto chamado “test”, porém, tem necessidade de colocar em azul a cor das
barras no histograma. Suponha ainda que você já saiba que o comando que cria histograma é o
hist(). Assim, se você quiser obter informações sobre este comando, inclusive como trocar a
A ajuda sobre o comando que cria histograma irá aparecer na Janela Direita Inferior do RStudio.
4 – Comando para procurar objetos com um determinado nome como por exemplo modelo –
apropos(“modelo”);
8. Uso inicial do R
2+2
2*2
2/2
2-2
2^2
Use parênteses para separar partes dos cálculos, por exemplo, para fazer a conta 4+16,
((4+16)/4)^2
Operadores Descrição
< Menor que ...
> Maior que ...
<= Menor igual que ...
>= Maior igual que ...
== Igual à ...
7 > 4
2 == 2
1 != 4
2 < 8
Para que o R deixe de ser uma simples calculadora, será necessário aprender, dentre outras
coisas, o uso de variáveis. No contexto do R, vamos entender variável como um objeto, ou seja,
como uma estrutura predefinida que vai “receber” algum valor. Utilizando uma linguagem mais
técnica, objeto (ou variável) é um pequeno espaço na memória do seu computador onde o R
armazenará um valor ou resultado de um comando, utilizando um nome que você mesmo definiu.
Exemplo:
x <- 10 # O objeto x representa o valor 10. Para comprovar, execute apenas o nome do objeto
OBS: Todos os objetos que forem criados estarão disponíveis na aba Ambiente. Na Janela Direita
Superior do RStudio.
É importante destacar que o nome de um objeto deve começar com uma letra qualquer,
maiúscula ou minúscula, que pode ser seguida de outra letra, número ou caracteres especiais como
Exemplo:
X <- 8
x <- 8
OBS: O nome do objeto não pode ter símbolos de funções ou operações matemáticas (+, /, -, *, ^)
Todo objeto em R tem uma classe, que pode ser descoberta usando a função class().
Os objetos-vetores podem ser do tipo numeric, logical, character, integer, fator e etc. Outros
Exemplo:
inteiro = 5L
caracter = “teste”
8.3.1. Vetores
uma dimensão, sendo que todos os seus elementos constituintes devem ter, obrigatoriamente, a
A função c() é usada para criar um vetor a partir de seus argumentos. Exemplos:
Exemplo:
"Ipe"))
8.3.2. Matrizes
As matrizes diferenciam-se dos vetores por admitirem duas dimensões, expressas por linhas e
colunas. Uma matriz pode ser formada por elementos numéricos e/ou caracteres (strings) na sua
estrutura.
A construção de matrizes no R pode ser feita com uso das funções rbind()e cbind().
respectivamente. No entanto, o mecanismo mais eficiente para construir matrizes é por meio
da função matrix().
- rbind()
v_1 = c(1, 3, 4, 6)
class(m_1)
- cbind()
- matrix()
números de 1 a 12. Note que a matriz é preenchida ao longo das colunas. Para inverter este padrão
deve-se adicionar o argumento byrow=TRUE, para dizer que a matriz deve ser preenchida por
linhas.
Exemplo:
Você pode verificar a dimensão de uma matriz com a função dim() como segue:
O valor retornado é um vetor com o número de linhas e colunas da matriz, nesta ordem. A
função summary() opera em cada coluna da matriz como se cada uma delas fosse vetor,
Exemplo:
summary(mat_3)
summary(as.numeric(x)).
São muito parecidos com matrizes. Entretanto, diferentemente das matrizes, cada coluna pode
Geralmente nós guardamos nossos dados em objetos do tipo data frame, pois sempre temos
variáveis numéricas e variáveis categóricas (por exemplo, largura do rio e nome do rio,
respectivamente).
Esse tipo de objeto é a melhor forma de armazenar dados, pois cada linha corresponde a uma
unidade, indivíduo ou pessoa, e cada coluna representa uma medida realizada em cada unidade,
Exemplo:
"Situação", "Repetente")
Após criar um data frame, é interessante avaliar a sua estrutura por meio das funções
str() e dim(). A função str() retorna as colunas com suas respectivas classes e número de
observações por variável. A função dim() informar as dimensões do data frame (número de
linhas e colunas).
dim(alunos)
str(alunos)
Ainda, deve-se notar que a função data.frame() transforma, por default, as variáveis qualitativas
em fatores (classe factor) com a especificação da quantidade de níveis (levels). Isso ocorre devido à
qualitativa em fator. Caso a transformação não seja desejável, basta modificar o comando para
character. Exemplo:
8.3.4. Listas
São objetos muito úteis, pois são usados para combinar diferentes coisas em um mesmo objeto,
ou seja, vetores, matrizes, números e, ou, caracteres e até mesmo outras listas. A função para
número de componentes de uma lista (nível superior) pode ser obtido usando a função
de atribuir argumentos em uma função. Quando você exibe um objeto que é uma lista, cada
Exemplos:
length(ID)
Quando a intenção for unir diferentes listas em um único objeto pode-se usar a função c().
8.3.5. Funções
As funções criadas para fazer diversos cálculos também são objetos do R. Entenda função
como uma sequência de comandos preparados para serem usados de forma simples e, assim,
facilitar sua vida. Funções são usadas para tudo que você possa imaginar: cálculos mais
complexos, estatística, análise de dados, manipulação de dados, gráficos, relatórios etc. Assim que
você o instala, o R já vem configurado com várias funções prontas para uso. A partir de agora,
chamaremos esse conjunto de funções que já vem por padrão como R de R Base. Claro que as
funções do R base não serão suficientes para resolver todos os problemas que você encontrará pela
frente. Nesse sentido, o R também mostra outro ponto forte. Você pode instalar conjuntos extras
logaritimo = log(10)
Quando é feito o carregamento de algum arquivo de dados no R, ele tenta “deduzir” os tipos
de dados de cada coluna. Nem sempre essa dedução sai correta e, vitualmente, você precisará,
converter de um tipo para o outro. O R tem algumas funções para fazer essas conversões
Exemplo:
class("2015")
as.numeric("2015")
as.character(55)
as.interger(3.14)
as.logical(1)
as.factor(“M”)
as.numeric(FALSE)
9. Indexação no R
por meio de algum mecanismo de indexação, que dependerá do tipo de objeto manejado. Para
[[ ]] e $.
indica a posição do elemento no objeto e inicia-se no valor 1. A função c() pode ser usada para
extraídos.
nome[2]
idade[1:3]
nome[c(1,3)]
nome[-2]
idade[-(1:3)]
nome[-c(1,3)]
3. Extração por indexação lógica: a extração de elementos no objeto-vetor pode ser feita
idade > 33
Para extrair, excluir ou substituir elementos de uma matriz usa-se o comando [ i, j ]. O índice
especificada.
especificada.
M[2,2]
M[1,]
M[,3]
M[c(1,3),c(2,3)]
print(M)
M[,c(-1,-3)]
M[-1,-3]
3. Substituir elementos
print(M)
M[c(2,3)] <- c(0,0) # Substitui elementos nas posições 2 e 3 por zero. A contagem é
4. Extração por indexação lógica: a extração de elementos no objeto-matriz pode ser feita
M >= 5
1. Comando [ ] e [[ ]]
inf[2,1]
inf[[2,1]]
inf[,c(1,2,4)]
2. Comando $
inf$idade
inf$idade[c(2,4)]
## Warning message:
## In `[<-.factor`(`*tmp*`, iseq, value = "Tereza") :
## invalid factor level, NA generated
Surgirá uma mensagem de erro atestando que o nível de fator é inválido. Isso ocorre porque o
nome “Tereza” foi adicionado com classe character e a coluna nome está como classe factor.
Assim, um NA será impresso no lugar do nome “Tereza”. Idealmente, para evitar problemas deste
tipo, pode-se manter todas as colunas qualitativas como character. Para tanto, deve-se usar o
inf$nome = as.character(inf$nome)
4. Extração por indexação lógica: a extração de elementos no objeto-matriz pode ser feita
inf$casada == "Sim"
inf[inf$casada == "Sim",]
A função split() pode ser usado para dividir data frame. Para tanto, especifique dois
argumentos básicos: a) data frame que se almeja dividir; b) fator a ser considerado para a divisão.
A indexação de lista pode ser feita com uso dos comandos [[ ]] e $. Ainda, para acessar sub-
índices dos componentes da lista pode-se fazer: [[ ]][ ]. Para exemplificar, considere a lista
list.1[[1]]
list.1[[2]][1,]
Se a lista estiver seus componentes nomeados o acesso é facilitado pelo uso de comando $.
list.1$DF
list.1$DF[2,]
posições 2, 5, 7, 8 e 9 por 2,
3, 7, 8 e 9.
list.1
1. Extração por indexação lógica: a extração de elementos no objeto-matriz pode ser feita
Uma forma especial de se gerar um vetor é gerando uma sequência. Por exemplo, para se gerar
Se o vetor é muito longo e não “cabe” em uma linha, o R vai usar as linhas seguintes para
Uma forma mais comum de produzir sequências de valores é usar a função seq(), que tem como
Outra função útil para produzir vetores é a rep(), que retorna o primeiro argumento repetido o
últimos são 5.
x<-20
Exemplos:
rep(7:10,1:4)
rep(c(99,88,77),c(3,2,1))
A função ls() mostra os objetos que existem em sua área de trabalho. Por exemplo:
A função para remover objetos no R é remove(), ou simplesmente rm(). Para usar esta
OBS: Tome cuidado ao usar esta função, pois uma vez excluído o objeto, este se torna
irrecuperável.
Várias funções são utilizadas para gerar dados aleatórios no R. A seguir são mostradas as
principais. runif() é utilizada para gerar dados aleatórios com distribuição uniforme. Veja:
runif(n, min=0, max=1) # gera uma distribuição uniforme com n valores, começando em
runif(200,80,100) # gera 200 valores que vão de um mínimo de 80 até um máximo de 100
temp<-runif(200,80,100)
A função rnorm() é utilizada para gerar dados aleatórios com distribuição normal. Veja:
rnorm(n, mean=0, sd=1) # gera n valores com distribuição uniforme, com média 0 e
desvio padrão 1.
Além destas funções a tabela a seguir mostra outras funções para as mais variadas distribuições.
Distribuição Função
Beta rbeta(n,shape1,shape2)
Binomial rbinom(n,size,prob)
Binomial negativa rnbinom(n,size,prob)
cauchy rcauchy(n,location=0,scale=1)
Estatística de Wilcoson’s rwilcox(nn,m,n,n),
rsignrank(nn,n)
Exponencial rexp(n,rate=1)
Fisher-Snedecor (F) rf(n,df1,df2)
Gamma rgamma(n,shape,scale=1)
Gauss (normal) rnorm(n,mean=0,sd=1)
Geométrica rgeom(n,prob)
Hipergeométrica rhyper(nn,m,n,k)
Logística rlogis(n,location=0,scale=1)
Log-normal rlnorm(n,meanlog=0,sdlog=1)
Poisson rpois(n,lambda)
Qui-quadrado rchisq(n,df)
Student (t) rt(n,df)
Uniforme runif(n,min=0,max=1)
Weibull rweibull(m,shape,scale=1)
O significado de todos os parâmetros pode ser verificado no help() do R para cada função
conjunto de dados, com ou sem reposição dos elementos sorteados. Ao usar a função é
números aleatorizados. Caso a função set.seed() não seja inserida, a cada execução da
função sample() um novo conjunto de amostras aleatórias será gerado. Funciona assim:
amostras serão retiradas, size é o número de amostras e replace é onde você indica se a
amostra deve ser feita com reposição (TRUE) ou sem reposição (FALSE). Veja:
set.seed(1)
Como não especificamos o argumento replace o padrão é considerar que a amostra é sem
reposição (= FALSE).
sample(1:10,15)
Neste exemplo ocorre erro, pois a amostra é maior que o conjunto de valores, temos 10
valores (1 a 10) portanto não é possível retirar 15 valores sem repetir nenhum! Assim:
sample(1:10,15,replace=TRUE)
Com a função sample() nós podemos criar vários processos de amostragem aleatória.
Por exemplo, vamos criar uma moeda e "jogá-la" para ver quantas caras e quantas coroas saem em
10 jogadas.
sample(moeda,10, replace=TRUE)
15. Arredondamento
Muitas vezes, numa certa análise estatística, podemos estar interessados em apresentar os
resultados com certo número de casas decimais. Assim existem alguns comandos utilizados para
aproximações e arredondamentos.
x # exibindo x
O comando round() ora suado não alterou, por exemplo, o valor de x, apenas o exibiu
arredondando em 3 casas decimais. Para que x assuma o valor arredondado, deve-se fazer:
Truncar um valor significa considerar apenas a parte inteira deste, descartando seus
decimais, sem qualquer tipo de arredondamento. Isso pode ser feito no R usando o comando
pi # valor de pi
casas decimais, mas não o de algarismos significativos. Isso pode ser feito com o comando
pi # valor de pi
um valor para o menor inteiro superior ao valor especificado (teto) e o maior inferior ao valor
pi # valor de pi
ceiling(pi) # teto
floor(pi) # piso
exemplo
decrescente.
A função order() retorna a posição original de cada valor do objeto "exemplo" caso os valores
order(exemplo)
Note que o primeiro valor acima é 53, isso indica que se quisermos colocar o objeto
"exemplo" em ordem crescente o primeiro valor deverá ser o sétimo valor do "exemplo", que é o
valor 1 (o menor deles). Na sequência devemos colocar o quarto valor do objeto "exemplo", que é
3, depois o terceiro, depois o sexto… até que objeto "exemplo" fique em ordem crescente.
order(exemplo,decreasing=TRUE)
É importante entender o comando order(), pois ele é muito usado para colocar uma
Nesta sessão veremos como importar, exportar, alterar e manejar um arquivo de dados dentro
dados em geral. Por exemplo, em diversos casos teremos que selecionar linhas ou colunas dentro
de uma planilha, ou em outros casos precisaremos agregar linhas ou colunas. Veremos como fazer
O R sempre trabalha com o conceito de Working direcotry, ou seja, uma pasta de trabalho
onde vai “ler” e “escrever” os dados. Para verificar qual o diretório que o R está “olhando”, utilize
o seguinte comando:
getwd()
Para informar ao R em qual pasta ele deve ler os arquivos, utilizamos o comando set
setwd('D:/caminho do arquivo')
O conjunto de dados a ser usado em determinada análise pode ser digitado diretamente no
console do R ou lido de arquivos externos. Neste caso, os comandos podem ser usados com a
finalidade de ler ou editar dados. Entre eles podemos citar read.table() e edit().
entrada de dados via arquivo de texto (ASCII), Excel, SAS, SPSS, etc, e até mesmo acessar banco
de dados SQL. Porém, as funções necessárias para realização de alguma destas operações não se
encontram na biblioteca BASE. Por esse motivo, apenas os arquivos de texto serão estudados aqui.
". ")
informações sobre o nome das colunas (linha de cabeçalho). Caso contrário, escrever header=F
ou omitir esse argumento. O argumento sep é usado para definir o separador das colunas,
podemos o delimitador ser virgula (sep= ","), ponto-virgula (sep= ";"), espaço (sep= " "). O
argumento dec é usado para definir o separador decimal usado no arquivo. Outra observação
importante é que as barras no endereço devem estar neste sentido "/ " ou utilizar "\\", mesmo
Exemplo:
Deseja-se ler os dados do arquivo “dados.txt” que contêm as coordenadas espaciais de 15 pontos.
As colunas estão separadas por um espaço em branco. Observe que a primeira linha é um
cabeçalho. Se este arquivo estiver salvo no diretório “R” dentro da pasta-raiz, por exemplo, basta
A função edit() é útil na edição de objetos já existentes, sejam esses vetores, data frame,
funções, etc.
Porém você detectou um erro onde o penúltimo elemento não deveria ser 89 e sim 98. Você
não precisa criar novamente o objeto “dados” se usar a função edit(). Veja:
dados1<-edit(dados)
Depois de alterar o vetor assim como se usa um editor de textos, basta fechar a janela e
O head e o tail são funções para ver a “cabeça” e o “rabo” dos seus dados, ou seja, o começo
e o fim das amostras. É muito importante sempre observar a “aparência” dos dados após o
ajustes o quanto antes, impedindo que esses erros se propaguem. Repare que na primeira linha
A seguir será apresentado um exemplo para mostrar algumas operações possíveis com
vetores e matrizes.
Exemplo:
coluna1<-c(1,2,3)
coluna2<-c(4,5,6)
coluna3<-c(7,8,9)
Agora criaremos uma matriz de nome “dados” com os vetores já criados utilizando uma
t(dados)
t(dados)%*%dados
t(coluna1)*coluna1
solve(dados)
Caso haja dúvidas você pode ainda testar a veracidade da operação anterior usando álgebra
simples. Multiplique a inversa de uma matriz pela sua matriz original e o resultado deve ser uma
matriz identidade com as mesmas dimensões da matriz a qual se deseja testar. Veja:
solve(dados)%*%dados
det(dados)
Para obtenção da inversa generalizada de Moore-Penrose use a função ginv(), após carregar o
pacote MASS.
library(MASS)
ginv(dados)
Os autovalores e autovetores de uma matriz quadrada podem ser obtidos através da função
eigen(). Veja:
eigen(dados)
Na tabela a seguir são mostrados algumas operações lógicas e outras funções úteis disponíveis no
R.
Símbolo Significado
!= Diferente
%% Módulo (resto da divisão inteira)
Exemplo:
row.names=FALSE, col.names=FALSE)
estatísticas por exemplo podemos usufruir das ferramentas gráficas para fazermos um estudo
inicial da planilha de dados. Muitas vezes, é muito mais simples o entendimento de um problema
Aqui serão apresentados alguns tipos mais comuns de gráficos no R. Porém se o usuário tiver
demo(graphics) no prompt de comando e vera alguns exemplos de gráficos que podem ser
criados com o R.
A função plot() é a função mais simples para fazer gráficos. Em sua forma mais simples,
Exemplo:
x<-1:20
y<-x^3
Qualquer uma das funções gráficas faz com que uma nova tela seja aberta no R contendo
o gráfico criado pela função. A criação de um novo gráfico sobrepõe o gráfico anterior.
Gráficos com linhas suaves ligando os pontos podem ser obtidos utilizando-se o argumento
plot(x,y,type= "b")
plot(x,y,type="o")
plot(x,y,type="c")
plot(x,y,type="h")
Exemplo:
plot(x,y)
O argumento pch= é usado para mudar os padrões de pontos existentes no R. Diferentes tipos
de símbolos são associados a diferentes números. Podem-se ainda usar caracteres quando
desejado. Veja:
plot(x,y)
sobreposição dos símbolos básicos; e os números de 15 a 18 são versões solidas dos símbolos
de 0 a 4. Veja:
plot(0:24,0:24,pch=0:24)
A largura das linhas pode ser mudada com o argumento lwd= enquanto eu o estilo da linha
pode ser modificado com o argumento lty= que assume um valor numérico que varia de 0 a
6. Veja:
plot(x,y)
Se você quiser preencher o mesmo gráfico com linhas e pontos que possuem diferentes
desse gráfico de acordo com os valores iniciais dos argumentos x e y em plot. A seguir,
cubram a amplitude valores de todos os elementos que você deseja adicionar ao gráfico. Veja:
lines(x,y)
lines(x,-y)
Você pode dar nome aos eixos com os argumentos xlab= e ylab=. O título pode ser
fornecido usando a função title() numa nova linha de comando fora da função plot(),
ou empregando ao argumento main= dentro da função plot(). Além disso, qualquer texto
pode ser adicionado em qualquer lugar do gráfico, utilizando a função text(). Observe que
title("Exemplo")
O parâmetros pos= pode ser usado dentro da função text() para controlar a posição do
O comando “\n” usado no comando title() pode ser empregado também em outros
gráfico gerado. Essa identificação pode ser facilmente obtida e de maneira bem interativa
Exemplo:
Suponhamos que haja um conjunto de cidades e suas coordenadas planas (x e y). Assim,
x<-c(2,3,4,5,6,7,8,9) # coordenadas x
y<-c(15,46,56,15,81,11,61,55) # coordenadas y
Podemos plotar as coordenadas das cidades, de modo a visualizar sua distribuição espacial.
Veja:
plot(cidades)
É difícil distinguir na figura onde está localizada qual cidade, mas este problema pode ser
resolvido quando temos indexados os nomes das cidades às coordenadas plotadas no gráfico.
Isto é feito usando-se o comando identify(). Após darmos o comando, quando passarmos
o mouse sobre o gráfico, ele ganha a forma de cruz, e, ao clicar próximo ao ponto que se deseja
identify(x,y,nomes,n=4)
Como podemos perceber, o programa ainda exibe, no prompt, os valores dos índices das
referências.
Por meio de instruções você pode fazer com que o programa mostre diversos gráficos em
uma mesma janela ao invés de um gráfico apenas. Para isso, use a função par(), juntamente
x<-30:50
y<-x/sqrt(x)
plot(x,y)
plot(rev(x),y)
plot(x,2*y)
plot(x,log(y))
Outros arranjos de gráficos podem ser definidos na janela gráfica, sempre lembrando que
Com a função par() podem-se fazer diversas outras coisas relacionados aos gráficos,
Para apresentar várias curvas num único gráfico, cada uma originada de uma coluna de
uma matriz, use a função matplot(). Além disso, legendas podem ser adicionadas aos
x<-seq(0,10,1)
x1<-.4*exp(-.4*x)
x2<-.3*exp(-.3*x)
X<-cbind(x1,x2)
matplot(X,type="l")
Exemplo:
x<-(1:10) # criando x
y<-c(2,5,9,6,7,8,4,1,3,10) # criando y
Agora compare os gráficos a seguir. Observe que ambos se referem aos mesmos objetos.
Porém, o segundo contêm uma série de recursos adicionais. Compare também os códigos
plot(x,y) # plota x e y
plot(x,y, # plota x e y
barplot(sample(10:100,10))
contagem = c(50000,10000,15000,5000))
pie(dados$contagem)
pie(dados$contagem, labels=dados$rebanho)
pie(dados$contagem,labels=dados$rebanho,col=c("red","blue","gree
n","yellow"))
example(pie)
y<-c(110,120,90,70,50,80,40,40,50,30)
x<-1:10
y geralmente é a letra usada em livros texto para indicar a variável resposta, a que aparece no eixo
Y. Apesar de não ser uma norma, colocar a variável resposta no eixo y (vertical) dos gráficos é um
consenso entre a maioria dos estatísticos, daí a letra y para dados resposta. x é chamada de variável
plot(x,y)
Variáveis categóricas são fatores com dois ou mais níveis (você verá isso no curso de estatística).
Por exemplo, sexo é um fator com dois níveis (macho e fêmea). Podemos criar uma variável que
sex<-c("macho","fêmea")
princípio, os níveis do fator podem ser nomes ou números (1 para macho e 2 para fêmea). Use
Vamos supor que os 5 primeiros valores da nossa variável y eram machos e os 5 últimos
sexo<-c("Ma","Ma","Ma","Ma","Ma","Fe","Fe","Fe","Fe","Fe")
Para parecer um exemplo mais real vamos supor que y são valores de peso, para isso vamos
plot(sexo,peso)
Observe que o comando não funcionou, deu erro! Isso ocorreu porque não informamos que
is(sexo)
Veja que o R trata a variável sexo como sendo um "vetor de caracteres". Mas nós sabemos
que sexo é o nosso fator, então precisamos dar esta informação ao R. A função fator(),
factor(sexo)
plot(factor(sexo),peso)
boxplot(y~sexo)
boxplot(y~sexo, col=c("red","blue"))
sexo.f<-factor(sexo)
Gráficos do tipo boxplot são bons quando o número de observações (de dados) é muito
grande. Neste caso, um gráfico com pontos seria melhor, pois podemos ver quantas observações
Para fazer um gráfico de pontos quando uma variável é categórica precisamos usar a função
stripchart().
pontos aparecem nas extremidades. TRUE pode ser abreviado para apenas T.
centralizados, pois com o argumento at, nós especificamos a localização dos pontos no eixo X.
Note que agora só há um problema. Eram cinco fêmeas e no gráfico aparecem apenas 4.
Isso ocorreu porque duas fêmeas tinham o mesmo peso. Para melhorar o gráfico é necessário usar
stripchart(peso~sexo,vertical=T,at=c(1.5,1.7),
method="stack")
Os pontos não estão mais totalmente sobrepostos, mas um símbolo ainda está sobre o outro.
stripchart(peso~sexo,vertical=T,at=c(1.3,1.7),method=
"stack",offset=1)
18.5. Histogramas
A função hist() produz um histograma dos dados informados em seu argumento. Veja:
hist(x) # histograma de x
table(x)
5 6 7 8 9 10
4 2 1 5 3 4
Observe que a coluna de 5 a 6 do histograma indica que há seis elementos nessa classe.
Isso acontece porque o padrão do comando hist() considera intervalos de classe fechados a
direita (right=TRUE), ou seja, o 6 também está incluído na primeira classe do histograma acima,
sendo o intervalo (5,6). Então porque o 5 foi contabilizado se o intervalo é aberto em 5? Isso
acontece por causa do parâmetro include.lowest=, que tem como padrão (defaut) o valor
TRUE. Isso inclui o primeiro valor do vetor na primeira classe, quando os intervalos de classe são
breaks=, que definem os intervalos a serem usados no eixo das abscissas do histograma.
Veja:
hist(x, # histograma de x
Exemplo:
Vamos criar um conjunto de dados que siga distribuição qui-quadrado com 2000 elementos
Compararemos agora dois histogramas gerados por códigos diferentes: o primeiro é criado
de maneira mais simples possível, enquanto na geração do segundo são usados vários parâmetros
19. Estatística
Estatística descritiva é a parte da Estatística que apenas descreve e avalia certo grupo de dados,
seja ele população, seja amostra. No caso de estarmos trabalhando com amostras, o simples uso
de estatísticas descritivas não nos permite tirar quaisquer conclusões ou inferências sobre um grupo
maior.
precisaríamos usar algo além do que será visto em Estatística Descritiva. Na verdade, esse “algo
mais” seria uso de métodos estatísticos que caracteriza a área da Estatística conhecida como
Na estatística descritiva existem dois métodos que podem ser usados para a apresentação dos
dados: métodos gráficos (envolvendo apresentação gráfica e, ou, tubular) e métodos numéricos
19.1.1. Média
A média é a medida de posição amis conhecida e pode ser facilmente obtida no R pelo
19.1.2. Mediana
amostral, que pode ser definida, de maneira simplificada, como o valor intermediário do conjunto
dados possui valores extremos discrepantes dos demais, o que pode comprometer a discussão dos
dados baseados simplesmente na média. A medida é obtido no conjunto de dados quando este se
19.1.3. Moda
observações. Um conjunto de dados pode ser amodal quando nenhum valor do conjunto pode ser
considerado moda; unimodal, quando o conjunto possui apenas um valor modal; bimodal, quando
o conjunto possui dois valores de moda; e multimodal, quando o conjunto de dados possui mais de
A moda pode ser obtida da seguinte forma no R. Como não existe uma função para calcular
moda<-function(x)
xx<-table(x)
valores<-which(xx==max(xx))
vmodal<-0
for(i in 1:(length(valores)))
if(i==1) vmodal<-as.numeric(names(valores[i]))
else
vmodal<-c(vmodal, as.numeric(names(valores[i])))
if(length(vmodal)==length(xx))
else return(vmodal)
19.1.4. Variância
2
∑𝑛𝑖=1(𝑥𝑖 − 𝑥̅ )2 𝑆𝑄𝐷𝑠
𝑠 = =
𝑛−1 𝑛−1
var(x)
O desvio padrão é definido como a raiz quadrada positiva da variância, o desvio padrão
exerce grande vantagem sobre a variância, já que é apresentado na mesma unidade de medida dos
conjunto de dados. Tem a vantagem de ser calculada de forma rápida e fácil, porém, fornece
número (índice) grosseiro da variabilidade de uma distribuição, por levar em conta apenas dois
valores de um conjunto.
A amplitude total pode ser obtida de forma indireta no R fazendo a subtração do máximo
O erro padrão da média mede a precisão da média. Ele é obtido da seguinte forma:
𝑠𝑥2 𝑠𝑥
𝑠(𝑋̅) = √𝑉(𝑋̅) = √ =
𝑛 √𝑛
Médias com menor erro padrão são consideradas mais precisas. Veja:
termos relativos, o grau de concentração em torno da média, dos dados. Por ser um número
(sd(x)/mean(x))*100 # Obtendo o CV de x
Sejam duas amostras relativas as variáveis X e Y organizadas em pares de valores (Xi, Yi),
𝑆𝑃𝐷𝑋𝑌
𝐶𝑂̂𝑉(𝑋, 𝑌) 𝑛−1 𝑆𝑃𝐷𝑋𝑌
𝑟𝑋𝑌 = = =
√𝑆𝑄𝐷𝑋 𝑥 𝑆𝑄𝐷𝑌 √𝑆𝑄𝐷𝑋 𝑥 𝑆𝑄𝐷𝑌 √𝑆𝑄𝐷𝑋 𝑥𝑆𝑄𝐷𝑌
𝑛−1 𝑛−1 𝑛−1 𝑛−1
Se tivermos uma matriz “dados” com seis colunas e n linhas, onde cada coluna representa
os valores de cada variável tomadas em cada indivíduo i (linha da matriz de dados, i=1, ..., n), os
19.2. ANOVA
variações associadas ao modelo pelo qual o experimento foi procedido, da variação que se dá ao
acaso.
o usuário deve estar atento ao escolher e realizar a análise, pois alguns erros são frequentes, por
utilizada para modelos com erros normais e independentes, e glm() utilizada modelos com
Aqui falaremos apenas do modelo inteiramente casualizado. Quem quiser saber mais sobre
não são pré-separados ou classificados em categorias (blocos). O modelo estatístico para este tipo
de delineamento é:
𝑦 = 𝜇+𝑡+𝜖
Exemplo:
dados<-c(100,120,102,140,
105,25,98,150,
98,115,120,128,
80,108,103,132,
102,135,115,145)
Agora demos criar os nomes dos tratamentos na ordem correspondente como segue:
trat<-as.factor(rep(paste("tr",1:4,sep= ""),5))
resultado<-aov(dados~trat)
anova(resultado)
ou
summary(resultado)
Response: dados
---
Signif. codes:
OBS: Em todos os tipos de análise de variância, para todas as variáveis qualitativas, devem ser
criados fatores e não vetores, ou seja, o objeto que contêm os nomes(ou números) dos tratamentos,
dos blocos, entre outros, devem ser fatores e não vetores. Para criar fatores e para conversão de
19.3. Regressão
existência de uma relação funcional entre uma variável dependente com uma ou mais variáveis
independentes. Em outras palavras, consiste na obtenção de uma equação que tenta explicar a
variação da variável dependente pela variação dos níveis das variáveis independentes. Aqui apenas
falaremos sobre a regressão linear simples. Caso tenha vontade de saber mais sobre o assunto
imaginária, provavelmente existe uma relação de linearidade entre as variáveis envolvidas. A essa
Exemplo:
concreto segundo a temperatura ambiente no local onde está o pilar. Os dados estão descritos na
tabela abaixo.
T (ºC) 18 16 25 22 20 21 23 19 17
Dilatação linear (mm) 5 3 10 8 6 7 9 6 5
Posso realizar um estudo de regressão nestes dados? Qual modelo usar? Como montar a
equação que relaciona a temperatura com a dilatação neste estudo? A temperatura realmente exerce
Essas são as perguntas que podemos fazer ao nos depararmos com os dados acima
apresentados. Suas respostas podem ser encontradas fazendo uma análise de regressão.
Primeiro entraremos com os dados da tabela no R, criando dois objetos: um que conterá os
temp<-c(18,16,25,22,20,21,23,19,17)
dilat<-c(5,3,10,8,6,7,9,6,5)
Inicialmente o estudo de regressão pode ser feito com a definição do modelo. Para auxiliar
O diagrama sugere uma tendência linear dos dados. Montaremos, portanto, um modelo de
regressão linear simples (simples pois existe apenas uma variável independente “temp”
relacionada a variação da variável dependente “dilat”. Assim, o modelo pode ser montado da
seguinte forma:
reglin<-lm(dilat~temp)
reglin
Call:
Coefficients:
(Intercept) temp
-8.1710 0.7323
Com base neste modelo, teremos duas informações: o valor do intercepto (valor onde a reta
da regressão intercepta o eixo das ordenadas, que muitas vezes, não tem interpretação prática,
como seria o caso neste exemplo) e o valor que representa um coeficiente de relação entre a
dilatação e a temperatura, ou seja, quanto a dilatação irá variar para cada variação unitária da
respectivamente.
𝑦̂ = 𝛽̂0 + 𝛽̂1 . 𝑋
Assim:
predict(reglin)
1 2 3 4 5 6 7 8 9
5.009677 3.545161 10.135484 7.938710 6.474194 7.206452 8.670968 5.741935 4.277419
O primeiro valor, ou seja, 5,009677, representa o valor predito para a dilatação quando a
temperatura é 18ºC (primeiro valor do objeto “temp”, e assim sucessivamente até o último valor
É possível acessar uma série de objetos gerados pela função lm(), como coeficientes, resíduos,
ls(reglin)
reglin$coefficients
anova(reglin)
Response: dilat
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
temperatura influencia significativamente a dilatação, uma vez que o p-value encontrado foi na
ordem de 10-6, ou seja, muito pequeno. Adicionalmente, podemos obter muitas outras informações:
summary(reglin)
Call:
Residuals:
Coefficients:
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Ele representa o quanto da variação da dilatação linear pode ser explicada pela variação da
temperatura neste experimento. Uma vez que o valor encontrado foi quase 97% há indicação de
encontram também no R. Nest apostila nós vamos falar apenas sobre o teste de Tukey. Quem
quiser saber mais sobre os demais métodos sugerimos fazer o nosso curso de “Estatística
experimental”.
(criando um algoritmo/função para tal). Aqui explicaremos apenas o uso da função TukeyHSD()
Exemplo:
dados<-
c(30,25,46,35,28,19,40,38,33,28,49,45,35,30,48,42,35,20,42,37)
trat<-factor(rep(paste("tr",1:4,sep=""),5))
tabela<-data.frame(trat=trat,dados=dados)
ANOVA<-aov(dados~trat, tabela)
install.packages("agricolae")
library(agricolae)
result<-HSD.test(ANOVA,"trat", group=TRUE,console=TRUE)
dados groups
tr3 45.0 a
tr4 39.4 ab
tr1 32.2 b
tr2 24.4 c
bar.group(result$groups,ylim=c(0,(max(dados)*1.25)),
density=4,border="blue")
text((nrow(result$groups[2]))/2,max(dados)*1.20,"Teste de Media
O nível de confiança padrão do R para este comando é de 0.95 (95%) e pode ser alterado
alpha=0.01)
trat, means
dados groups
tr3 45.0 a
tr4 39.4 ab
tr1 32.2 bc
tr2 24.4 c
bar.group(result$groups,ylim=c(0,(max(dados)*1.25)),
density=4,border="blue")
text((nrow(result$groups[2]))/2,max(dados)*1.20,"Teste de Media
Nesta seção nós daremos uma introdução sobre programação no R na qual nós
programação. Para usuários que queiram saber mais sobre programação sugerimos fazer
if (condição) {
# comandos que
# serão rodados
Dentro dos parênteses temos uma condição lógica, que deverá ter como resultado
ou TRUE ou FALSE;
Dentro das chaves temos o bloco de código que será executado se – e somente se – a
Vejamos um exemplo muito simples. Temos dois blocos de código que criam as
variáveis x e y, mas eles só serão executados se as variáveis cria_x e cria_y forem TRUE,
respectivamente. Veja:
if (cria_x) {
x <- 1
if (cria_y) {
y <- 1
exists("x")
## [1] TRUE
exists("y")
## [1] FALSE
Note que somente a variável x foi criada. Vamos agora rodar o mesmo bloco, mas
rm(x)
if (cria_x) {
x <- 1
if (cria_y) {
y <- 1
exists("x")
## [1] FALSE
exists("y")
## [1] TRUE
Outra forma de executar códigos de maneira condicional é acrescentar ao if() o opcional else.
if (condicao) {
# comandos que
# serão rodados
} else {
# comandos que
# serão rodados
Dentro dos parênteses temos uma condição lógica, que deverá ter como resultado
ou TRUE ou FALSE;
Dentro das chaves do if() temos um bloco de código que será executado se – e somente
Dentro das chaves do else temos um bloco de código que será executado se – e somente
numero <- 1
if (numero == 1) {
} else {
## o número é igual a 1
numero <- 10
if (numero == 1) {
} else if (numero == 2) {
} else {
Para fins de ilustração, vamos criar uma função que nos diga se um número é par ou ímpar.
Vale relembrar que um número (inteiro) é par se for divisível por 2 e que podemos verificar
isso se o resto da divisão (operador %% no R) deste número por 2 for igual a zero.
# se for decimal retorna NA (pois par e ímpar não fazem sentido para decimais)
return(NA)
if (x %% 2 == 0) {
return("par")
} else {
return("impar")
par_ou_impar(4)
## [1] "par"
par_ou_impar(5)
## [1] "impar"
par_ou_impar(2.1)
## [1] NA
Parece que está funcionando bem… só tem um pequeno problema. Se quisermos aplicar
x <- 1:5
par_ou_impar(x)
## Warning in if (abs(x - round(x)) > 1e-07) {: a condição tem comprimento > 1 e somente o primeiro
## Warning in if (x%%2 == 0) {: a condição tem comprimento > 1 e somente o primeiro elemento será
usado
## [1] "ímpar"
Provavelmente não era isso o que esperávamos. O que está ocorrendo aqui?
20.3. ifelse()
Os comandos if() e if() else não são vetorizados. Uma alternativa para casos
O primeiro argumento é um vetor (ou uma expressão que retorna um vetor) com
Primeiramente, vejamos um caso trivial, para entender melhor como funciona o ifelse():
## [1] 1 -1 -1 1
Note que passamos um vetor de condições com TRUE, FALSE, FALSE e TRUE. O
valor para o caso TRUE é 1 e o valor para o caso FALSE é -1. Logo, o resultado é 1, -1, -1 e 1.
Façamos agora um exemplo um pouco mais elaborado. Vamos criar uma versão
com ifelse da nossa função que nos diz se um número é par ou ímpar.
Testemos a função com vetores. Perceba que agora funciona sem problemas!
# se x for decimal, retorna NA, se não for, retorna ele mesmo (x)
par_ou_impar_ifelse(x)
par_ou_impar_ifelse(c(x, 1.1))
Um tema constante neste livro é fazer com que você comece a pensar em explorar a
vetorização do R. Este caso não é diferente, note que poderíamos ter feito a função utilizando
# transforma decimais em NA
x[decimais] <- NA
ind <- (x %% 2) == 0
# retorna resultado
return(res)
Na prática, o que a função ifelse() faz é mais ou menos isso o que fizemos acima –
comparações e substituições de forma vetorizada. Note que, neste caso, nossa implementação ficou
library(microbenchmark)
microbenchmark(par_ou_impar_vec(1:1e3),
par_ou_impar_ifelse(1:1e3))