Sei sulla pagina 1di 37

Linguagem R para iniciantes: da programação básica à análise de dados

Deivison Venicio Souza


Luani Rosa de Oliveira Piva
Thiago Wendling Gonçalves de Oliveira

Curitiba
2018

1
Linguagem R para iniciantes:
da programação básica à análise de dados

1 O ambiente R

Um software estatístico livre

R é um ambiente de software livre de estatística e gráficos, capaz de compilar e executar


em uma ampla variedade de plataformas UNIX, Windows e MacOS. Para fazer o download
do R, é necessário escolher um espelho CRAN para que seja feito o download da versão mais
atual.

Os espelhos CRAN são servidores distribuídos em diversos países que armazenam o


software R. Assim, ao deixar escolher de qual servidor será feito o download, permite-se que o
usuáriodefinaoservidormaispróximodesualocalização,reduzindootempodetráfego.

2 Instalação do RGui e Rstudio

10PASSO: Acessar a página do projeto R em https://www.r-project.org/;

20PASSO: Do lado esquerdo da página clique sobre o link CRAN;

30PASSO: Será aberta uma página com diversos links de CRAN Mirrors, isto é, espelhos
CRAN.Oidealéselecionaroservidormaispróximodasualocalizaçãoparafazerodownload do R
Development CoreTeam;

40PASSO: Na página http://cran-r.c3sl.ufpr.br/, na seção Download and Install R, clicar


em um dos três links, conforme o SO dousuário;

50PASSO: Clicar no link do subdiretório base ou em install R for the first time, para
instalar o R pela primeiravez;

60PASSO: Clicar em Download R 3.3.2 for Windows. Assim, será iniciado o download do
R Development Core Team para o respectivo sistema;e

70PASSO: Por fim, basta usar o setup para instalar o programa.

2
3 Instalação do Rstudio

10PASSO: Acessar a página do projeto RStudio: https://www.rstudio.com;


20PASSO: Products → RStudio;
30PASSO: Selecionar a versão do RStudio para Desktop;
40PASSO: Na edição Open source → Download Rstudio Desktop;
50PASSO: Installers for Supported Platforms → instalador RStudio; e
60PASSO: Por fim, basta usar o setup baixado para instalar oprograma.

4 Iniciando no ambiente R

A janela inicial doRGui

No contato inicial do usuário com o RGui tem-se a visão inicial do R Console com a
versão doRemusoeascondiçõesdelicenciamento.Algumasfunçõesdetestesãomostradase,para
saber o que cada função retorna basta digitá-las no prompt de comando do R Console
simbolizado pelo sinal >(maior) em vermelho. Haverá um cursor piscando à direita do
prompt,indicandoolocalparadigitaroscomandosparaoR.
Execute as funções demo(), help(), help.start() e q().

5 Operações e operadoresaritméticos

A linguagem R permite executar operações aritméticas básica (soma, subtração,


multiplicação, divisão e potenciação):

Operadores Nome Operações


+ Somatório 2+3
* Multiplicação 4*9
/ Divisão 20/5
- Subtração 32-10
^ ou ** Potenciação 5^3
%% Resto inteiro da divisão 10%%3
%/% Parte inteira da divisão 10%/%3

3
6 Operadoreslógicos

Operadores lógicos Descrição


< Menor do que…
> Maior do que…
≤ Menor ou igual do que…
≥ Maior ou igual do que…
== Igual a…
& E (and)/para vetores
| Ou (or)/para vetores
!= Diferente de…
! Não…
is.na() Valor numérico ou faltante…

7 Estrutura de dados noR

Os objetos são criados no R com o objetivo de armazenar dados. Todo objeto em R têm
uma classe, que pode ser descoberta usando a função class(). Os objetos-vetores podem ser
do tipo numeric, logical, character, etc. Outros objetos incluem matrizes, data frames,
funções, listas,arrays.

Antes de iniciar as seções que detalham os tipos de objetos existentes no R é importante


saber nomeá-los. Assim, podemos listar algumas condições para atribuição de nomes
àobjetos:
1. Onomedoobjetodeve,necessariamente,iniciarcomumaletra;
2. Pode-seusarletrasmaiúsculasouminúsculasnonomedoobjeto;
3. Onomedosobjetossãosensíveisàsletrasmaiúsculasouminúsculas(ex:Ufpr/ufpr);
4. O nome não pode ter símbolos de funções ou operações matemáticas (+; /; -; *;^);
5. Números(0a9)podemserinseridosnonomedoobjeto,excetonaprimeiraposição;
6. Nãosepodeusarespaçoentreosnomesdosobjetos(alternativa=usarponto(.)ou
underline(_);
7. Paraatribuironomeaumobjetodeve-seusarocomando<-(recebe);e
8. Pode-se usar também a função assign() para fazer atribuição (menos comum).
Obs.: O R é casesensitive, isto é, diferencia letras maiúsculas e minúsculas.

7.1 Vetores

O vetor é o tipo de objeto mais importante em R, constituindo a forma mais simples de


armazenar dados. São caracterizados por possuírem somente uma dimensão e, todos os
elementos constituintes devem ter, obrigatoriamente, a mesma natureza (classe).
Os vetores podem ser considerados células contíguas que contém dados. Estas células
4
podem ser acessadas por meio de operações de indexação (R Language Definition).
Quaisfunçõesusarparacriarumvetor?
a) Função c() (concatenate): Função genérica que permite concatenar (combinar) argu-
mentos para formar umvetor.
b) Função seq() (sequence): Função genérica usada para gerar sequências de números em
intervalos pré-definidos. Os principais parâmetros da funçãoseq().

c) Função rep() (replicate): Função genérica usada para replicar um valor “x” . Os
principais parâmetros da funçãorep():

# Criando objeto-vetor e atribuindo nomes.

c("Acapu", "Araucaria", "Mogno", "Cedro", "Ipe")


assign("especie", c("Acapu", "Araucaria", "Mogno", "Cedro", "Ipe"))
especie <-c("Acapu", "Araucaria", "Mogno", "Cedro", "Ipe")

