Onde os dados estão centrados? Como eles estão espalhados? Eles são
simétricos, i.e., a distribuição é normal? São enviesados, bi-modais?
Existem valores
extremos?
Já vimos algumas operações matemáticas com vetores e também como usar as funções hist() e boxplot() para gerar figuras de distribuição de variáveis numéricas individualmente.
Vimos também como fazer iterações usando funções da família apply().
Também já aprendemos sobre a função summary(), que faz um resumo de todas as variáveis nos seus dados e aqui vamos entender isso melhor, apresentando a função quantile(), que permite extrair os quantis, que são valores que dividem uma distribuição probabilística em intervalos iguais de probabilidade.
Com essas ferramentas, podemos descrever a distribuição de nossas variáveis numéricas.
## Lendo a planilha com read.tableavesc <-read.table("aves_cerrado.csv", row.names =1, header = T, sep =";", dec =",", as.is = T, na.strings =c("NA", "", "NULL"))
caixeta <-read.csv("caixeta.csv") ## arquivo caixeta.csv deve estar no diretorio de trabalho# note que mantemos todos os argumentos padrão (veja o formato do arquivo caixeta)
## Resumo estatistico: medias, media truncada e mediana, quantis# pegando apenas as variáveis numéricasavesc[, 2:4]
urubu
carcara
seriema
Ce1
5
18
6
Ce2
7
7
6
Ce3
5
14
4
Ce4
3
12
5
Ce5
4
16
4
Ce6
NA
20
NA
Ce7
6
19
4
Ce8
4
21
10
Ce9
2
11
6
Ce10
5
9
7
Ce11
6
12
8
Ce12
6
24
5
Ce13
7
17
6
Ce14
6
16
4
Ce15
5
15
6
Ce16
5
12
8
Ce17
3
14
3
Ce18
13
14
4
Ce19
8
21
2
Ce20
7
13
4
CC1
22
8
5
CC2
10
16
3
CC3
17
14
3
CC4
16
16
6
CC5
20
10
NA
CC6
18
7
3
CC7
16
8
5
CC8
14
8
4
CC9
12
7
4
CC10
15
14
4
CC11
9
11
8
CC12
11
12
4
CC13
20
11
4
CC14
18
11
3
CC15
8
7
6
CC16
15
14
5
CC17
17
8
5
CC18
17
14
6
CC19
12
7
6
CC20
12
9
12
CL1
11
3
9
CL2
10
5
6
CL3
19
5
5
CL4
15
8
4
CL5
13
6
6
CL6
12
5
4
CL7
16
5
5
CL8
13
3
6
CL9
19
NA
5
CL10
19
5
4
CL11
11
3
9
CL12
18
3
7
CL13
15
6
5
CL14
19
4
4
CL15
13
4
6
CL16
16
5
2
CL17
10
3
10
CL18
12
6
7
CL19
18
5
4
CL20
19
4
4
# podemos fazer um resumo estatístico da distribuição de cada uma dessas colunassummary(avesc[, 2:4])
urubu
carcara
seriema
Min. : 2.00
Min. : 3.00
Min. : 2.000
1st Qu.: 7.00
1st Qu.: 5.50
1st Qu.: 4.000
Median :12.00
Median : 9.00
Median : 5.000
Mean :11.93
Mean :10.25
Mean : 5.345
3rd Qu.:16.50
3rd Qu.:14.00
3rd Qu.: 6.000
Max. :22.00
Max. :24.00
Max. :12.000
NA’s :1
NA’s :1
NA’s :2
# essa função me retorna várias estatísticas da distribuição de cada variável# os valores mínimos e máximos# a tendência central pela média e pela mediana# e o 1 e o 3 quartil, que juntamente com o mínimo, o máximo e mediana,# indicam as divisões dos dados em quatro partes identicas (vamos ver isso melhor abaixo)# funcao summary, mas não retorna por, exemplo, o desvio padrão ou a variância das colunas.
# e não podemos fazer isso apenas com a função sd para todas as colunassd(avesc[, 2:4]) # ops deprecado (eu estou trabalhando com uma matriz)
# mas posso usar a funcao apply (para cada coluna, argumento MARGIN)apply(avesc[, 2:4], 2, sd, na.rm =TRUE)
# note que os valores dos quartis:quantile(avesc$urubu, na.rm =TRUE)
## 0% 25% 50% 75% 100%
## 2.0 7.0 12.0 16.5 22.0
# aparecem também quando usamos summary, que no entanto, retorna a média artimética,# que é o único valor que não é um quartil.summary(avesc$urubu)
Min.
1st Qu.
Median
Mean
3rd Qu.
Max.
NA’s
2
7
12
11.9322
16.5
22
1
# para entender melhor isso vamos graficar:# primeiro num histogramahist(avesc$urubu, main ="Avistamentos de Urubu", xlab ="Número de aves observadas por local")
# melhorando um poucohist(avesc$urubu, main ="Avistamentos de Urubu", xlab ="Número de aves observadas por local", breaks =22, col ="gray")# agora adicionamos em azul os quartisabline(v =quantile(avesc$urubu, na.rm =TRUE), col ="blue", lwd =5)# note que as barras azuis estão igualmente espaçadas no eixo X, pois elas dividem a distribuição em partes iguais# vamos plotar a médiaabline(v =mean(avesc$urubu, na.rm =TRUE), col ="red", lty ="dotted", lwd =6)# e a medianaabline(v =median(avesc$urubu, na.rm =TRUE), col ="green", lty ="dotted", lwd =6)# note como a mediana é equivalente ao quartil que indica 50% na divisão simétrica dos dados e que neste caso a diferença entre média e mediana é muito pequena, pois os dados são bem simétricos em relação à tendência central# vamos adicionar o desvio padrão:v1 <-sd(avesc$urubu, na.rm =TRUE) +mean(avesc$urubu, na.rm =TRUE)v2 <-mean(avesc$urubu, na.rm =TRUE) -sd(avesc$urubu, na.rm =TRUE)abline(v =c(v1, v2), col ="yellow", lty ="solid", lwd =4)
# agora com um box plot:boxplot(avesc$urubu)abline(h =quantile(avesc$urubu, na.rm =TRUE), col ="blue", lwd =2)
# Média truncada = e.g. TIRANDO 10% DOS VALORES NOS EXTREMOS (posso ver como muda, caso tenha valores extremos, vai mudar muito)?mean # veja o argumento trim
apply(avesc[, 2:4], 2, mean, trim =0.1, na.rm =TRUE) # truncando
# vamos calcular o DAP a partid o CAP (circunferencia a altura do peito)# se cap = 2*pi*dap/2 portanto dap = cap/pidap <- caixeta$cap / pihist(dap) # veja distribuição diametrica desses dados (é uma típica log-normal)
# adicionando a nova coluna aos dadoscaixeta$dap <- daphead(caixeta, 2)
local
parcela
arvore
fuste
cap
h
especie
dap
chauas
1
1
1
210
80
Myrcia sulfiflora
66.84508
chauas
1
3
1
170
80
Myrcia sulfiflora
54.11268
# resume localidadelevels(caixeta$local)
## NULL
# altura das arvore em cada localidadechauas.h <- caixeta[caixeta$local =="chauas", "h"]jureia.h <- caixeta[caixeta$local =="jureia", "h"]retiro.h <- caixeta[caixeta$local =="retiro", "h"]# para a localidade chauashist(chauas.h, breaks =20)
# ops tem um valor extremo, que era um errochauas.h[chauas.h >300]
## [1] 480
# deveria ser 48hist(caixeta$h) # um valor extremo de todo o conjunto de dados
chauas.h[chauas.h >300] <-48# corrigimos esse valorhist(chauas.h)
hist(jureia.h)
hist(retiro.h)
range(chauas.h) # aplitude de variacao
## [1] 20 230
range(jureia.h)
## [1] 30 220
range(retiro.h)
## [1] 5 170
xl <-c(0, 250) # limitando o grafico aos extremos de todo o conjunto de dadosyl <-c(0, 150)hist(chauas.h, breaks =30, xlim = xl, ylim = yl)hist(jureia.h, add =TRUE, breaks =30, col ="blue")hist(retiro.h, add =TRUE, breaks =30, col ="green")
# mas seria melhor ver cada distribuicao individualmente por localidade# dividimos o dispositivo em 3 linhas e uma colunapar(mfrow =c(3, 1))hist(chauas.h, breaks =20, xlim = xl, ylim = yl, col ="green")hist(jureia.h, breaks =20, xlim = xl, ylim = yl, col ="blue")hist(retiro.h, breaks =20, xlim = xl, ylim = yl, col ="red")