c(23.0, 27.0, 33.6, 42.6, 52.1)


diametro <-c(23.0, 27.0, 33.6, 42.6, 52.1)

c(8.5, 9.2, 10.5, 13.4, 15.8)


altura <-c(8.5, 9.2, 10.5, 13.4, 15.8)
b) Função seq()(sequence):

seq(10) # Sequência de 1 a 10, com intervalo 1.


## [1] 1 2 3 4 5 6 7 8 9 10

seq(1:10) # Sequência de 1 a 10, com intervalo 1.


## [1] 1 2 3 4 5 6 7 8 9 10

seq(from =1, to =10, by =1) # Sequência de 1 a 10, com intervalo 1.


## [1] 1 2 3 4 5 6 7 8 9 10
c) Função rep()(replicate):

rep(x =1:4, 2) # Repete a sequência de 1 a 4 (2x).


## [1] 1 2 3 4 1 2 3 4

rep(1:4, times =3) # Repete a sequência de 1 a 4 (3x).


## [1] 1 2 3 4 1 2 3 4 1 2 3 4

rep(x =1:4, each =2) # Repete cada valor em "x" (2x).


## [1] 1 1 2 2 3 3 4 4

5
ComoidentificaraclassedeumvetornoR?
A identificação da classe de um objeto-vetor no R pode ser feita usando a função
class(). Além disso, existem funções lógicas que testam a classe de um objeto-vetor.

a) Objeto-vetor da classe “numeric” e “character”

a <-45; class(a); is.numeric(a)


## [1] "numeric"
## [1] TRUE

b <- "olá Mundo"; class(b); is.character(b)


## [1] "character"
## [1] TRUE

c <-c("Quem vai ao Pará", "Parou", "tomou açai, ficou!")


class(c); is.character(c)
## [1] "character"
## [1] TRUE
c) Objeto-vetor da classe “factor”
A função factor() é usada para codificar um vetor como um “fator” (categorias).
Outra alternativa é usar a função de conversão as.factor().

cortar <-c("Não", "Não", "Não", "Não", "Sim", "Sim")


print(cortar); class(cortar)
## [1] "Não" "Não" "Não" "Não" "Sim" "Sim"
## [1] "character"

fcortar <-factor(cortar)
print(fcortar)
## [1] Não Não Não Não Sim Sim
## Levels: Não Sim

7.2 Matrizes

Como criarmatrizes?
Asmatrizesdiferenciam-sedosvetoresporadmitiremduasdimensões,expressasporlinhase
colunas. Uma matriz pode ser formada por elementos numéricos e/ou caracteres (strings)
na suaestrutura.
a) Função matrix()
A maneira mais prática para criar matrizes no R é usar a função matrix().

6
mat.1<-matrix(1:6, nrow=2, ncol=3, byrow =TRUE,
dimnames =list(c("L1", "L2"),
c("C1", "C2", "C3")))
print(mat.1)
## C1 C2 C3
## L1 1 2 3
## L2 4 5 6

7.3 Dataframes

O data frame é bastante similar a matriz, porém é capaz de reunir vetores de


diferentes classes (naturezas) com a condição de possuírem igual comprimento.Para criar
data frames diretamente no R pode-se usar as funções data.frame() ou edit().
Função data.frame()

# Criar data frame a partir de vetores existentes


especie <-c("Acapu", "Araucaria", "Mogno", "Cedro", "Ipe")
diametro <-c(23.0, 27.0, 33.6, 42.6, 52.1)
altura <-c(8.4, 8.7, 9.1, 13.2, 15.4)
cortar <-c("Não", "Não", "Não", "Não", "Sim")

invFlor.1<-data.frame(especie, diametro, altura, cortar,


stringsAsFactors =TRUE)

8 Indexação noR

Mecanismos deindexação

Quando o interesse é extrair, excluir ou substituir elementos de objetos é possível


fazê-lo usando-se de algum mecanismo de indexação, que dependerá do tipo de objeto
manejado. Isto é, usa-se de um mecanismo de localização da posição do elemento.

O que signifa indexar?


Dispor em índice, numa lista que metodicamente indica o conteúdo de alguma coisa;
ordenar: indexar os livros de uma biblioteca(Dicio, Dicionário Online de Português).
Em termos gerais, existem seis modos de indexar valores no R:
1. Nomes;
2. Valoreslógicos;
3. Inteirospositivos;
4. Inteirosnegativos;
5. Espaço em branco;e
6. Zero.

7
Para indexar elementos ou subconjuntos de objetos no R existem três operadores básicos: [
], [[ ]] e $.
• O operador [ ] permite extrair múltiplos elementos de um objeto, e retornar um novo
objeto de mesmaclasse.
• O operador [[ ]] permite extrair elementos de objetos do tipo lista ou data frames. A
classedoobjetoextraídonãoserá,necessarriamente,umalistaoudataframe.
• Ooperador$permiteextraircomponentesnomeadosdeumalistaoudataframe.

8.1 Indexação devetores

Para extrair, excluir ou substituir elementos no objeto-vetor usa-se o comando [ i ].


Onde o índice “i” indica a posição do elemento no objeto. O indice “i” inicia no valor 1. A
função c()podeserusadaparaconcatenarasposiçõesdesejadasdentrodecolchetes.

especie <-c("Acapu", "Araucaria", "Mogno", "Cedro", "Ipe")


diametro <-c(23.0, 27.0, 33.6, 42.6, 52.1)

# Extraindo elementos (usando valores inteiros)


especie[2] # Um elemento.
## [1] "Araucaria"

diametro[1:3] # Múltiplos elementos (sequenciais).


## [1] 23.0 27.0 33.6

especie[c(1,3,5)] # Múltiplos elementos (alternados).


## [1] "Acapu" "Mogno" "Ipe"

diametro[seq(from =1, to =5, by =2)] # Múltiplos elementos usando seq ().


## [1] 23.0 33.6 52.1
Algumas vezes o interesse é substituir um ou mais elemento do objeto-vetor por outro:

Especie <-c(NA, "Araucaria", "Mogno", "Cedro", "Ipe", NA)


Diametro <-c(23.0, 27.0, 33.6, 42.6, 52.1)

# Substitui os NAs
is.na(Especie)
## [1] TRUE FALSE FALSE FALSE FALSE TRUE
Especie[is.na(Especie)] <- "Não Identificada"
print(Especie)
## [1] "Não Identificada" "Araucaria" "Mogno"
## [4] "Cedro" "Ipe" "Não Identificada"

8
# Altera o diâmetro da posição 3, e atribui 33,5cm.
Diametro[3] <-33.5

# Altera os diâmetros das posições 4 e 5, e atribui 55,3cm e 63,4cm


Diametro[c(4, 5)] <-c(55.3, 63.4)

8.2 Indexação dematrizes

Para extrair, excluir ou substituir elementos de uma matriz usa-se o comando [i, j].
Ondeoíndice“i”indicalinhase“j”indicaascolunasdamatriz.
a) Extraindo elementos: Usa-se indexação positiva.

mat <-matrix(1:6, nrow=2, ncol=3, byrow =TRUE,


dimnames =list(c("L1", "L2"),
c("C1", "C2", "C3")))

mat[2,2] # elemento da linha 2 e coluna 2.


## [1] 5

mat[2, ] # todos elementos da linha 2.


## C1 C2 C3
## 4 5 6

mat[c(1,2), c(2,3)] # elementos de L1 e L2, e C2 e C3.


## C2 C3
## L1 2 3
## L2 5 6

mat[,c(-1,-3)] # exclui as colunas 1 e 3.


## L1 L2
## 2 5

mat[1, 1] <-0# substitui o elemento da posição 1, por 0.

8.3 Indexação de dataframes

O acesso a um determinado vetor em um data frame pode ser realizado utilizando-se do


comando [ ] (similar às matrizes) ou dos comandos [[ ]] e $ (similar às listas).

invFlor.2<-data.frame(
especie =c("Acapu", "Araucaria", "Mogno", "Cedro", "Ipe"),
diametro =c(23.0, 27.0, 33.6, 42.6, 52.1),
altura =c(8.4, 8.7, 9.1, 13.2, 15.4),
cortar =c("Não", "Não", "Não", "Não", "Sim"),
stringsAsFactors =TRUE)

print(invFlor.2)
9
## especie diametro altura cortar
## 1 Acapu 23.0 8.4 Não
## 2 Araucaria 27.0 8.7 Não
## 3 Mogno 33.6 9.1 Não
## 4 Cedro 42.6 13.2 Não
## 5 Ipe 52.1 15.4 Sim
Comandos [ ] e [[ ]]

invFlor.2[2,1] # similar as matrizes


## [1] Araucaria
## Levels: Acapu Araucaria Cedro Ipe Mogno

invFlor.2[[2,1]] # similar as listas


## [1] Araucaria
## Levels: Acapu Araucaria Cedro Ipe Mogno

invFlor.2[, c(1,2,4), drop=FALSE] # drop = FALSE

especie diametro cortar


Acapu 23.0 Não
Araucaria 27.0 Não
Mogno 33.6 Não
Cedro 42.6 Não
Ipe 52.1 Sim

invFlor.2[c(1,2), c("especie","diametro")] # mais específico

especie diametro
Acapu 23.0
Araucaria 27.0

Comando $

invFlor.2$diametro # acessa a coluna diâmetro.


## [1] 23.0 27.0 33.6 42.6 52.1

invFlor.2$cortar # acessa a coluna cortar.


## [1] Não Não Não Não Sim
## Levels: Não Sim

# acessa a coluna cortar e extrai os elementos da posição 4 e 5.


invFlor.2$cortar[c(4,5)]
## [1] Não Sim
## Levels: Não Sim
10
Adicionando colunas aoDF

# Adicionando a coluna “Protegida”


protegida <-c("Sim", "Sim", "Sim", "Não", "Não")
invFlor.2$protegida <-protegida
print(invFlor.2)
## especie diametro altura cortar protegida
## 1 Acapu 23.0 8.4 Não Sim
## 2 Araucaria 27.0 8.7 Não Sim
## 3 Mogno 33.6 9.1 Não Sim
## 4 Cedro 42.6 13.2 Não Não
## 5 Ipe 52.1 15.4 Sim Não

9 Visualização gráfica noR

9.1 A funçãoplot()

É uma função genérica para plotagem de objetos R. Para saber mais detalhes sobre os
argumentos dos parâmetros gráficos deve-se consulte o par. O uso da função plot() é um dos
mecanismos mais simples para a criação dos gráficos no R. Para estudar alguns detalhes da
função plot() usar-se-á do data set“trees”.

?trees # Circunferência, altura e volume de árvores de Cerejeira


data("trees")
head(trees)

Girth Height Volume


8.3 70 10.3
8.6 65 10.3
8.8 63 10.2
10.5 72 16.4
10.7 81 18.8
10.8 83 19.7

tail(trees)

Girth Height Volume


26 17.3 81 55.4
27 17.5 82 55.7
28 17.9 80 58.3
29 18.0 80 51.5
30 18.0 80 51.0
11
31 20.6 87 77.0

str(trees)
##'data.frame': 31obs.of 3variables:
## $Girth:num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
## $Height:num 70 65 63 72 81 83 66 75 80 75 ...
## $Volume:num 10.310.310.216.418.819.715.618.222.619.9...
dim(trees)
##[1]31 3
Para fins didáticos, iremos fazer a tranformação das unidades de medidas das variáveis
biométricas:

cic_cm <- trees$Girth*2.54 altura_m <-


trees$Height*0.3048 vol_m3 <-
trees$Volume/35.315 dap_cm <-cic_cm/pi
dados <- cbind(trees, dap_cm, altura_m, vol_m3)
print(dados)
## GirthHeightVolume dap_cmaltura_m vol_m3

## 1 8.3 70 10.3 6.710609 21.3360 0.2916608


## 2 8.6 65 10.3 6.953161 19.8120 0.2916608
## 3 8.8 63 10.2 7.114863 19.2024 0.2888291
## 4 10.5 72 16.4 8.489325 21.9456 0.4643919
## 5 10.7 81 18.8 8.651026 24.6888 0.5323517
## 6 10.8 83 19.7 8.731877 25.2984 0.5578366
## 7 11.0 66 15.6 8.893578 20.1168 0.4417386
## 8 11.0 75 18.2 8.893578 22.8600 0.5153617
## 9 11.1 80 22.6 8.974429 24.3840 0.6399547
## 10 11.2 75 19.9 9.055280 22.8600 0.5634999
## 11 11.3 79 24.2 9.136130 24.0792 0.6852612
## 12 11.4 76 21.0 9.216981 23.1648 0.5946482
## 13 11.4 76 21.4 9.216981 23.1648 0.6059748
## 14 11.7 69 21.3 9.459533 21.0312 0.6031431
## 15 12.0 75 19.1 9.702085 22.8600 0.5408467
## 16 12.9 74 22.2 10.429742 22.5552 0.6286281
## 17 12.9 85 33.8 10.429742 25.9080 0.9571004
## 18 13.3 86 27.4 10.753145 26.2128 0.7758743
## 19 13.7 71 25.7 11.076547 21.6408 0.7277361
## 20 13.8 64 24.9 11.157398 19.5072 0.7050828
## 21 14.0 78 34.5 11.319100 23.7744 0.9769220
## 22 14.2 80 31.7 11.480801 24.3840 0.8976356
## 23 14.5 74 36.3 11.723353 22.5552 1.0278918
## 24 16.0 72 38.3 12.936114 21.9456 1.0845250
## 25 16.3 77 42.6 13.178666 23.4696 1.2062863

12
## 26 17.3 81 55.4 13.987173 24.6888 1.5687385
## 27 17.5 82 55.7 14.148874 24.9936 1.5772335
## 28 17.9 80 58.3 14.472277 24.3840 1.6508566
## 29 18.0 80 51.5 14.553128 24.3840 1.4583038
## 30 18.0 80 51.0 14.553128 24.3840 1.4441455
## 31 20.6 87 77.0 16.655246 26.5176 2.1803766

Criando um gráfico de dispersão entre diâmetro (cm) e volume (m³).

Modificandootipodegráfico(type).

# mar = inferior, esquerda, superior e direita.


par(mar =c(4.5,3,1.5,1), mgp =c(2,1,0), mfrow =c(2,2))
plot(dap_cm,vol_m3, main ="type = default")
plot(dap_cm,vol_m3, type="l", main ="type = l")
plot(dap_cm,vol_m3, type="b", main ="type = b")
plot(dap_cm,vol_m3, type="o", main ="type = o")

13
Adicionando título, subtítulo erótulos

Usar os comandos main e sub para adicionar um título e subtítulo ao gráfico. Para
modificar os títulos dos eixos usar os comandos xlab = “Título do eixo x” e ylab = “Título
do eixoy”.

par(mar =c(4.5,3,1.5,1), mgp =c(2,1,0), mfrow =c(2,2))

plot(dap_cm, vol_m3, type="o", main="Relação Volume x DAP")

plot(dap_cm, vol_m3, type="o", main="Relação Volume x DAP",


sub="(Árvores de cerejeiras)")

plot(dap_cm, vol_m3, type="o", main="Relação Volume x DAP",


xlab="DAP (cm)")

plot(dap_cm, vol_m3, type="o", main="Relação Volume x DAP",


xlab="DAP (cm)", ylab="Volume (m3)")

14
15
O comando title() (comando de baixo nível) constitui outro mecanismo de inserção de
título e rótulos de eixos em gráficos da plot().

par(mar =c(4.5,3,1.5,1), mgp =c(2,1,0))


plot(dap_cm, vol_m3, type="o", xlab="", ylab="")

title("Relação Volume x DAP", xlab="DAP (cm)", ylab="Volume (m3)")

Se o título for demasiadamente grande pode-se fazer quebra de linha:

par(mar =c(4.5,3,1.5,1), mgp =c(2,1,0))

plot(dap_cm, vol_m3, type="o",


main="Relação Volume x DAP para árvores de Cerejeiras")

16
par(mar =c(4.5,4,2.5,1), mgp =c(2,1,0))

plot(dap_cm, vol_m3, type="o",


main="Relação Volume x DAP \n (árvores de Cerejeiras)")

Modificando tipos de pontos(pch)

Pode-se alterar o tipo de ponto usando o comando pch, que recebe um valor numérico
que define o tipo de ponto plotado no gráfico.

par(mar =c(4.5,4,2.5,1), mgp =c(2,1,0))


plot(0:20,
axes = F, #coordenadas do eixo das abiscissas
rep(0,21), #coordenadas do eixo das ordenadas
pch=0:20, # padrão de variação dos pontos
cex=2, # tamanho dos pontos
xlab="pch", # eixo x
ylab="") # eixo y
axis(side=1, seq(from=0,to=20,by =1),cex.axis=0.7)

17
Observe um exemplo prático:

par(mar =c(4.5,3,1.5,1), mgp =c(2,1,0), mfrow =c(3,2))


plot(dap_cm, vol_m3, pch=0, main ="pch=0")
plot(dap_cm, vol_m3, pch=4, main ="pch=4 (x)")
plot(dap_cm, vol_m3, pch=17, main ="pch=17 (triângulo sólido)")
plot(dap_cm, vol_m3, pch="M", main ="pch=M")
plot(dap_cm, vol_m3, pch="T", main ="pch=T")
plot(dap_cm, vol_m3, pch="1", main ="pch=1 (entre aspas)")

18
Modificando tipos de linhas(lty)

Pode-se alterar o tipo de linha usando o comando lty, que assume um valor numérico
que varia de 0 a6.

par(mar =c(4.5,3,1.5,1), mgp =c(2,1,0), mfrow =c(3,2))


plot(dap_cm, altura_m, type="l", main ="default (solid)")
plot(dap_cm, altura_m, type="l", lty=0, main ="sem linha")
plot(dap_cm, altura_m, type="l", lty=2, main ="dashed")
plot(dap_cm, altura_m, type="l", lty=4, main ="dotdash")
plot(dap_cm, altura_m, type="l", lty=5, main ="longdash")
plot(dap_cm, altura_m, type="l", lty=6, main ="twodash")

19
Modificandoalarguradaslinhas(lwd)

Pode-se alterar a largura da linha usando o comando lwd, que assume sempre um
valor numérico positivo maior ou igual a 1.

par(mar =c(4.5,3,1.5,1), mgp =c(2,1,0), mfrow =c(2,2))


plot(dap_cm,altura_m, type="l", lty=2, main ="default")
plot(dap_cm,altura_m, type="l", lty=2, lwd=2, main ="lwd=2")
plot(dap_cm,altura_m, type="l", lty=2, lwd=4, main ="lwd=4")
plot(dap_cm,altura_m, type="l", lty=2, lwd=15, main ="lwd=15")

20
Modificandocoresdepontoselinhas(col)

Pode-se alterar a cor das linhas e pontos basta usar o comando col e especificar entre
aspas a cor desejada. A função colors() fornece um variedade de cores disponíveis para
uso. Utilizeafunçãodemo(“colors”)paravisualizarumademostraçãodecores.

head(colors(), 40)
## [1]"white" "aliceblue" "antiquewhite" "antiquewhite1"
## [5]"antiquewhite2" "antiquewhite3" "antiquewhite4" "aquamarine"
## [9]"aquamarine1" "aquamarine2" "aquamarine3" "aquamarine4"
## [13]"azure" "azure1" "azure2" "azure3"
## [17]"azure4" "beige" "bisque" "bisque1"
## [21]"bisque2" "bisque3" "bisque4" "black"
##[25]"blanchedalmond" "blue" "blue1" "blue2"
## [29]"blue3" "blue4" "blueviolet" "brown"
## [33]"brown1" "brown2" "brown3" "brown4"
## [37]"burlywood" "burlywood1" "burlywood2" "burlywood3"
length(colours())
## [1] 657

par(mar =c(4.5,3,1.5,1), mgp =c(2,1,0), mfrow =c(2,2))


plot(dap_cm, vol_m3, pch=0, col="red", main ="col = red")
plot(dap_cm, vol_m3, pch=15, col="lightblue", main ="col = lightblue")
plot(dap_cm, vol_m3, type="l", lty=2, lwd=4, col="yellow", main ="col = yellow")
plot(dap_cm, vol_m3, type="l", lty=2, lwd=2, col="green3", main ="col = green3")

21
Modificandocoresdotítuloeeixos(col.main,col.labecol.axis)

Pode-se alterar as cores do título e labels dos eixos x e y usando os comandos col.main
e col.lab. O comando col.axis pode ser usado para modificar as cores dos valores dos eixos.
Além disso, existem comandos de baixo nível que realizam as mesmas tarefas: title().

par(mar =c(4.5,3,1.5,1), mgp =c(2,1,0), mfrow =c(2,2))


plot(dap_cm, vol_m3, type="o", main="Relação Volume x DAP",
xlab="DAP (cm)", ylab="Volume (m3)",
col.main="red4")

plot(dap_cm, vol_m3, type="o", main="Relação Volume x DAP",


xlab="DAP (cm)", ylab="Volume (m3)",
col.main="red4", col.lab="orange3")

plot(dap_cm, vol_m3, type="o", main="Relação Volume x DAP",


xlab="DAP (cm)", ylab="Volume (m3)",
col.main="red4", col.lab="orange3",
col.axis="green4")

plot(dap_cm, vol_m3, type="o", xlab="", ylab="")


title("Relação Volume x DAP", col.main="purple",
xlab="DAP (cm)", ylab="Volume(m3)", col.lab="green4")

22
Modificandooslimitesdoseixos(xlim,ylimeaxis)

Pode-se alterar os limites dos eixos (mínimos e máximos) usando os comandos xlim e
ylim. Além disso, o comando axis pode ser usado para obter uma maior personalização dos
eixos. Porém, no plot original deve constar axes = FALSE.

par(mar =c(4.5,3,1.5,1), mgp =c(2,1,0), mfrow =c(3,2))

plot(dap_cm,vol_m3, pch=0, col="red",


xlim=c(0, 20), ylim=c(0, 3),
main="xlim=c(0, 20) e ylim=c(0, 3)")

plot(dap_cm,vol_m3, pch=0, col="red",


xlim=c(6, 10), ylim=c(0, 1.5),
main="xlim=c(6, 10) e ylim=c(0, 1.5)")

plot(dap_cm,vol_m3, pch=0, col="red",


xlim=c(10, 18), ylim=c(0.5, 2),
main="xlim=c(10, 18) e ylim=c(0.5, 2)")

plot(dap_cm,vol_m3, pch=0, col="red",


xlim=c(min(dap_cm), max(dap_cm)),
ylim=c(min(vol_m3), max(vol_m3)),
main="xlim=c(min, max) e ylim=c(min, max)")

plot(dap_cm,vol_m3, pch=0, col="red", axes=F)


axis(1, seq(from =round(min(dados$dap_cm),2),
to =round(max(dados$dap_cm),2),
by =1.2))
axis(2, seq(from =round(min(dados$vol_m3),2),
to =round(max(dados$vol_m3),2),
by =0.1))

23
24
10 Análise exploratória dedados

Configurandodiretóriodetrabalho(getwd()esetwd())

UmdetalheimportantenoiníciodecadaseçãodetrabalhonoRéinspecionaroseudiretório
detrabalhoatual,istoé,olocalondeserãosalvososarquivosproduzidospeloR(.R,etc.).
Paratanto,bastausarafunçãogetwd().Casonãoestejanodiretóriodesejadouseafunção
setwd(choose.dir()) para selecioná-lo. A função dir() é usada para listar os arquivos
existentes no diretóriocorrente.

getwd()
setwd(choose.dir())
dir()

Importando um conjunto dedados

Funções read.csv() eread.table()

O R permite importar dados disponíveis em outros formatos, por exemplo, .csv


(Comma- separated values) ou .txt (arquivo de texto). Ainda, é possível importar os dados de
arquivos de outros programas estatísticos (SPSS, SAS, Stata). Duas funções extremamente
úteis para realizar essa tarefa são read.csv() (importa arquivos no formato .csv) e
read.table() (importar arquivos no formato .txt). Se os dados estiverem em planilha do
Microsoft Excel, pode-sesalvá-
loscomaextensão.txtfazendo:salvarcomo→texto(separadoportabulações) (*.txt).
Do arquivo original “arvores.txt” têm-se os seguintes formatos:
- As colunas estão separadas por tabulação (no R isso é definido pela expressão
regular “\t”);
- Oseparadordecimalusadonoarquivoéponto(.);
- Nãotemaspasdefinindoascolunasdetexto;e
- Oarquivocontémosnomesdasvariáveisnaprimeiralinha.

O que aconteceria se especificasse errôneamente o separador de colunas usado noarquivo,


cujo default é espaço? No exemplo, usa-se o separador vírgula (,) para fins de exemplificação.
Fazendoisso,asduascolunasexistentessãointerpretadascomoumasó.

nativas <-read.table(file ="arvores.txt", sep=",", header=T)


head(nativas)
## Arvores.Altura
## 1 1\t18
## 2 2\t15
## 3 3\t19
## 4 4\t12

25
## 5 5\t14
## 6 6\t14
dim(nativas) # apenas 1 coluna, porque o separador não está correto.
## [1] 25 1
Então, para ler o arquivo “arvores.txt” corretamente deve-se fazer:

nativas <-read.table("arvores.txt", header = T, sep="")

Um aspecto importante na análise exploratória é verificar se o conjunto de dados


possui valores faltantes. Para tanto, pode-se usar a função lógica is.na():

is.na(nativas)
Funçãoread.xlsx()

Existem diversos pacotes com funções dedicadas à importação de conjuntos de dados


para o ambiente R. Um exemplo é o pacote xlsx (Dragulescu, 2014) desenvolvido para
permitir a leitura de dados diretamente de planilhas do Microsoft Excel usando a função
read.xlsx(). Para fins de exemplificação, usar-se-á a função para importar o arquivo
“guanandi.xlsx” que contém quatro variáveis (muda, dcolo, h (altura) e folhas).

library(xlsx) # Carrega o pacote

# Usando read.xlsx(): sheetName = Nome arquivo


guanandi <-read.xlsx(file ="guanandi.xlsx",
sheetName ="guanandi", head =TRUE)

print(guanandi)
## muda dcolo h folhas
## 1 1 1.7 20.0 6
## 2 2 2.4 18.0 9
## 3 3 3.5 17.5 10
## 4 4 3.0 17.0 11
## 5 5 3.2 19.5 4
## 6 6 2.9 20.1 5
## 7 7 1.4 19.0 6
## 8 8 0.9 20.2 7
## 9 9 3.1 18.6 9
## 10 10 3.6 17.4 10
## 11 11 2.2 16.0 8
## 12 12 1.4 17.9 11
## 13 13 1.6 18.1 12
## 14 14 1.0 19.0 6
## 15 15 2.8 21.0 4
## 16 16 1.6 20.6 9
26
## 17 17 1.9 22.0 8
## 18 18 2.3 17.4 11
## 19 19 2.7 16.9 10
## 20 20 3.0 16.3 10
## 21 21 3.1 19.5 5
## 22 22 2.7 18.4 7
## 23 23 1.9 20.6 9
## 24 24 2.2 21.1 10
## 25 25 3.0 20.0 9
Estatísticadescritiva

Estatística descritiva é a parte da estatística que descreve e avalia um conjunto de


dados, sejam populacionais ou oriundos de uma amostra representativa da população.

Medidas de tendênciacentral

1. Média aritmética: Matematicamente é a soma de todos os elementos de uma amostra ou


população dividida pela quantidade de elementos. A média aritmética é a medida de tendência
central mais conhecida e pode ser facilmente obtida no R usando a funçãomean():

x <-c(1, 5, 7, 18, 32, 10, 6) # criando um vetor


mean(x) # obtendo a média
## [1] 11.28571
2. Mediana: É um valor intermediário de um conjunto de dados, cujos n valores são dispos-
tos ordenadamente (rank). O ambiente R possui a função median() que calcula a mediana de
um conjunto de dados, sem a necessidade de realizar o procedimento de ordenamento
paraencontraraposiçãodamedidae,assimobterseuvalor.

x <-c(1, 5, 7, 18, 32, 10, 6) # vetor não ordenado (n=7)


y <-c(1, 5, 6, 7, 10, 18, 32) # vetor ordenado (n=7)

median(x) # a mediana?
## [1] 7
median(y) # a mediana?
## [1] 7
3. Moda: Refre-se ao valor mais frequente dentro do conjunto de dados.Por não ser uma
medida de posição muito usual no R-base não existe uma função específica para calcular a
moda. Então, para obter a moda utilizar-se-á do pacote modeest (Poncet, 2012) que dispões a
função mfv (Most frequentvalue).

library(modeest)
v <-seq(from =1, to =10, by =1) # amodal (todos valores)
y <-c(0, 1, 2, 3, 4, 5, 5, 5, 6, 6, 7, 7, 7) # bimodal
mfv(v)
## [1] 1 2 3 4 5 6 7 8 9 10
27
mfv(y)
## [1] 5 7

Medidas dedispersão

São medidas descrevem a variabilidade existente em umdeter- minado conjunto de


dados. As medidas de dispersão incluem: amplitude total, variância, desvio padrão e
coeficiente de variação.

1. Amplitude total

t <-c(2, 4, 5, 6, 10)

max(t)-min(t) # indiretamente
## [1] 8
range(t) # mostra o min(t) e o max(t)
## [1] 2 10
range(t)[2]-range(t)[1] # outra maneira
## [1] 8

2. Variância : Usar a função var()

z <-c(1, 2, 3, 4, 5)
var(z)
## [1] 2.5
Para treinar os outros recursos do ambiente R, realize o seguinte comando (a partir da
fórmula da variância amostral):

#Soma de Quadrados dos Desvios, dividido pelo graus de liberdade (n-1)


sum((z-mean(z))^2)/(length(z)-1)
## [1] 2.5

3. Desvio Padrão: usar a função sd().

x <-c(1, 2, 3, 4, 5)

sqrt(var(x)) # é a raiz quadrada da variância


## [1] 1.581139

28
sd(x) # ou usar sd()
## [1] 1.581139

Testes estatísticosbásicos
Ao tratarmos da análise de experimentos, é necessária a realização de testes estatísticos
para verificação de determinadas hipóteses. Teste de hipóteses referem-se ao estabelecimento
de uma regra decisória que permite rejeitar ou não uma hipóese estatística com base nos
elementosamostrais(LEHMANN;ROMANO,2005).Regiãocríticaderejeição(maioriados testes
considera 95% deprobabilidade).
Atualmente, ao invés de fixar o nível de significância de um teste e simplesmente
relatar se H0 foi rejeitada ou não, tem-se dado preferência ao uso do valor de p. Assim, a
hipótese de nulidade (H0) é rejeitada se o valor de p for menor ou igual à α (alfa). Então, para
aplicação de um teste de hipótese os procedimento geral seria:
a) Formular as hipóteses H0 e H1 (hipótese do experimento) e definir o nível de signifi-
cância(α);
b) Especificar a estatística doteste;
c) Determinarovalordaestatísticadotesteevalordepcorrespondente;e
d) Comparar o p-valor com α(alfa).
- Sep-valorformenorouigualaα,rejeita-seH0.
- Sep-valorformaiordoqueα,nãorejeita-seH0.

Testet-Student:

Teste de hipótese utilizado em várias situações de pesquisa quando se deseja, por


exemplo, testar uma afirmação sobre a média populacional ou fazer comparações entre as
médias de duas amostras. A seguir, considere os diâmetros de árvores de duas amostras
diferentes:

dap1 <-c(30.5,35.3,33.2,40.8,42.3,41.5,36.3,43.2,34.6,38.5)

dap2 <-c(28.2,35.1,33.2,35.6,40.2,37.4,34.2,42.1,30.5,38.4)

Teste t para umamédia


Aqui, testar-se-á “dap1” tem média ≥ 35, estatisticamente. Então, as hipóteses do teste são:

t.test(dap1, # amostra a ser testada


mu=35, # hipótese de nulidade
alternativa ="greater") # teste unilateral à direita
##
## One Sample t-test
##

29
## data: dap1
## t = 1.9323, df = 9, p-value = 0.08535
## alternative hypothesis: true mean is not equal to 35
## 95 percent confidence interval:
## 34.5528 40.6872
## sample estimates:
## mean of x
## 37.62

Teste t para as médias de duas amostrasindependentes

Agora,presumir-se-áqueasamostrassãooriundasdeduaspopulaçõesdiferentesequeambas
possuem variâncias homogêneas e distribuiçãonormal.A função t.test() pode ser usada
novamente:

t.test(dap1, dap2, # amostras a serem comparadas


conf.level =0.99) # nível de significância
##
## Welch Two Sample t-test
##
## data: dap1 and dap2
## t = 1.1148, df = 17.999, p-value = 0.2796
## alternative hypothesis: true difference in means is not equal to 0
## 99 percent confidence interval:
## -3.369829 7.629829
## sample estimates:
## mean of x mean of y
## 37.62 35.49

Interpretação do resultado: 𝑝-valor > 0.01, não rejeita-se a hipótese 𝐻0 . Ou seja, as


amostras vêm de populações com mesma média.

ANOVA (Análise deVariância)

Análise de Variância (ANOVA) é uma técnica estatística que permite decompor a


variação total existente no experimento em variação devido à diferença entre efeitos dos
tratamentos enavariaçãodevidoaoacaso(erroexperimentalouresíduo).

VARIAÇÃO TOTAL = EFEITO DOS TRATAMENTOS (fatores controlados) +


EFEITO DO ERRO EXPERIMENTAL OU RESÍDUO (Fatores não-controlados)

Os dados amostrais são separados em grupos, segundo uma características específicas


(fatores). Variam de acordo com os diferentes tipos de de delineamentos experimentais que
podem ser:

a) DIC (Delineamento InteiramenteCasualizado);

30
b) DBC (Delineamento em Blocos Casualizados);e

c) DQL (Delineamento em QuadradoLatino).

Delineamento Inteiramente Casualizado (DIC)

O DIC é o mais simples dos delineamentos experimentais. Utiliza-se do princípio


básico da repetição e casualização. Para fins de aplicação prática no R, considere a
necessidade de
estudosrelativosaocomportamentodaespécieSchizolobiumparahybavar.amazonicumem
situações de viveiro. Assim, procedeu-se a instalação de um experimento sob o DIC com
intuito de avaliar o crescimento em altura da espécie sob diferentes condições de sombrea-
mento. Para tanto, foram estabelecidos quatro tratamento (pleno sol, 20%, 50% e 70% de
sombreamento) com cinco repetições de 25 sementes. Os dados estão no arquivo pa- rica.txt
e correspondem aos valores médios da altura, em centímetros, obtidos após trinta dias de
germinadas assementes.

parica <-read.table(file ="parica.txt", sep="", header=T)

print(parica)
## Trat Rep
## 1 T1 20.0
## 2 T1 22.5
## 3 T1 25.0
## 4 T1 23.5
## 5 T1 17.5
## 6 T2 23.5
## 7 T2 27.5
## 8 T2 25.0
## 9 T2 26.0
## 10 T2 23.5
## 11 T3 17.5
## 12 T3 19.0
## 13 T3 19.5
## 14 T3 20.0
## 15 T3 21.5
## 16 T4 30.0
## 17 T4 33.5
## 18 T4 27.5
## 19 T4 26.0
## 20 T4 26.5

Para implementar a ANOVA para um experimento sob o Delineamento Inteiramente


Casualizado (DIC) pode-se usar a função aov() do pacote stats do R-base (R Core Team,
2017).Em seguida, use a função anova() ou summary() para obter o quadro de ANOVA.
31
anova.DIC <-aov(Rep~Trat,data=parica)

anova(anova.DIC)

Df SumSq MeanSq Fvalue Pr(>F)


Trat 3 242.95 80.98333 13.81379 0.0001049
Residuals 16 93.80 5.86250 NA NA

Uma anáilise gráfica dos resultados da ANOVA para o DIC:

par(mfrow=c(2,2))
plot(anova.DIC) # gráficos para análise dos resíduos

32
Interpretação: Há diferença entre pelo menos 2 tratamentos (rejeita-se H0).
Quando há rejeição de H0 (Fcalculado> Ftabelado), constata-se que as médias dos
tratamentos não são todas iguais entre si. Assim, para o exemplo do Paricá aplicar-se-á o teste
de comparações múltiplas de Tukey.

Tukey <-TukeyHSD(anova.DIC)
plot(Tukey)

RegressãoLinear

Regressão linear simples: utilizada para analisar relações entre variáveis contínuas. No
R, para especificar um modelo é preciso usar a notação de fórmulas. Para implementar uma
regressão linear no ambiente R pode-se usar a função lm() disponível no R-base. A função
retornaosvaloresdoscoeficientesbetasestimadosatravésdoMétododeMínimosQuadrados.Consi
dere os dados de diâmetro (cm), altura (m) e volume (m³) de 10 árvores de Tectona grandis.

TecaR <-data.frame(DAP =c(18.00, 6.80, 7.50, 14.90, 9.90, 11.20, 11.70,


7.10, 15.00, 12.60),
H =c(16.10, 7.95, 11.74, 16.50, 13.84, 13.00, 15.60,
12.70, 18.30, 17.20),
Volume =c(0.196841, 0.016672, 0.028452, 0.131809, 0.065526,
0.057691, 0.082867, 0.026694, 0.153029, 0.100119))
print(TecaR)
## DAP H Volume
## 1 18.0 16.10 0.196841
## 2 6.8 7.95 0.016672
## 3 7.5 11.74 0.028452
## 4 14.9 16.50 0.131809

33
## 5 9.9 13.84 0.065526
## 6 11.2 13.00 0.057691
## 7 11.7 15.60 0.082867
## 8 7.1 12.70 0.026694
## 9 15.0 18.30 0.153029
## 10 12.6 17.20 0.100119
Gráficos de dispersão -plot()

attach(TecaR)
par(mar =c(4.5,3,1.5,1), mgp =c(2,1,0), mfrow =c(1,2))

plot(DAP,Volume, type ="p", main=NULL, font.main=NULL, col.main=NULL,


xlab="DAP (cm)", ylab="Volume (m³)", font.lab=2, col.lab="black",
font.axis=1, col.axis ="black")

plot(H,Volume, type ="p", main=NULL, font.main=NULL, col.main=NULL,


xlab="Altura (m)", ylab="Volume (m³)", font.lab=2, col.lab="black",
font.axis=1, col.axis ="black")
detach(TecaR)

34
Ajuste demodelos

Ajustar o modelo volumétrico de Shumacher-Hall (LnV = b0 + b1LnDAP +b2LnH):

SHall <-lm(log(Volume) ~log(DAP) +log(H), data=TecaR)# Shumacher-Hall


print(SHall)
##
## Call:
## lm(formula = log(Volume) ~ log(DAP) + log(H), data = TecaR)
##
## Coefficients:
## (Intercept) log(DAP) log(H)
## -9.5199 1.8236 0.9278
Para obter informações mais detalhadas do ajuste pode-se usar a função summary().

summary(SHall)
##
## Call:
## lm(formula = log(Volume) ~ log(DAP) + log(H), data = TecaR)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.118404 -0.035592 -0.002238 0.006943 0.175846
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -9.5199 0.3231 -29.467 1.34e-08 ***
## log(DAP) 1.8236 0.1504 12.122 5.94e-06 ***
## log(H) 0.9278 0.2084 4.452 0.00296 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.08561 on 7 degrees of freedom
## Multiple R-squared: 0.9915, Adjusted R-squared: 0.9891
## F-statistic: 408.9 on 2 and 7 DF, p-value: 5.634e-08

35
A função anova() permite obter a tabela de ANOVA da Regressão:

anova(SHall)

Df Sum Sq MeanSq Fvalue Pr(>F)


log(DAP) 1 5.8473882 5.8473882 797.89089 0.0000000
log(H) 1 0.1452670 0.1452670 19.82204 0.0029638
Residuals 7 0.0512999 0.0073286 NA NA

Outras informaçoes importantes podem ser obtidas. Por exemplo, os valores preditos
pelo modelo de regressão pode ser extraído com uso da função predict() e os reśiduos com a
função residuals().

predict(SHall)
## 1 2 3 4 5 6 7
## -1.670568 -4.100528 -3.560144 -1.992486 -2.901154 -2.734250 -2.485435
## 8 9 10
## -3.587165 -1.884217 -2.259695
residuals(SHall)
## 1 2 3 4 5
## 0.0452088151 0.0065037401 0.0006068408 -0.0339156802 0.1758455641
## 6 7 8 9 10
## -0.1184039923 -0.0050829162 -0.0361510374 0.0070894414 -0.0417007755

REFERENCIAL TEÓRICO

1. Manuaistécnicos
R Language Definition
An Introduction to R - is based on the former “Notes on R”, gives an introduction to the
language and how to use R for doing statistical analysis and graphics.
Introdução à Programação em R - by Luis Torgo.

2. Livro
PETERNELLI, L.A.; MELLO, M.P. Conhecendo o R: uma visão estatística.UFV, 2011.

3. Pacotes
Dragulescu AA (2014) xlsx: Read, write, format Excel 2007 and Excel 97/2000/XP/2003
files.
Poncet P (2012) modeest: Mode Estimation.
36
R Core Team (2017) R: A Language and Environment for Statistical Computing. R Foun-
dation for Statistical Computing, Vienna, Austria, p.

37

Potrebbero piacerti anche