options(warn=-1)
suppressMessages(library(knitr, warn.conflicts=FALSE))
suppressMessages(library(readxl, warn.conflicts=FALSE))
suppressMessages(library(DescTools, warn.conflicts=FALSE))
suppressMessages(library(ggplot2, warn.conflicts=FALSE))
suppressMessages(library(png, warn.conflicts=FALSE))
suppressMessages(library(grid, warn.conflicts=FALSE))
suppressMessages(library(EnvStats, warn.conflicts=FALSE))
suppressMessages(library(aplpack, warn.conflicts=FALSE))
suppressMessages(library(diptest, warn.conflicts=FALSE))
# source("eiras.friendlycolor.R")
# source("eiras.numeric.summary.R")
# source("demo_numericsummary.R")
# source("demo_gamma.R")
# source("demo_beta.R")
# source("demo_beta&normal.R")
# source("demo_t&normal.R")
# source("BiometriaNormal.R")
# source("AproximacaoNormal.R")
# source("hemoglobina.R")
# source("hemoglobina_padrao.R")
# source("hemoglobina_centrada.R")
# source("massacerebro.R")
# source("massacerebro_padrao.R")
# source("massacerebro_tukeytry.R")
# source("eiras.create.population.R")
# source("eiras.plot.density.withmeansd.R")
# source("eiras.sampling.R")
# source("glicemia_normal.R")
# source("glicemia_intervalos.R")
# source("glicemia_hdi.R")
# source("demo_pie.R")
# source("demo_barra.R")
# source("demo_lowhigh.R")
# source("demo_dotplot.R")
# source("demo_dotplot2.R")
# source("demo_histograma.R")
# source("demo_histograma2.R")
# source("demo_scatterplot.R")
# source("demo_scatterplot2.R")
# source("demo_bagplot.R")
# source("demo_density.R")
# source("demo_density2.R")
# source("demo_dotplot3.R")
# source("demo_mediaIC95.R")
# source("demo_mediaIC95_2.R")
# source("demo_boxplot2.R")
# source("demo_Likert.R")

Material

  • HTML de R Markdown em RPubs

O que é uma distribuição de probabilidade?

Em um estudo foi verificado o número de drogas utilizadas por grÔvidas, incluindo medicamentos, Ôlcool, fumo e drogas ilícitas. Os dados hipotéticos estão em um arquivo no formato Excel:

DrgGrv <- readxl::read_excel("DrogasGravidez.xlsx")
print(DrgGrv)
   Drogas Pacientes
1       0      1425
2       1      1351
3       2       793
4       3       348
5       4       156
6       5        58
7       6        28
8       7        15
9       8         6
10      9         3
11     10         1
12     11         0
13     12         1

O arquivo lido tem duas colunas:

  • Drogas, contendo o nĆŗmero de drogas utilizadas e
  • Pacientes, com o nĆŗmero de pacientes que utilizou este nĆŗmero de drogas.

Um grÔfico da distribuição do número de pacientes deve trazer o número de drogas no eixo das abscissas (x) e o número de pacientes no eixo das ordenadas (y). O comando mais simples possível é:

plot(DrgGrv$Drogas,DrgGrv$Pacientes)

obtendo-se: Funciona, foi rƔpido, mas Ʃ muito mal acabado.


Usando, na Console:

> ? plot

acessarÔ a documentação da função plot no RStudio. Note que, em algum ponto do texto, aparece

Usage
plot(x, y, …)

Sempre que encontrar ā€œā€¦ā€, significa que a função pode receber muitos parĆ¢metros. Uma parte deles pode estar descrita na função, mas outros sĆ£o partilhados entre vĆ”rias funƧƵes de grĆ”fico, e só as encontrarĆ” atravĆ©s dos links disponĆ­veis.

Para facilitar, sugerimos alguns destes parâmetros.


Uma das vantagens de se utilizar comandos para gerar grÔficos é a flexibilidade. O usuÔrio não fica limitado a uma interface grÔfica usando somente os recursos considerados necessÔrios por quem a desenvolveu. No caso do plot, sugiro aqui alguns parâmetros. HÔ muitos outros, caso queira explorar:

  • main … tĆ­tulo
  • xlab e ylab … tĆ­tulos dos eixos x e y
  • xlim e ylim … limites dos eixos x e y (recebem um vetor)
  • col … cor para linhas ou sĆ­mbolos
  • bg … cor de preenchimento
  • type … tipo de grĆ”fico
  • lwd … largura da linha
  • lty … padrĆ£o da linha (sólida ou pontilhadas)
  • pch … tipo de sĆ­mbolo

HÔ muitos outros, e nem todos podem funcionar ao mesmo tempo, pois hÔ dependências mútuas. Além de consultar

> ?plot

veja tambƩm

> ?lines

> ?points

para encontrar outros e experimentar com eles.


Os nomes das variÔveis passadas para a função plot (DrgGrv$Drogas, DrgGrv$Pacientes) são usados como nomes dos eixos para construir o grÔfico. Isto pode ser resolvido no R com os parâmetros xlab e ylab:

plot(DrgGrv$Drogas,DrgGrv$Pacientes, 
     main="Uso de Drogas na Gravidez", 
     xlab="NĆŗmero de Drogas", 
     ylab="Gestantes", 
     ylim=c(0,1500), lwd=3, col="#994F88")

Gostaria de ligar os pontos? Use a função lines():

plot(DrgGrv$Drogas,DrgGrv$Pacientes, 
     main="Uso de Drogas na Gravidez", 
     xlab="NĆŗmero de Drogas", 
     ylab="Gestantes", 
     ylim=c(0,1500), lwd=3, col="#994F88")
lines (DrgGrv$Drogas, DrgGrv$Pacientes, lwd=3, col="#994F88")

No entanto, isto não é o mais correto a fazer, pois trata-se de variÔvel quantitativa discreta. Para fazer com linhas verticais, como se fosse um grÔfico de barras com uma variÔvel quantitativa no eixo x, use type:

plot(DrgGrv$Drogas,DrgGrv$Pacientes, 
     main="Uso de Drogas na Gravidez", 
     xlab="NĆŗmero de Drogas", ylab="Gestantes", 
     ylim=c(0,1500), lwd=3, col="#994F88", 
     type = "h")

O mesmo grƔfico, em porcentagem

Muitas vezes podemos precisar criar novas variƔveis em um data frame. Por exemplo, podemos criar uma coluna com a porcentagem de pacientes, arredondada para duas casas decimais:

DrgGrv$FrequenciaRelativa <- round(DrgGrv$Pacientes/sum(DrgGrv$Pacientes)*100,2)

Agora, para obter o mesmo grÔfico, é só ajustar o comando, alterando ylab e ylim de acordo. Podemos, também, adicionar os símbolos no topo das barras, usando a função points():

plot(DrgGrv$Drogas,DrgGrv$FrequenciaRelativa, 
     main="Uso de Drogas na Gravidez", 
     xlab="NĆŗmero de Drogas", ylab="Porcentagem de Gestantes", 
     ylim=c(0,40), lwd=3, col="#994F88", type = "h")
points(DrgGrv$Drogas,DrgGrv$FrequenciaRelativa, col="#994F88", bg="#994F88", pch=21)

Esta Ô a distribuição de probabilidades desta amostra, cuja variÔvel é quantitativa discreta. Cada coluna representa, se eu acessar aleatoriamente uma paciente deste grupo, a probabilidade de ser alguém que utiliza nenhuma droga, uma droga, duas drogas, etc.

HÔ duas propriedades que definem uma distribuição de probabilidades:

1. Todos os valores estão entre zero e um (ou 100%)

DrgGrv$FrequenciaRelativa>=0 & DrgGrv$FrequenciaRelativa<=100
 [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

Alternativamente, se o arquivo Ʃ grande, pode ser mais fƔcil verificar pelo complemento: o total de valores abaixo de zero ou acima de 100%:

sum(DrgGrv$FrequenciaRelativa<0 | DrgGrv$FrequenciaRelativa>100)
[1] 0

2. A soma das probabilidades tem que ser 100%

sum(DrgGrv$FrequenciaRelativa)
[1] 100

Outra alternativa para gerar grÔficos de distribuições, menos trabalhosa porque as funções do pacote fornecem defaults úteis, mas que envolve a instalação de outro pacote, é EnvStats::epdfPlot(). Por exemplo:

library(EnvStats)
DadosBrutos <- c()
for (r in 1:nrow(DrgGrv))
{
  DadosBrutos <- c(DadosBrutos, rep(DrgGrv$Drogas[r], times=DrgGrv$Pacientes[r]))
}
EnvStats::epdfPlot(DadosBrutos, discrete=TRUE,
                   epdf.col = "black")


Uma outra forma Ćŗtil Ć© verificar as probabilidades acumuladas. Vamos criar uma nova coluna:

DrgGrv$FrequenciaAcumulada <- NA
for(r in 1:nrow(DrgGrv))
{
  DrgGrv$FrequenciaAcumulada[r] <- sum(DrgGrv$FrequenciaRelativa[1:r])
}

O data frame agora contƩm:

print(DrgGrv)
   Drogas Pacientes FrequenciaRelativa FrequenciaAcumulada
1       0      1425              34.05               34.05
2       1      1351              32.28               66.33
3       2       793              18.95               85.28
4       3       348               8.32               93.60
5       4       156               3.73               97.33
6       5        58               1.39               98.72
7       6        28               0.67               99.39
8       7        15               0.36               99.75
9       8         6               0.14               99.89
10      9         3               0.07               99.96
11     10         1               0.02               99.98
12     11         0               0.00               99.98
13     12         1               0.02              100.00

Para uma visão grÔfica da frequência relativa acumulada, temos:

plot(DrgGrv$Drogas,DrgGrv$FrequenciaAcumulada, 
     main="Uso de Drogas na Gravidez", 
     xlab="NĆŗmero de Drogas", ylab="FrequĆŖncia Relativa Acumulada", 
     ylim=c(0,100), lwd=3, col="#994F88", type = "s",
     axes=FALSE)
axis(1, at=0:max(DrgGrv$Drogas))
axis(2)
points(DrgGrv$Drogas,DrgGrv$FrequenciaAcumulada, 
       col="#994F88", bg="#994F88", pch=21)

Note o uso de axes=FALSE seguido da colocação dos eixos x (axis(1)) e y (axis(2)). Fizemos assim para que todos os números de drogas, de 1 em 1, aparecessem (usando o parâmetro at). Este tipo de tratamento facilita verificar, por exemplo, que a quase totalidade das pacientes (93.6%) utilizam 3 drogas ou menos:

plot(DrgGrv$Drogas,DrgGrv$FrequenciaAcumulada, 
     main="Uso de Drogas na Gravidez", 
     xlab="NĆŗmero de Drogas", ylab="FrequĆŖncia Relativa Acumulada", 
     ylim=c(0,100), lwd=3, col="#994F88", type = "s",
     axes=FALSE)
axis(1, at=0:max(DrgGrv$Drogas))
axis(2)
points(DrgGrv$Drogas,DrgGrv$FrequenciaAcumulada, 
       col="#994F88", bg="#994F88", pch=21)
abline(h=DrgGrv$FrequenciaAcumulada[DrgGrv$Drogas==3], lty=2)
abline(v=3, lty=2)


A tabela que utilizamos jÔ trouxe a contagem do número de pacientes que utilizam determinado número de drogas. Podemos reconstituir os dados brutos, com o seguinte código:

DadosBrutos <- c()
for(r in 1:nrow(DrgGrv))
{
  DadosBrutos <- c(DadosBrutos, rep(DrgGrv$Drogas[r], times=DrgGrv$Pacientes[r]))
}

Este código percorre cada linha da tabela e repete (rep()) o número de drogas quantas vezes forem as pacientes que consomem tal quantidade, acumulando em um vetor numérico que chamamos de DadosBrutos. Para mostrar que a operação estÔ correta, podemos tabular os dados novamente:

Contagem <- table(DadosBrutos)
print (Contagem)
DadosBrutos
   0    1    2    3    4    5    6    7    8    9   10   12 
1425 1351  793  348  156   58   28   15    6    3    1    1 

Existe uma forma de exibir graficamente a distribuição de probabilidades acumuladas a partir dos dados brutos, usando a função ecdf():

plot(ecdf(DadosBrutos),
     main="Uso de Drogas na Gravidez", 
     xlab="NĆŗmero de Drogas", ylab="Probabilidade Acumulada", 
     ylim=c(0,1), lwd=3, col="#994F88", 
     axes=FALSE)
axis(1, at=0:max(DadosBrutos))
axis(2)
abline(h=sum(DadosBrutos<=3)/length(DadosBrutos), lty=2)
abline(v=3, lty=2)

Repare que as linhas tracejadas que apresentamos com abline() são, respectivamente:

  • a horizontal dada pela fração do nĆŗmero de ocorrĆŖncias de drogas entre 0 e 3 (sum(DadosBrutos<=3)) dividida pelo nĆŗmero total de ocorrĆŖncias que Ć© o tamanho do vetor, o qual tambĆ©m corresponde ao nĆŗmero de pacientes da amostra (length(DadosBrutos)), resultando em 0.9359618.
  • a vertical, dada pelo valor 3.
Compare este grÔfico com o que fizemos, anteriormente, utilizando a frequência relativa acumulada do data frame.


Anatomia das distribuiƧƵes

A distribuição de probabilidades que apresentamos até aqui não tem nome. Existem vÔrias outras que são utilizadas porque suas propriedades são bem conhecidas. Por exemplo:

https://www.kdnuggets.com/2020/02/probability-distributions-data-science.html

Esta figura mostra as distribuiƧƵes mais populares. As distribuiƧƵes agrupam-se em famƭlias. Na parte superior aparecem as distribuiƧƵes discretas, sendo a de Bernoulli uma das mais fundamentais. Dela derivam a GeomƩtrica e a Binomial, da qual se obtƩm a de Poisson. Na parte inferior aparecem as distribuiƧƵes contƭnuas.

Caso queira ver outras distribuiƧƵes e os relacionamentos entre elas, consulte, por exemplo, https://chenghanyu.github.io/software/rshiny_random/

Propriedades gerais

As propriedades que mais interessam para entender a anatomia de uma distribuição são média (mean), variância (variance) ou desvio-padrão, assimetria (skewness) e excesso de curtose (ex. kurtosis). Nossa proposta é utilizar funções do R para verificar tais propriedades; usaremos duas alternativas.

Um jeito de testar estas funƧƵes Ć© gerar vetores numĆ©ricos com as funƧƵes do R que fornecem as distribuiƧƵes conhecidas a partir dos valores de interesse. Estas funƧƵes comeƧam com um ā€œdā€ minĆŗsculo, seguido do tipo de distribuição (e.g., dnorm(), dbinom(), dpois(), dgamma(), etc.), e precisam receber os parĆ¢metros necessĆ”rios para caracterizar a distribuição pedida.

Por exemplo, a distribuição normal pode ser gerada com:

valores <- 0:70
valnorm <- dnorm(valores, mean=35, sd=12)

Os parâmetros estão explícitos para maior clareza (funcionaria da mesma forma com dnorm(valores,35,12)) e veremos adiante que a distribuição normal é completamente caracterizada por estes dois parâmetros: média e desvio-padrão.

Podemos conferir o que foi obtido graficamente com:

plot(valores, valnorm, type="l")

Alternativamente, podemos usar o pacote EnvStats.

EnvStats::pdfPlot(distribution = "norm",
                  param.list = list(mean=35, sd=12))

Observe que, apenas com os defaults, EnvStats::pdfPlot() produziu um grĆ”fico mais elaborado. VĆ”rios dos parĆ¢metros grĆ”ficos podem ser utilizados para mais controle. O nome do eixo y nĆ£o Ć© adequado. Devia ser ā€œDensidadeā€. Adiciona tĆ­tulo ao grĆ”fico e aos eixos mas utiliza o inglĆŖs. No entanto, a documentação desta função, disponĆ­vel em https://www.rdocumentation.org/packages/EnvStats/versions/2.3.1/topics/Distribution.df, mostra que hĆ” parĆ¢metros adicionais que plot(), de propósito geral, necessitaria de algum esforƧo. AlĆ©m disto, EnvStats::pdfPlot() traz diversas funƧƵes disponĆ­veis, prĆ©-configuradas, que podem ser vistas digitando-se EnvStats::Distribuition.df$Name na Console do RStudio.

Veja resultados comparÔveis, com os dois códigos abaixo, e escolha o que prefere utilizar. Com plot() é necessÔrio computar a distribuição e, então, gerar o grÔfico:

valor.x <- 0:70
valor.y <- dnorm(valores, mean=35, sd=12)
plot(valor.x, valor.y, 
     main="Distribuição normal\n(média=35, dp=12)", 
     xlab="Valores", ylab="Densidade",
     lwd=3, type="l")

Com EnvStats::pdfPlot() o parâmetro distribution resolve o tipo solicitado (foi preciso adicionar curve.fill=FALSE para que a Ôrea sob a curva não fosse preenchida):

EnvStats::pdfPlot(distribution = "norm",
                  param.list = list(mean=35, sd=12),
                  main="Distribuição normal\n(média=35, dp=12)", 
                  xlab="Valores", ylab="Densidade",
                  curve.fill=FALSE)

Sugerimos que também explore os parâmetros disponíveis, consultando a documentação no RStudio. A hachura da Ôrea sob a curva, por exemplo, pronta em EnvStats::pdfPlot(), é trabalhosa no plot(), exigindo o uso de outras funções.


Outra forma para estudar as propriedades das distribuiƧƵes Ć© gerar vetores numĆ©ricos com as funƧƵes do R que fornecem nĆŗmeros pseudoaleatórios, sorteados de acordo com as probabilidades de distribuiƧƵes conhecidas. Estas funƧƵes comeƧam com um ā€œrā€ minĆŗsculo (de random), seguido do tipo de distribuição (e.g., rnorm(), rbinom(), rpois(), rgamma(), etc.), e precisam receber o nĆŗmero de valores a gerar e os parĆ¢metros necessĆ”rios para caracterizar a distribuição pedida.

Por exemplo, um sorteio com distribuição normal pode ser feito com:

set.seed(3972) # para repetir este exemplo
valores <- rnorm(1e6, mean=35, sd=12)

Os parâmetros estão explícitos para maior clareza (funcionaria da mesma forma com rnorm(1e6,35,12)). Note que precisamos gerar muitos valores (neste exemplo, um milhão de valores) para que o sorteio tenha propriedades similares às previstas em teoria.

Graficamente:

densidade <- density(valores)
plot(densidade, 
     main="Distribuição normal", 
     xlab="Valores", ylab="Densidade",
     lwd=3, type="l")

Podemos conferir as propriedades da distribuição obtida e confrontÔ-las com os valores esperados para saber se a simulação foi bem sucedida.

média e desvio-padrão

A função R para média é mean(), que calcula a média aritmética de um vetor numérico. Desvio-padrão é dado por sd(). Pode-se obter mais alguns valores com summary(). Outra alternativa é desenvolver uma função a seu gosto, o que fizemos em numeric.summary(). Além disto, após calcular os valores de média e desvio-padrão, podemos incorporar esta informação no título do grÔfico com a função paste(). O código completo é:

# trazendo a funcao numeric.summary() que desenvolvemos
source("eiras.numeric.summary.R")

set.seed(3972) # para repetir este exemplo

# gera valores com distribuicao normal
valores <- rnorm(1e6, mean=35, sd=12)

# calcula media e desvio-padrao
media <- mean(valores)
desvpad <- sd(valores)

# prepara o titulo do grafico
titulo <- paste("Distribuição normal","\n",
                "(mƩdia=", round(media,2),", ",
                "dp=",round(desvpad,2),")",
                sep="")
# exibe o grafico
densidade <- density(valores)
plot (densidade, 
      main=titulo, 
      xlab="Valores", ylab="Densidade",
      lwd=3, type="l")

# exibe os valores calculados
# media e dp
cat("MƩdia simulada = ", media,"\n", sep="")
cat("Dp simulado = ", desvpad,"\n", sep="")
# sumario
cat("\nFunção do R - summary():\n")
print(summary(valores))
# funcao propria
cat("\nFunção 'eiras' - numeric.summary():\n")
print(numeric.summary(valores))

obtendo-se:

MƩdia simulada = 35.0069
Dp simulado = 12.00397

Função do R - summary():
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -21.08   26.92   35.01   35.01   43.10   91.18 

Função 'eiras' - numeric.summary():
      Min.  1st Qu.   Median  3rd Qu.     Max.    Mean  St.Dev.     n NA
 -21.08207 26.91716 35.01147 43.10221 91.18478 35.0069 12.00397 1e+06  0

Ć­ndice de assimetria (skewness)

Distribuições podem ser simétricas (como a distribuição normal), ou apresentarem assimetria: negativa (cauda mais longa à esquerda) ou positiva (cauda mais longa à direita).

Existe função R no pacote DescTools que fornece:

skewness <- DescTools::Skew(valores)
cat("Skewness (mƩtodo 3) = ",skewness,"\n", sep="")
Skewness (mƩtodo 3) = -0.0007088539

HÔ alguns métodos de estimação disponíveis, e adotaremos, aqui, o default, método=3. O valor obtido, skewness=-0.0007088539, próximo a zero, indica que nosso sorteio seguindo distribuição normal foi bem sucedido, obtendo uma distribuição quase perfeitamente simétrica.

Por exemplo, esta distribuição gama tem assimetria positiva:

library(DescTools)

source("eiras.numeric.summary.R")

valgamma <- rgamma(1e6, shape=2)
densgamma <- density(valgamma)
plot (densgamma, 
      main="Distribuição Gama", xlab="Valores", ylab="Densidade")
print(numeric.summary(valgamma))
skewgamma <- DescTools::Skew(valgamma)
cat("\nSkewness (mƩtodo 3) = ",skewgamma,"\n", sep="")

         Min.   1st Qu.   Median  3rd Qu.     Max.     Mean  St.Dev.     n NA
 0.0009525638 0.9620691 1.680487 2.695757 16.53169 2.002173 1.415426 1e+06  0

Skewness (mƩtodo 3) = 1.408806

E esta distribuição beta tem assimetria negativa:

library(DescTools)

source("eiras.numeric.summary.R")

valbeta <- rbeta(1e6, shape1=1, shape2=0.5)
densbeta <- density(valbeta)
plot (densbeta, 
      main="Distribuição Beta", xlab="Valores", ylab="Densidade")
print(numeric.summary(valbeta))
skewbeta <- DescTools::Skew(valbeta)
cat("\nSkewness (mƩtodo 3) = ",skewbeta,"\n", sep="")

         Min.   1st Qu.    Median   3rd Qu. Max.      Mean   St.Dev.     n NA
 2.028525e-06 0.4376071 0.7499941 0.9375091    1 0.6666065 0.2981604 1e+06  0

Skewness (mƩtodo 3) = -0.6392086

excesso de curtose

A curtose é a medida de quanto os valores estão concentrados. A distribuição normal é mesocúrtica. Valores negativos indicam distribuições platicúrticas (dados menos concentrados ao redor da tendência central) e positivos indicam distribuições leptocúrticas (dados mais concentrados ao redor da tendência central).

O pacote DescTools também tem função para curtose. Para o exemplo da distribuição normal, acima, que criou o vetor valores, obtemos:

curtose <- DescTools::Kurt(valores)
cat("Ex. kurtosis (mƩtodo 3) = ",curtose,"\n", sep="")
Ex. kurtosis (mƩtodo 3) = 0.003695169

Similarmente à DescTools::Skew(), o método default é 3 e o adotaremos sem discussão. O valor obtido, curtose=0.0036952, próximo a zero, indica que nosso sorteio seguindo distribuição normal obteve uma distribuição praticamente mesocúrtica.

O seguinte código gera uma distribuição beta platicúrtica e uma normal, com mesma média e desvio padrão da beta para referência (em linha pontilhada):

source ("eiras.numeric.summary.R")

valores <- rbeta(1e6, shape1=2, shape2=2)
densidade <- density(valores)
media <- mean(valores)
desvpad <- sd(valores)
skewness <- DescTools::Skew(valores)
curtose <- DescTools::Kurt(valores)
norm.x <- seq(from = min(densidade$x), to = max(densidade$x), length.out = 500)
norm.y <- dnorm(norm.x, mean=media, sd=desvpad)
plot (densidade,
      main="Distribuição platicúrtica", xlab="Valores", ylab="Densidade",
      ylim=c(0,max(densidade$y,norm.y)), lwd=3)
lines(norm.x, norm.y, col="red", lty=2, lwd=2)
legend("topright", 
       c("Beta", "Normal"), 
       col=c("black", "red"),
       lwd=c(3,2), 
       lty=c(1,2), 
       box.lwd=0, bg="transparent")  

cat("SumƔrio:\n")
sumario <- numeric.summary(valores)
print(sumario)
cat("\n")
cat("MƩdia = ",media,"\n", sep="")
cat("Desvio-padrão = ",desvpad,"\n", sep="")
cat("Assimetria = ",skewness,"\n", sep="")
cat("Ex.curtose = ",curtose,"\n", sep="")

obtendo-se:

SumƔrio:
         Min.   1st Qu.    Median   3rd Qu.      Max.      Mean  St.Dev.     n
 0.0004135141 0.3264107 0.4998925 0.6732455 0.9989592 0.4999819 0.223408 1e+06
 NA
  0

MƩdia = 0.4999819
Desvio-padrão = 0.223408
Assimetria = -0.0008163738
Ex.curtose = -0.8563834

Com procedimento similar, uma distribuição \(t\) com 5 graus de liberdade é leptocúrtica, com a seguinte anatomia:

source ("eiras.numeric.summary.R")

valores <- rt(1e6, df=5, ncp=0)
densidade <- density(valores)
media <- mean(valores)
desvpad <- sd(valores)
skewness <- DescTools::Skew(valores)
curtose <- DescTools::Kurt(valores)
norm.x <- seq(from = min(densidade$x), to = max(densidade$x), length.out = 500)
norm.y <- dnorm(norm.x, mean=media, sd=desvpad)
plot (densidade,
      main="Distribuição leptocúrtica", xlab="Valores", ylab="Densidade",
      xlim=c(-4,4),
      ylim=c(0,max(densidade$y,norm.y)), lwd=3)
lines(norm.x, norm.y, col="red", lty=2, lwd=2)
legend("topright", 
       c("t(5)", "Normal"), 
       col=c("black", "red"),
       lwd=c(3,2), 
       lty=c(1,2), 
       box.lwd=0, bg="transparent")  

cat("SumƔrio:\n")
sumario <- numeric.summary(valores)
print(sumario)
cat("\n")
cat("MƩdia = ",media,"\n", sep="")
cat("Desvio-padrão = ",desvpad,"\n", sep="")
cat("Assimetria = ",skewness,"\n", sep="")
cat("Ex.curtose = ",curtose,"\n", sep="")

SumƔrio:
      Min.    1st Qu.        Median   3rd Qu.     Max.          Mean  St.Dev.
 -26.09016 -0.7283402 -0.0001420819 0.7260703 28.25093 -0.0009572557 1.289349
     n NA
 1e+06  0

MƩdia = -0.0009572557
Desvio-padrão = 1.289349
Assimetria = -0.01071764
Ex.curtose = 4.915372

Encontramos um problema com a função rt(): produz a distribuição incorretamente quando geramos mais do que 1e6 valores.


Compare o valor absoluto do excesso de curtose e observe os grÔficos. Não dão uma noção do porquê do excesso de curtose ser tão maior na distribuição \(t\) do que na beta. As caudas devem ser observadas usando um grÔfico semilog, usando-se o log(Densidade) no eixo \(y\):

Ex.curtose = -0.8563834

Ex.curtose = 4.915372

Observe que um grĆ”fico semilog (colocando o eixo \(y\) em logaritmo) permitiu visualizarmos melhor as caudas. Neste tipo de grĆ”fico, os valores menores de \(y\) ficam mais distintos, e os maiores menos distintos. Ɖ o mesmo código que utilizamos acima, adicionando-se o parĆ¢metro log=ā€œyā€ na função plot():

plot(densidade,
      main="Distribuição leptocúrtica", xlab="Valores", ylab="log(Densidade)",
      xlim=c(-6,6),
      ylim=c(1e-4,4e-1), 
      lwd=3, log="y")
lines(norm.x, norm.y, col="red", lty=2, lwd=2)
legend("topright", 
       c("t(5)", "Normal"), 
       col=c("black", "red"),
       lwd=c(3,2), 
       lty=c(1,2), 
       box.lwd=0, bg="transparent")  

A seguir, exploraremos as propriedades de algumas das distribuiƧƵes mais conhecidas.

Distribuição binomial

Esta distribuição serve para contagens (variÔvel quantitativa discreta) do número de sucessos em uma quantitade determinada de tentativas.

Assume-se:

  • a ocorrĆŖncia de sucesso ou fracasso de cada evento Ć© independente dos demais (independĆŖncia);
  • todas as tentativas tĆŖm a mesma probabilidade de sucesso (similaridade).

Ilustramos a construção desta distribuição através de um exemplo, utilizando o jogo de cara ou coroa com moedas.

Novamente, a incerteza

Moeda Ć© um exemplo em saĆŗde?

Distribuição binomial: 1 jogada

Distribuição binomial: 2 jogadas

Distribuição binomial: 3 jogadas


A função R é dbinom(x, size, prob), indicando, respectivamente, quantos sucessos, o total de jogadas e a probabilidade de sucesso de uma jogada.

Para uma moeda balanceada (prob=0.5), a probabilidade de 0 sucesso (x=0) em 3 jogadas (size=3) Ć©:

dbinom(x=0, size=3, prob=0.5)
[1] 0.125

1 sucesso em 3 jogadas:

dbinom(x=1, size=3, prob=0.5)
[1] 0.375

2 sucesso em 3 jogadas:

dbinom(x=2, size=3, prob=0.5)
[1] 0.375

3 sucesso em 3 jogadas:

dbinom(x=3, size=3, prob=0.5)
[1] 0.125


Distribuição binomial: 5 jogadas

Os grÔficos foram produzidos utilizando o seguinte código:

source("eiras.friendlycolor.R")
jogadas <- 5
sucesso <- 0:jogadas
probabilidade <- dbinom(sucesso,jogadas,0.5)
plot(sucesso, probabilidade,
     main = paste("Binomial: ",
                  jogadas, " jogadas", sep=""),
     ylim = c(0,0.5),
     type="h", 
     col=friendlycolor(8), lwd=3)
points(sucesso,probabilidade, pch=21, 
       col=friendlycolor(8), 
       bg=friendlycolor(12))


Ɖ possƭvel ver todos os valores em uma tabela:

jogadas <- 5
sucesso <- 0:jogadas
probabilidade <- dbinom(sucesso,jogadas,0.5)
cat ("Sucesso\tProbabilidade\n")
for (i in 1:(jogadas+1))
{
  cat (sucesso[i],"\t",probabilidade[i],"\n")
}
Sucesso Probabilidade
0    0.03125 
1    0.15625 
2    0.3125 
3    0.3125 
4    0.15625 
5    0.03125 

… ou, mais facilmente ainda, criando um data frame:

jogadas <- 5
sucesso <- 0:jogadas
probabilidade <- dbinom(sucesso,jogadas,0.5)
binomial <- data.frame(sucesso,probabilidade)
print(binomial)
  sucesso probabilidade
1       0       0.03125
2       1       0.15625
3       2       0.31250
4       3       0.31250
5       4       0.15625
6       5       0.03125

… as colunas do data frame podem ser renomeadas:

names(binomial) <- c("Sucesso","FR")
print(binomial)
  Sucesso      FR
1       0 0.03125
2       1 0.15625
3       2 0.31250
4       3 0.31250
5       4 0.15625
6       5 0.03125


Distribuição binomial: 15 jogadas

Este código foi modificado para usar um data frame.

source("eiras.friendlycolor.R")
jogadas <- 15
sucesso <- 0:jogadas
probabilidade <- dbinom(sucesso,jogadas,0.5)
binomial <- data.frame(sucesso,probabilidade)
names(binomial) <- c("Sucesso","FR")
plot(binomial$Sucesso, 
     binomial$FR,
     main = paste("Binomial: ",
                  jogadas, " jogadas", sep=""),
     xlab="sucesso", ylab="probabilidade",
     ylim = c(0,0.5),
     type="h", 
     col=friendlycolor(8), lwd=3)
points(binomial$Sucesso, 
       binomial$FR,
       pch=21, 
       col=friendlycolor(8), 
       bg=friendlycolor(12))


Observe que a soma de todas as colunas é igual a 1. Então, quanto mais jogadas, maior a dispesão e menor a altura das distribuições.


(alterando a escala)

plot(binomial$Sucesso, 
     binomial$FR,
     main = paste("Binomial: ",jogadas, " jogadas", sep=""),
     xlab="sucesso", ylab="probabilidade",
     ylim = c(0,max(binomial$FR)),
     type="h", 
     col=friendlycolor(8), lwd=3)
points(binomial$Sucesso, 
       binomial$FR,
       pch=21, 
       col=friendlycolor(8), 
       bg=friendlycolor(12))

Distribuição binomial: 15 jogadas, moeda desbalanceada

source("eiras.friendlycolor.R")
p.sucesso <- 0.7 # <br> probabilidade de sucesso <br>
jogadas <- 15
sucesso <- 0:jogadas
probabilidade <- dbinom(sucesso,jogadas,p.sucesso)
plot(sucesso, probabilidade,
     main = paste("Binomial: ",
                  jogadas, " jogadas, ", 
                  "P[s] = ", p.sucesso, 
                  sep=""),
     xlab="sucesso", ylab="probabilidade",
     ylim = c(0,max(probabilidade)), 
     type="h", 
     col=friendlycolor(20), lwd=3)
points(sucesso,probabilidade, pch=21, 
       col=friendlycolor(20), 
       bg=friendlycolor(23))

Anatomia da distribuição binomial

A distribuição binomial descreve a probabilidade de termos um determinado número de sucessos (por exemplo, 3 coroas) em um certo número de tentativas (por exemplo, em 10 jogadas, \(n\)), sendo que cada jogada tem um certa probabilidade de sucesso, sempre a mesma (por exemplo, \(p=0.5\)). A binomial é inteiramente definida, portanto, por estes dois parâmetros, \(n\) e \(p\). Consequentemente, todas as suas características e propriedades estão, também, em função dos mesmos dois parâmetros.

Uma boa fonte para ver as fórmulas e suas propriedades é a Wikipedia. Em https://en.wikipedia.org/wiki/Binomial_distribution encontra-se o seguinte resumo:

Inicialmente simularemos um milhão de jogadas nestas condições:

coroas <- rbinom(n=1e6, size=15, prob=0.7)

Podemos verificar que a função rbinom() faz um sorteio que obedece uma distribuição binomial, com

contagem <- table(coroas)
# converte em probabilidade
contagem <- contagem/sum(contagem) 
print (contagem)
coroas
       1        2        3        4        5        6        7        8 
0.000001 0.000010 0.000070 0.000615 0.003091 0.011487 0.034963 0.080922 
       9       10       11       12       13       14       15 
0.147366 0.206375 0.218410 0.169846 0.091708 0.030310 0.004826 
plot(contagem, 
     ylab="Probabilidade",
     xlim=c(0,15), axes=FALSE)
axis(1, at=seq(from=0,to=15,by=5))
axis(2)


Alternativamente, podemos gerar o grƔfico com EnvStats::epdfPlot():


Comparando este grƔfico com o esperado teoricamente com 15 jogadas de uma moeda desbalanceada para 70% de coroas, Ʃ possƭvel ver a similaridade.

mƩdia

Em teoria, a mƩdia Ʃ dada por

\[\text{mƩdia} = np\]

Por exemplo, nas 15 jogadas da moeda desbalanceada em que a probabilidade de sucesso era 0.7 (a moeda produz 70% de coroas), espera-se que a mƩdia seja \(15 \cdot 0.7 = 10.5\).

Em nossa simulação a probabilidade de sucesso, \(\hat{p}\), foi

p.sucesso <- mean(coroas/15) 
cat("Probabilidade de sucesso na simulação = ",p.sucesso,"\n", sep="")
Probabilidade de sucesso na simulação = 0.6999217

O número de jogadas é dado, igual a 15. Então, na simulação, obtivemos:

media <- p.sucesso * 15
cat("MƩdia simulada = ",media,"\n", sep="")
MƩdia simulada = 10.49883

Ɖ o mesmo, mais diretamente, coincidente com o valor da mĆ©dia de coroas na simulação, dado por:

mean(coroas)
[1] 10.49883

variância e desvio padrão

Pela tabela da Wikipedia, temos que

\[\text{variância}=npq=np(1-p)\]

onde \(q=1-p\) é a probabilidade de fracasso. O desvio-padrão é a raiz quadrada da variância, \(sd=\sqrt{np(1-p)}\) (\(sd\), do inglês, standard deviation). Em teoria, portanto, esperamos \(sd=15 \cdot 0.7 \cdot 0.3 = 1.774824\).

Dos dados simulandos obtemos:

cat(sqrt(15*p.sucesso*(1-p.sucesso)))
1.774956

ou

cat(sd(coroas))
1.775678

ou

var <- sum((coroas - mean(coroas))^2) / length(coroas)
dp <- var^0.5
cat(dp)
1.775677

Ć­ndice de assimetria (skewness)

No quadro temos, em teoria: \[\text{assimetria} = {{(1-p)-p}\over{\sqrt{np(1-p)}}}\]

Em teoria, espera-se \(\text{assimetria} = -0.2253745\). O número de jogadas, \(n\), é dado e igual a 15. A assimetria de nossa distribuição simulada, portanto, é:

n <- 15
skewness <- ((1-p.sucesso)-p.sucesso) / sqrt(n*p.sucesso*(1-p.sucesso))
cat("Skewness (fórmula da Wikipedia) = ",skewness,"\n", sep="")
Skewness (fórmula da Wikipedia) = -0.2252694

Existe função R no pacote DescTools:

skewness <- DescTools::Skew(coroas)
cat("Assimetria = ",skewness,"\n", sep="")
Assimetria = -0.2266838

O valor não é exatamente igual ao da fórmula da Wikipedia porque a função do pacote usa métodos diferentes de estimação e serve para qualquer distribuição, mas ainda assim o valor teórico e os obtidos da simulação são muito similares.

Assimetria negativa é o que aparece, graficamente, como cauda mais longa à esquerda. Neste exemplo, o índice indica que, aproximadamente, a distribuição estÔ -0.23 desvios-padrão desviada do número médio de coroas em 15 tentativas. Graficamente, representamos em azul a média como um triângulo e o desvio-padrão desta amostra com uma seta para a esquerda (a direção dada pela assimetria).

contagem <- table(coroas)
contagem <- contagem/sum(contagem)
plot(contagem, ylab="Probabilidade",
     xlim=c(0,15), axes=FALSE)
axis(1, at=seq(from=0,to=15,by=5))
axis(2)
points(mean(coroas), 0, pch=17, col="blue",cex=2)
arrows(mean(coroas),0,mean(coroas)-sd(coroas),0, length=0.15, angle=15, lwd=2,  col="blue")

excesso de curtose

O excesso de curtose, em teoria Ć© dado por

\[\text{Excesso de curtose} = { {1 - 6pq} \over { npg } } = { {1 - 6p(1-p)} \over { np(1-p) } }\]

Em teoria esperamos curtose igual a -0.0825397.

Em nossa simulação obtivemos:

n <- 15
curtose <- (1 - 6 * p.sucesso * (1-p.sucesso) ) / (n * p.sucesso * (1-p.sucesso))
cat("Ex. kurtosis (fórmula da Wikipedia) = ",curtose,"\n", sep="")
Ex. kurtosis (fórmula da Wikipedia) = -0.08258703

Existe função R no pacote DescTools:

curtose <- DescTools::Kurt(coroas)
cat("Excesso de curtose = ",curtose,"\n", sep="")
Excesso de curtose = -0.07670229

O pacote DescTools (default é o método 3), novamente mostra similaridade entre o teórico e os obtidos da simulação.

Neste exemplo, portanto, a binomial simulada Ć© aproximadamente mesocĆŗrtica.

Distribuição de Poisson

Esta distribuição é tipicamente aplicÔvel quando hÔ um evento relativamente raro, contÔvel (i.e., variÔvel quantitativa discreta) que ocorre a uma determinada taxa constante (um certo número de ocorrências em uma determinada população em um determinado intervalo de tempo).

Assume-se:

  • as ocorrĆŖncias dos eventos sĆ£o independentes;
  • a probabilidade de ocorrĆŖncia de um evento em um certo intervalo Ć© a mesma para todos os demais intervalos de tempo;
  • a probabilidade de ocorrĆŖncia dos eventos Ć© proporcional ao tamanho do intervalo;
  • em uma porção infinitesimal do intervalo, a probabilidade de mais de uma ocorrĆŖncia do evento Ć© desprezĆ­vel.
  • nĆ£o hĆ” limite superior para o nĆŗmero de ocorrĆŖncias;
  • os eventos sĆ£o raros;

Por exemplo, retomamos o exemplo das mortes de motociclistas em 2019 na Cidade de SĆ£o Paulo, SP:

https://g1.globo.com/sp/sao-paulo/noticia/2019/05/23/mortes-de-motociclistas-ultrapassam-as-de-pedestres-no-transito-de-sp-pela-primeira-vez-diz-relatorio.ghtml

Desconsiderando qualquer variação sazonal, se hÔ 366 mortes em São Paulo em um ano, esperamos ter, em média \(366/12 = 30.5\) mortes por mês. No entanto, com qual variação isto ocorre? JÔ vimos que parece ser razoavelmente ampla. Em uma série de 12 meses simulados, podemos observar algo como:

lambda <- 366/12
mortes <- rpois(n=12,lambda=lambda)
cat ("Em doze meses, com taxa de ",lambda," mortes/mĆŖs, podemos observar:\n",sep="")
Em doze meses, com taxa de 30.5 mortes/mĆŖs, podemos observar:
print(mortes)
 [1] 31 33 25 33 37 26 21 31 26 29 29 27

Como pode ter notado no código, a função rpois() faz o sorteio seguindo a distribuição de Poisson. caracterizada por um único parâmetro, \(\lambda\).

Anatomia da distribuição de Poisson

Na Wikipedia (https://en.wikipedia.org/wiki/Poisson_distribution) encontramos o resumo de suas propriedades:

Neste exemplo, qual seria a probabilidade esperada para cada nĆŗmero de mortes?

source("eiras.numeric.summary.R")

set.seed(3972) # para repetir este exemplo
mortes <- 0:80
valpois <- rpois(1e6, lambda=30.5)
tabpois <- table(valpois) # em numeros
tabpois <- tabpois/sum(tabpois) # em probabilidade
plot(as.numeric(names(tabpois)),as.numeric(tabpois),
      main="Distribuição de Poisson", 
      xlab="Mortes por mĆŖs", ylab="Probabilidade",
      lwd=2, type="h")
cat("SumƔrio:\n")
sumario <- numeric.summary(valpois)
print(sumario)
cat("\n")
media <- mean(valpois)
cat("MƩdia = ",media,"\n", sep="")
desvpad <- sd(valpois)
cat("Desvio-padrão = ",desvpad,"\n", sep="")
desvpad <- var(valpois)
cat("Variância = ",desvpad,"\n", sep="")
skewness <- DescTools::Skew(valpois)
cat("Assimetria = ",skewness,"\n", sep="")
curtose <- DescTools::Kurt(valpois)
cat("Ex.curtose = ",curtose,"\n", sep="")

Obtendo-se:

SumƔrio:
 Min. 1st Qu. Median 3rd Qu. Max.     Mean  St.Dev.     n NA
    8      27     30      34   63 30.50496 5.523132 1e+06  0
MƩdia = 30.50496
Desvio-padrão = 5.523132
Variância = 30.50499
Assimetria = 0.182608
Ex.curtose = 0.02902318

mƩdia

A média é igual à própria taxa das ocorrências. Obtivemos 30.504965 (em teoria 30.5).

variância e desvio-padrão

Nesta distribuição, a variância é igual à média, por sua vez igual à própria taxa das ocorrências. Obtivemos 30.5049859 (em teoria 30.5). Consequentemente, desvio padrão de 5.5231319 (em teoria 5.5226805).

assimetria

Embora não apareça tão obviamente no grÔfico, posto que a taxa é relativamente alta, a distribuição de Poisson é assimétrica à direita; observe a simetria ao redor da média de 30.5 e note que a cauda da direita é mais longa (olhe a probabilidade de ocorrência de 20 e 40 mortes em um mês para notar melhor esta assimetria).

Segundo a Wikipedia, \(\text{Skewness}=\lambda^{-0.5}={{1}\over{\sqrt{\lambda}}}\) \(~\approx~\) 0.181071. Obtivemos o valor de 0.182608.

excesso de curtose

Esta distribuição é praticamente mesocúrtica.

Segundo a Wikipedia, \(\text{Ex.Kurtosis}=\lambda^{-1}={{1}\over{\lambda}}\) \(~\approx~\) 0.032787. Obtivemos o valor de 0.0290232.

Distribuição normal

Medidas somatomatométricas costumam ser aproximadas por distribuições normais. Por exemplo, o arquivo Biometria.xls contém dados de estudantes de medicina que coletamos por alguns anos. A distribuição das estaturas dos homens é:

biometria <- readxl::read_excel("Biometria.xls")
biometria.homens <- biometria[biometria$sexo=="M",]
estaturas <- biometria.homens$estatura
minx <- min(estaturas, na.rm=TRUE)
maxx <- max(estaturas, na.rm=TRUE)
densidade.estatura <- density(estaturas, na.rm=TRUE)
maxy <- max(densidade.estatura$y, na.rm=TRUE)
plot(densidade.estatura,
     main="Distribuição das estaturas (homens)",
     xlab="Estatura (cm)",
     ylab="Densidade",
     xlim=c(minx,maxx), 
     lwd=2)

Podemos aproximar para uma distribuição normal, usando seus dois parâmetros, média e desvio-padrão:

n <- sum(!is.na(estaturas))
media.med <- mean(estaturas, na.rm=TRUE)
desvpad.med <- sd(estaturas, na.rm=TRUE)
cat("Estaturas, sexo masculino (n=",n,"):\n",sep="")
cat("\tmedia = ",media.med,sep="")
cat("\tdp = ",desvpad.med,sep="")
Estaturas, sexo masculino (n=273):
    media = 175.3736    dp = 7.247183

Anatomia da distribuição de normal

Segundo a Wikipedia (https://en.wikipedia.org/wiki/Normal_distribution), o resumo das propriedades de uma distribuição normal é:

Simularemos uma distribuição normal, portanto, com as características das estaturas dos estudantes do sexo masculino:

library(DescTools)
library(readxl)
source("eiras.numeric.summary.R")
source("eiras.friendlycolor.R")
set.seed(9428)

biometria <- readxl::read_excel("Biometria.xls")
biometria.homens <- biometria[biometria$sexo=="M",]
estaturas <- biometria.homens$estatura
minx <- min(estaturas, na.rm=TRUE)
maxx <- max(estaturas, na.rm=TRUE)
densidade.estatura <- density(estaturas, na.rm=TRUE)
maxy <- max(densidade.estatura$y, na.rm=TRUE)

media.med <- mean(estaturas, na.rm=TRUE)
desvpad.med <- sd(estaturas, na.rm=TRUE)
valnorm <- rnorm(1e6, mean=media.med, sd=desvpad.med)
densidade <- density(valnorm)
plot (densidade,
      main="Distribuição Normal", 
      xlab="Estatura (cm)", ylab="Densidade",
      xlim=c(minx,maxx), 
      ylim=c(0,maxy), 
      lwd=2)
lines(densidade.estatura, col=friendlycolor(7), lty=2, lwd=2)
abline(v=media.med, lty=2) # media
# desvio-padrao
lines(
   c(media.med,media.med+desvpad.med),
   dnorm(rep(media.med+desvpad.med,2), mean=media.med, sd=desvpad.med),
   lty=2)
cat("SumƔrio:\n")
sumario <- numeric.summary(valnorm)
print(sumario)
cat("\n")
media <- mean(valnorm)
cat("MƩdia = ",media,"\n", sep="")
desvpad <- sd(valnorm)
cat("Desvio-padrão = ",desvpad,"\n", sep="")
variancia <- var(valnorm)
cat("Variância = ",variancia,"\n", sep="")
skewness <- DescTools::Skew(valnorm)
cat("Assimetria = ",skewness,"\n", sep="")
curtose <- DescTools::Kurt(valnorm)
cat("Ex.curtose = ",curtose,"\n", sep="")

SumƔrio:
     Min.  1st Qu.   Median  3rd Qu.     Max.     Mean  St.Dev.     n NA
 139.5633 170.4855 175.3611 180.2586 210.0528 175.3712 7.239951 1e+06  0

MƩdia = 175.3712
Desvio-padrão = 7.239951
Variância = 52.41689
Assimetria = 0.00194142
Ex.curtose = -0.01018367

mƩdia

Pedimos média de 175.3736264 e obtivemos da função rnorm() 175.3712179.

No grƔfico, a mƩdia estƔ representada pela linha pontilhada vertical.

variância e desvio-padrão

Pedimos desvio-padrão de 7.2471825 e obtivemos da função rnorm() 7.2399512 (variância de 52.4168929).

No grÔfico, o desvio-padrão estÔ representado pela linha pontilhada horizontal (fica na altura em que a normal muda de concavidade).

assimetria

A distribuição normal é simétrica. Obtivemos a medida de 0.0019414 em nossa distribuição simulada.

excesso de curtose

A distribuição normal é a referência. Obtivemos a medida de -0.0101837 em nossa distribuição simulada.

Outras propriedades

A distribuição normal tem dois parâmetros, média (\(\mu\)) e desvio-padrão (\(\sigma\)).

aparĆŖncia

Vamos assumir uma distribuição \(N(\mu=15,\sigma=8)\):

simetria

Ɖ uma distribuição simĆ©trica, portanto mĆ©dia, moda e mediana coincidem:

Metade da Ɣrea sob a curva estƔ Ơ esquerda e metade Ơ direita da mƩdia.

probabilidades (Ɣreas sob a curva)

\(\pm 1 dp\)

cerca de 68% da Ôrea entre -1 e +1 desvio-padrão:

\(\pm 2 dp\)

cerca de 95% da Ôrea entre -2 e +2 desvio-padrão:

\(\pm 3 dp\)

cerca de 99.7% da Ôrea entre -3 e +3 desvio-padrão:


Por que a distribuição normal é importante em estatística?

Porque suas propriedades sĆ£o conhecidas e ela aparece naturalmente sob determinadas circunstĆ¢ncias. Veja, por exemplo, ā€œAmostragem e Reamostragemā€.


variando média e desvio-padrão

Para cada par de parâmetros \(\mu\) e \(\sigma\), define-se completamente uma distribuição normal.

Admita (não tome estes valores como variÔveis da prÔtica médica) que as seguintes variÔveis tenham distribuições normais:

# GraficoNormal.R
source ("eiras.friendlycolor.R")
variavel <- "Creatinina"
unidade <- "mg/dl"
media <- 0.95
desvpad <- 0.125
x <- seq(from=media-5*desvpad, to=media+5*desvpad, by=0.01)
y <- dnorm(x, mean=media, sd=desvpad)
xy <- data.frame(x,y)
plot(x,y,
     main=paste("N(",media,",",desvpad,")",sep=""), 
     xlab=paste(variavel," (",unidade,")",sep=""), 
     ylab=NA,
     xlim=c(media-4*desvpad,media+4*desvpad),
     col=friendlycolor(2),type="l",lwd=2
     )

… com o mesmo código R, geramos:

Parecem todas iguais, mas observe na mesma escala (desconsiderando as unidades de medida):

distribuição normal padronizada

Para padronizar qualquer distribuição, basta aplicar a todos os seus valores x:

\(z = { {x - \mu} \over \sigma }\)

Subtrair a média faz com que a distribuição fique centrada em \(0\) e dividir por \(\sigma\) faz com que o desvio-padrão seja igual a \(1\). A distribuição resultante é dada em escore \(z\).

Caso normalizemos todas as curvas acima, obteremos:

A vantagem é que conhecemos as propriedades de qualquer distribuição normal, mas da normal padronizada memorizamos facilmente seus principais valores.


A função R que (dado o valor q, devolve a probabilidade) é:

pnorm(q, mean = 0, sd = 1, lower.tail = TRUE)

que calcula (por default) as probabilidades acumuladas de -infinito (lower.tail=TRUE) ao valor q solicitado. Assume, também por default, média igual a zero (mean=0) e desvio-padrão (em ingês, standard deviation) igual a 1 (sd=1), portanto uma normal padronizada.

Não é necessÔrio converter tudo para a normal padronizada quando quiser encontrar quaisquer as probabilidades.

No exemplo, com média igual a 15 e desvio-padrão igual a 8, encontramos as Ôreas, respectivamente, para \(\pm 1 sd\):

2*(pnorm(15+8, mean=15, sd=8)-0.5)
[1] 0.6826895

ou, na versão da normal padronizada (que serve para simplificar):

2*(pnorm(1)-0.5)
[1] 0.6826895

a distribuição normal é simétrica, então achamos a probabilidade acumulada de \(-\infty\) até 1 desvio-padrão, subtraímos a metade esquerda da distribuição (encontrando a Ôrea entre 0 e 1 desvio-padrão) e, então, multiplicamos por 2.

Similarmente, para \(\pm 2 sd\):

2*(pnorm(2)-0.5)
[1] 0.9544997

e para \(\pm 3 sd\):

2*(pnorm(3)-0.5)
[1] 0.9973002

Note que, entre \(\pm 2 dp\), não temos exatamente 95% da Ôrea. Para achar o valor correto, a função R que faz o reverso de pnorm (dada a probabilidade, devolve o valor q) é:

qnorm(p, mean = 0, sd = 1, lower.tail = TRUE)

então obtemos (deixando \(2.5\%\) em cada cauda):

qnorm(0.025)
[1] -1.959964

e

qnorm(0.975)
[1] 1.959964
Então, 95% da Ôrea fica, aproximadamente, no intervalo dado por \(\pm 1.96 dp\).


criando vetores com distribuição normal

Para mulheres o valor de referência da creatinina sérica é de 0.5 a 1.1 mg/dl. Assumiremos, então, distribuição aproximadamente normal com média de 0.8 mg/dl e desvio-padrão de 0.15 mg/dl.

O seguinte código usa a função rnorm() para criar, usando um gerador de números pseudo-aleatórios (random), um vetor numérico com 10000 valores individuais:

# numero de individuos
n <- 10000
# assumindo que a distribuicao eh simetrica%
mu <- 0.8 # (0.5+1.1)/2
# assumindo que deram o intervalo de 95%
dp <- 0.15 # (1.1-0.5)/4
# cria vetor e exibe o grafico
v <- rnorm(n,mu,dp)
d <- density(v)
plot(d, type="l", 
     main="Distribuicao ficticia",
     xlim=c(mu-4*dp,mu+4*dp),
     xlab="Creatinina", 
     ylab="densidade", 
     lty=1, lwd=2)

e o seguinte código exibe a distribuição padronizada

v2 <- (v-mu)/dp
d2<- density(v2)
plot(d2, type="l", 
     main="Distribuicao ficticia padronizada",
     xlim=c(-4, 4),
     xlab="z", 
     ylab="densidade", 
     lty=1, lwd=2)

Da mesma forma, assumindo-se que o valor de referência para hemoglobina em mulheres é de \(13.5 \pm 1.5 g/dl\), correspondendo estes valores à média \(\pm\) 2 desvio-padrão, e que a distribuição da hemoglobina segue aproximadamente uma distribuição normal, criamos:

# numero de individuos
n <- 10000
# media
mu <- 13.5 
# desvio-padrao
dp <-1.5 
# cria vetor e exibe o grafico
v <- rnorm(n,mu,dp)
d <- density(v)
plot(d, type="l", 
     main="Distribuicao ficticia",
     xlim=c(mu-4*dp,mu+4*dp),
     xlab="Hemoglobina", 
     ylab="densidade", 
     lty=1, lwd=2)

a qual Ć© igualmente padronizada:

v2 <- (v-mu)/dp
d2<- density(v2)
plot(d2, type="l", 
     main="Distribuicao ficticia padronizada",
     xlim=c(-4, 4),
     xlab="z", 
     ylab="densidade", 
     lty=1, lwd=2)

hachurando Ɣreas sob distribuiƧƵes

Este código mostra as Ôreas sob uma distribuição normal, utilizando a regra 68.2%-95.4%-99.7% para 1, 2 e 3 desvios-padrão:

# GraficoNormal.R
source("eiras.friendlycolor.R")
# normal
media <- 40
desvpad <- 20
x <- seq(from=media-5*desvpad, to=media+5*desvpad, by=0.01)
y <- dnorm(x, mean=media, sd=desvpad)
xy <- data.frame(x,y)
plot(x,y,
     main="Distribuicao normal", xlab="x", ylab=NA,
     xlim=c(media-4*desvpad,media+4*desvpad),
     axes=FALSE,
     type="l",lwd=2
     )
desvios <- c(-3,-2,-1, 0, 1, 2, 3)
axis(side = 1, at = media+desvios*desvpad)
# caudas
prob.cauda <- pnorm(media+desvios*desvpad, mean=media, sd=desvpad)
x.cauda <- qnorm(prob.cauda, mean=media, sd=desvpad)
# amarelo, verde, azul, NA, azul, verde, amarelo
cor <- c(24, 15, 9, NA, 9, 15, 24) 
for(d in 1:3) # 3, 2 e 1 desvios-padrao
{
  polx <- xy$x[xy$x>=x.cauda[d] & xy$x<=x.cauda[8-d]]
  poly <- xy$y[xy$x>=x.cauda[d] & xy$x<=x.cauda[8-d]]
  polx <- c(min(polx), polx, max(polx))
  poly<- c(0, poly, 0)
  polygon(polx,poly,border=NA,col=friendlycolor(cor[d]))
}

O seguinte código cria uma distribuição com 50 estaturas e hachura as caudas (2.5% da Ôrea em cada uma), encontrando os quantis:

source("eiras.friendlycolor.R")
estatura.masc <- rnorm(n=50, mean=177, sd=10)
estatdens <- density(estatura.masc)
plot(estatdens, 
     main="Grafico de densidade", 
     xlab="Estatura masculina (cm)", ylab="Densidade")
# caudas
limites <- quantile(estatura.masc, probs = c(0.025,0.975))
polx <- estatdens$x[estatdens$x<=limites[1]]
polx <- c(min(polx), polx, max(polx))
poly <- estatdens$y[estatdens$x<=limites[1]]
poly<- c(0, poly, 0)
polygon(polx,poly,border=NA,
        col=friendlycolor(8)
        )
polx <- estatdens$x[estatdens$x>=limites[2]]
polx <- c(min(polx), polx, max(polx))
poly <- estatdens$y[estatdens$x>=limites[2]]
poly<- c(0, poly, 0)
polygon(polx,poly,border=NA,
        col=friendlycolor(8)
        )

Exemplo de aplicação na prÔtica

Em vÔrios testes aplicados obtém-se um escore \(z\) (por exemplo, o teste de QI ou a prova do ENEM). HÔ um problema para a comunicação do resultado. Imagine dizer aos pais que o QI de seu filho é -0.1, ou que a nota de um vestibulando foi zero (indicando que estÔ na média).

Uma solução é fazer o reverso da padronização: multiplicar por certo valor para alargar a dispersão dos valores e somar para transladar a curva. No QI, multiplica-se por 15 e soma-se 100 (então o QI tem média 100 e desvio padrão de 15). No ENEM multiplica-se por 100 e soma-se 500 (média de 500 e desvio-padrão de 100). Quando dizem, para o ENEM, que a nota varia de 0 a 1000, na verdade estão apenas contando parte da verdade, cobrindo \(\pm 5\) desvios-padrão (o que explica o ano em que apareceu um estudante com 1080 pontos, o que criou um problema para os gestores explicarem o ocorrido).

Nesta figura, aparece o escore T (multiplica por 10 e soma 50), mas também outras possibilidades como Estaninos (Stanines) com intervalos equiespaçados em \(z\) no centro da distribuição normal criando uma escala ordinal de 1 a 9.

TransformaƧƵes

HÔ momentos em que precisamos alterar os números de variÔveis quantitativas. As aplicações aparecerão em testes estatísticos, quando necessÔrios.

lineares

OperaƧƵes que envolvem as operaƧƵes bĆ”sicas (soma, subtração, multiplicação e divisĆ£o) nĆ£o alteram o formato da distribuição destas variĆ”veis. Ɖ o caso da distribuição normal, quando padronizada. Por exemplo, criamos 100 valores de hemoblogina com a função rnorm()

# para reproduzir o exemplo
set.seed(837)
# numero de individuos
n <- 100
# media
mu <- 13.5 
# desvio-padrao
dp <-1.5 
# unidade
txtun <- "mg/dl"
# cria a populacao e exibe o grafico
v <- rnorm(n,mu,dp)
d <- density(v)
plot (d, type="l", 
      main="Distribuicao ficticia",
      xlab=paste("Hemoglobina (",txtun,")",sep=""), 
      ylab="densidade", 
      lty=1, lwd=2)
cat("Verificação:\n")
cat("  mƩdia = ", round(mean(v),6),"\n", sep="")
cat("  dp = ", round(sd(v),6),"\n", sep="")

Verificação:
  mƩdia = 13.63409
  dp = 1.532805

A distribuição, dado o número de indivíduos, é apenas aproximadamente normal.

A padronização destes valores, que estão armazenados no vetor v pode ser feito com a função scale():

# unidade
txtun <- "escore-z"
# padronizando
v.padrao <- scale(v, center=TRUE, scale=TRUE)
d <- density(v.padrao)
plot (d, type="l", 
      main="Distribuição fictícia padronizada",
      xlab=paste("Hemoglobina (",txtun,")",sep=""), 
      ylab="densidade", 
      lty=1, lwd=2)
cat("Verificação:\n")
cat("  mƩdia = ", round(mean(v.padrao),6),"\n", sep="")
cat("  dp = ", round(sd(v.padrao),6),"\n", sep="")

Verificação:
  mƩdia = 0
  dp = 1

Observe que a padronização torna a média nula e o desvio-padrão unitÔrio. A unidade de medida deixou de existir, substituída por escores-\(z\) (i.e., a medida estÔ em desvios-padrão).

Esta função, no entanto, permite apenas centrar ou escalonar isoladamente. Por exemplo:

# unidade
txtun <- "mg/dl"
# centrando
v.centrada <- scale(v, center=TRUE, scale=FALSE)
d <- density(v.centrada)
plot (d, type="l", 
      main="Distribuição fictícia centrada",
      xlab=paste("Hemoglobina (",txtun,")",sep=""), 
      ylab="densidade", 
      lty=1, lwd=2)
cat("Verificação:\n")
cat("  mƩdia = ", round(mean(v.centrada),6),"\n", sep="")
cat("  dp = ", round(sd(v.centrada),6),"\n", sep="")

Verificação:
  mƩdia = 0
  dp = 1.532805

Neste caso a distribuição apenas desloca-se para que a média seja nula, mas o desvio-padrão fica inalterado. Observe que os valores originais foram transformados em valores negativos, nulos (se coincidiam com a média) ou positivos.

não lineares

Transformações não lineares são úteis quando precisamos alterar o formato de uma distribuição. Tomemos, como exemplo a massa do cérebro de alguns mamíferos que estão no arquivo CorpoCerebro.xlsx, usando o código disponível em massacerebro.R:

source("massacerebro.R")

Verificação:
  mƩdia = 677.7958
  dp = 1422.126

A padronização executada com massacerebro_padrao.R não altera o formato da distribuição, mas faz a média ser nula, o desvio-padrão unitÔrio e a variÔvel medida em desvios padrão (escores-\(z\)):

source("massacerebro_padrao.R")

Verificação:
  mƩdia = 0
  dp = 1

Para encontrar uma distribuição mais simétrica, o que pode ser conveniente para vÔrios procedimentos estatísticos, necessitamos de transformações não lineares. Criamos uma função, disponível em eiras.tukey.try.R, que tenta as transformações potência de Tukey, indo de -3 a +3, e informa qual é a transformação que produz a transformação mais simétrica. São elas:

A função tukey.try() retorna uma lista com dois objetos: o primeiro com as informações da transformação escolhida e o segundo com os valores transformados. Adaptamos o código massacerebro_tukeytry.R para chamar tukey.try() exibindo todas as tentativas de transformação não linear (a função pode trabalhar silenciosamente também). Obtém-se:

source("massacerebro_tukeytry.R")

-------------------
Tukey's lambda = -3
-------------------
mean: -0.6945283 
st.dev.: 3.186692 
median: -1.804733e-07 
mode: 2.044677e-05 
iqr: 1.916055e-05 
Asymmetry coefficient: 36248.89 


---------------------
Tukey's lambda = -2.5
---------------------
mean: -0.4567793 
st.dev.: 2.017888 
median: -2.400543e-06 
mode: 0.0001143052 
iqr: 0.0001071151 
Asymmetry coefficient: 4265.444 


-------------------
Tukey's lambda = -2
-------------------
mean: -0.308468 
st.dev.: 1.281852 
median: -3.193154e-05 
mode: 0.0006568912 
iqr: 0.0006155977 
Asymmetry coefficient: 502.1541 


---------------------
Tukey's lambda = -1.5
---------------------
mean: -0.2192314 
st.dev.: 0.821324 
median: -0.0004247605 
mode: 0.003853863 
iqr: 0.003613604 
Asymmetry coefficient: 61.73484 


-------------------
Tukey's lambda = -1
-------------------
mean: -0.1758119 
st.dev.: 0.5381691 
median: -0.005650439 
mode: -0.002751612 
iqr: 0.0209163 
Asymmetry coefficient: 8.273942 


---------------------
Tukey's lambda = -0.5
---------------------
mean: -0.2150154 
st.dev.: 0.3677148 
median: -0.0751682 
mode: -0.05788277 
iqr: 0.1022852 
Asymmetry coefficient: 1.53622 


------------------
Tukey's lambda = 0
------------------
mean: 4.755004 
st.dev.: 2.425706 
median: 5.176086 
mode: 5.573491 
iqr: 2.270929 
Asymmetry coefficient: 0.3604197 


--------------------
Tukey's lambda = 0.5
--------------------
mean: 18.40897 
st.dev.: 18.80534 
median: 13.30392 
mode: 11.407 
iqr: 14.2457 
Asymmetry coefficient: -0.4915145 


------------------
Tukey's lambda = 1
------------------
mean: 677.7958 
st.dev.: 1422.126 
median: 177 
mode: 89.40176 
iqr: 397.85 
Asymmetry coefficient: -1.478934 


--------------------
Tukey's lambda = 1.5
--------------------
mean: 36859.8 
st.dev.: 105213.5 
median: 2354.945 
mode: 901.2862 
iqr: 9082.256 
Asymmetry coefficient: -3.959205 


------------------
Tukey's lambda = 2
------------------
mean: 2397581 
st.dev.: 7743393 
median: 31333 
mode: 48736.53 
iqr: 196740.4 
Asymmetry coefficient: -11.9388 


--------------------
Tukey's lambda = 2.5
--------------------
mean: 167127479 
st.dev.: 570311513 
median: 416905 
mode: 368653 
iqr: 4192973 
Asymmetry coefficient: -39.77103 


------------------
Tukey's lambda = 3
------------------
mean: 11967279917 
st.dev.: 42123888002 
median: 5547357 
mode: 270222730 
iqr: 88888250 
Asymmetry coefficient: -131.5928 


-------------------
Best transformation
-------------------
Tukey's lambda = 0
    (logarithm transformation)
Asymmetry coefficient = 0.360419745448379
eqtext: ln[massa]

Verificação:
  mƩdia = 4.755004
  dp = 2.425706

Para entender quais dados retornados de tukey.try() foram aproveitados no Rscript massacerebro_tukeytry.R, veja que o retorno ficou armazenado em v.transformados. Esta variƔvel Ʃ uma lista com dois objetos, contendo

print(v.transformados)
[[1]]
  power asymmetry p.value  equation
1     0 0.3604197      NA ln[massa]

[[2]]
 [1]  8.6503245  8.4344635  3.2425924  6.0867747  6.0473722  6.0378709
 [7]  6.5220928  4.7449321  0.0000000  6.0063532  4.7833164  1.7047481
[13]  6.4846352  7.1853870  5.0562458  4.0253517  1.0986123  6.1420374
[19] -0.9162907  5.1929569  4.7449321  2.4932055  5.1873858  5.1647860

Em uma lista deste tipo, os objetos são acessíveis separadamente com:

print(v.transformados[[1]])
  power asymmetry p.value  equation
1     0 0.3604197      NA ln[massa]
print(v.transformados[[2]])
 [1]  8.6503245  8.4344635  3.2425924  6.0867747  6.0473722  6.0378709
 [7]  6.5220928  4.7449321  0.0000000  6.0063532  4.7833164  1.7047481
[13]  6.4846352  7.1853870  5.0562458  4.0253517  1.0986123  6.1420374
[19] -0.9162907  5.1929569  4.7449321  2.4932055  5.1873858  5.1647860

O primeiro objeto, v.transformados[[1]] Ć© um data frame, portanto suas colunas podem ser obtidas com:

print(v.transformados[[1]]$power)
[1] 0
print(v.transformados[[1]]$asymmetry)
[1] 0.3604197
print(v.transformados[[1]]$p.value)
[1] NA
print(v.transformados[[1]]$equation)
[1] "ln[massa]"
O segundo objeto é um vetor numérico com os valores transformados (neste exemplo, o logaritmo da massa devido à melhor transformação obtida).


Amostragem e Reamostragem

Os processos de amostragem (sampling) e reamostragem (bootstrapping) servem para que mostremos o comportamento do teorema central do limite e o conceito de erro padrão.

TCL e EP

O Teorema Central do Limite (TCL) Ʃ uma das descobertas mais poderosas para as anƔlises estatƭsticas.

Assume-se:

  • delineamento entre-participantes,
  • variĆ”veis intervalares,
  • amostras com pelo menos 30 observaƧƵes.

As distribuições binomial e de Poisson vistas acima, quando \(n\) aumenta, aproximam-se da distribuição normal. Você pode usar o R para verificar.


Enuncia que:

A distribuição das médias amostrais tem distribuição normal, com média igual à média populacional e erro padrão da média igual ao desvio padrão populacional dividido pela raiz quadrada do tamanho da amostra.

O ā€œdesvio padrĆ£o populacional dividido pela raiz quadrada do tamanho da amostraā€ Ć© o erro padrĆ£o, estimado pelo desvio-padrĆ£o amostral \(s\) e o tamanho da amostra \(n\) por \[EP={{s}\over{\sqrt{n}}}\]

Para experimentar com ele e esclarecer o que isto significa, vamos criar uma população com uma variÔvel fictícia que, intencionalmente, não tem distribuição normal:

A Ć­ntegra do Rscript que serĆ” desenvolvido adiante estĆ” em bootstrapping_demo.R

Em primeiro lugar, ativamos algumas funƧƵes de apoio que desenvolvemos:

source("eiras.friendlycolor.R")
source("eiras.create.population.R")
source("eiras.plot.density.withmeansd.R")
source("eiras.sampling.R")

e criamos um vetor com uma população fictícia:

# create a simulated population
population <- create.population(kind="normal", round=0, 
                                n=c(2000,6000,3500,3000),
                                param1=c(160,200,230,280), # mean
                                param2=c(5,10,30,15) # sd
                                )

Esta população tem a seguinte distribuição:

limits <- plot.density.withmeansd(population,
                                  main="Populacao simulada\n(sampling)",
                                  xlab="Valores",
                                  ylab="Densidade",
                                  col=friendlycolor(7), getlimits=TRUE)

A linha pontilhada vertical corresponde à media populacional e a barra horizontal que aparece na parte alta do grÔfico mostra sua média \(\pm 3\) desvios-padrão.

Amostragem (sampling)

O primeiro exercício que faremos é retirar desta população \(B\) amostras aleatórias simples, cada uma delas com \(n\) indivíduos sem reposição (detalhes adiante, em reamostragem):

limits <- plot.density.withmeansd(population,
                                  main="Populacao simulada\n(sampling)",
                                  xlab="Valores",
                                  ylab="Densidade",
                                  col=friendlycolor(7), getlimits=TRUE)
B <- 1000
n <- 36
samples <- sampling(population,B=B,
                    n=n,replace=FALSE,
                    graph=TRUE,col=friendlycolor(3))
amo.medias <- samples[[2]]
amo.sds <- samples[[3]]
legend("right", 
       c("Distribuicao", 
         "Media pop +-3 dp",
         paste("amostras: ",B,sep=""),
         "Media am. +-3 dp"
         ), 
       col=c(friendlycolor(7),
             paste(friendlycolor(7),"88",sep=""),
             friendlycolor(3),
             paste(friendlycolor(3),"88",sep="")             
             ),
       lwd=c(2,10,2,10), 
       lty=c(1,1,1,1), 
       cex=0.7,
       box.lwd=0, bg="transparent")  
# distribuicao da populacao original, sobreposta para referencia
plot.density.singleline(population,col=friendlycolor(7))

Neste último grÔfico adotamos B=1000 e n=36, assim obtendo 1000 linhas representando 1000 amostras de 36 indivíduos, às quais a distribuição da população original foi sobreposta. Pode-se notar que as amostras, com imperfeições, seguem o perfil geral da população.

A linha pontilhada vertical correspondente à media das medias amostrais e coincide com a média populacional. Na parte alta do grafico podemos verificar que os desvios-padrão populacionais são praticamente iguais à média dos desvios-padrão amostrais.

Numericamente:

pm <- mean(population,na.rm=TRUE)
ps <- sd(population,na.rm=TRUE)
am <- mean(amo.medias,na.rm=TRUE)
as <- mean(amo.sds,na.rm=TRUE)
v <- ""
v <- paste(v,"Populacao:\n")
v <- paste(v,"\tmedia populacional:",round(pm,4),"\n")
v <- paste(v,"\tdp populacional:",round(ps,4),"\n")
v <- paste(v,"\n")
v <- paste(v,"Amostras:",B,"com n =",n,"\n")
v <- paste(v,"\tmedia das medias amostrais:",round(am,4),"\n")
v <- paste(v,"\tmedia dos dp amostrais:",round(as,4))
cat(v)
 Populacao:
    media populacional: 218.0423 
    dp populacional: 41.5684 
 
 Amostras: 1000 com n = 36 
    media das medias amostrais: 217.9131 
    media dos dp amostrais: 41.3801

Na variÔvel amo.medias guardamos as 1000 médias amostrais. Como são uma coleção de 1000 números, podemos verificar sua distribuição e calcular sua média (a média das médias amostrais) e seu desvio padrão (o desvio-padrão das médias amostrais).

Mantendo a escala do eixo das abscissas, a distribuição das 1000 médias amostrais é:

plot.density.withmeansd(amo.medias,
                        main="Distribuicao de medias amostrais\n(sampling)",
                        xlab="Valores",
                        ylab="Densidade",
                        x.min=limits[1], x.max=limits[2],
                        col=friendlycolor(3))

Comparada com a população e as 1000 amostras feitas anteriormente, a média desta última distribuição coincide com a média das médias amostrais, mas seu desvio padrão é menor.

Ao mesmo grÔfico adicionamos uma distribuição normal em pontilhado, mas deixando a escala das abscissas livre, observamos:

# distribuicao das medias amostrais (deixando a escala livre)
plot.density.withmeansd(amo.medias,
                        main="Distribuicao de medias amostrais\n(sampling)",
                        xlab="Valores",
                        ylab="Densidade",
                        col=friendlycolor(3))
# ajustando distribuicao normal
am <- mean(amo.medias,na.rm=TRUE)
ep <- sd(amo.medias,na.rm=TRUE)
x <- seq(am-4*ep,am+4*ep,length.out=100)
y <- dnorm(x, mean=am, sd=ep)
lines(x,y,lty=2,lwd=2,col=friendlycolor(3))

Surpreendemente, a distribuição observada e uma distribuição normal com média e desvio padrão iguais às médias e desvio padrão das médias amostrais são muito próximas.

Numericamente:

am <- mean(amo.medias,na.rm=TRUE)
ep <- sd(amo.medias,na.rm=TRUE)
v <- ""
v <- paste(v,"Amostras:",B,"com n =",n,"\n")
v <- paste(v,"\tmedia das medias amostrais:",round(am,4),"\n")
v <- paste(v,"\tdp das medias amostrais:",round(ep,4))
cat(v)
 Amostras: 1000 com n = 36 
    media das medias amostrais: 217.9131 
    dp das medias amostrais: 6.707

Observe atentamente a sutileza, pois trocamos a variÔvel as que continha a média dos desvios-padrão amostrais com valor 41.3801, similar ao desvio-padrão populacional ps=41.5684, pela variÔvel ep que contém o desvio padrão das médias amostrais com valor 6.707. De fato, ps/ep=6.1977635, valor próximo à raiz quadrada do tamanho de cada amostra, sqrt(36)=6.

Este desvio padrão das médias amostrais obtido por este experimento hipotético é conhecido como erro padrão da média, \(EP\).

Na prÔtica, quando obtemos uma única amostra, o \(EP\) é estimado por \[EP={{s}\over{\sqrt{n}}}\] onde \(s\) é o desvio-padrão da amostra e \(n\) é o tamanho da amostra, na esperança de que \(s\) seja um valor próximo (i.e., um bom estimador) do desvio-padrão populacional \(\sigma\), desconhecido.

Agora o enunciado do Teorema Central do Limite pode ser compreendido:

A distribuição das médias amostrais tem distribuição normal, com média igual à média populacional e erro padrão da média igual ao desvio padrão populacional dividido pela raiz quadrada do tamanho da amostra.

Interessante é que, com \(n \ge 30\), o TCL se verifica para qualquer distribuição da variÔvel original. Não é necessÔrio confiar em nossa palavra. Experimente trocar a população inicial em bootstrapping_demo.R e verifique.

Ainda com esta simulação, podemos adicionar um intervalo de confiança 95% sobre a distribuição das médias amostrais:

# distribuicao das medias amostrais (deixando a escala livre)
plot.density.withmeansd(amo.medias,
                        main="Distribuicao de medias amostrais\n(sampling)",
                        xlab="Valores",
                        ylab="Densidade",
                        col=friendlycolor(3))
# ajustando distribuicao normal
am <- mean(amo.medias,na.rm=TRUE)
ep <- sd(amo.medias,na.rm=TRUE)
x <- seq(am-4*ep,am+4*ep,length.out=100)
y <- dnorm(x, mean=am, sd=ep)
lines(x,y,lty=2,lwd=2,col=friendlycolor(3))
# intervalo de confianca 95%
icx <- quantile(amo.medias,probs=c((1-0.95)/2,1-((1-0.95)/2)))
icy <- mean(y[which(round(x,0)==round(icx,0))],na.rm=TRUE)
h <- icy/5
lines(c(icx[1],icx[1],icx[1],icx[2],icx[2],icx[2]),
      c(icy-h ,icy+h ,icy   ,icy   ,icy+h ,icy-h ),
      lwd=2, col=friendlycolor(3))
# media amostral (ponto solido)
points(am,icy,pch=21,cex=1.5,col=friendlycolor(3),bg=friendlycolor(3))
# media populacional (ponto branco)
points(pm,icy-h,pch=21,cex=1.5,col=friendlycolor(7),bg="white")

A linha horizontal representa o intervalo de confiança 96% com halteres nos limites que contém 95% da Ôrea sob a distribuição das médias amostrais simuladas. O círculo sólido estÔ na posição da média das médias amostrais e o círculo branco no da média populacional. O IC95 é aquele intervalo que, com confiança de 95%, contém a média populacional.

Calcular \(EP = {s /\sqrt{n}}\) nada mais é do que obter uma estimativa daquilo que seria conseguido no caso de um experimento irrealizÔvel (pois se pudéssemos fazer 1000 estudos com amostras de mesmo tamanho, seria melhor investir em um único estudo mais elaborado), do qual obteríamos um número muito grande de amostras, cada qual com sua média, e calculÔssemos o desvio-padrão das médias amostrais. Como tal experimento é uma fantasia, o apresentação desta equação costuma ter dois caminhos habituais e opostos: seu entendimento através de uma demonstração matemÔtica intransponível para quem não tem a formação adequada ou a dogmatização de sua existência através de exibi-la sem explicação alguma. Ambas as estratégias escondem do pesquisador aplicado a natureza da relação entre \(s\) (estimador de \(\sigma\)) e \(EP\) (estimador pontual do desvio-padrão de infinitas médias amostrais hipotéticas). Aqui oferecemos uma situação intermediÔria com a experimentação através de simulações.

Reamostragem (bootstrapping)

Saindo da fantasia, vamos retomar a mesma população hipotética e obter dela uma única amostra:

plot.density.withmeansd(population,
                        main="Populacao simulada\n(amostra unica)",
                        xlab="Valores",
                        ylab="Densidade",
                        x.min=limits[1], x.max=limits[2],
                        y.min=limits[3], y.max=limits[4],
                        col=friendlycolor(7))
B2 <- 1
samples <- sampling(population,B=B2,
                    n=n,replace=FALSE,
                    graph=TRUE,col=friendlycolor(1))
amo.unique <- samples[[1]]
legend("right", 
       c("Distribuicao", 
         "Media pop +-3 dp",
         paste("amostras: ",B,sep=""),
         "Media am. +-3 dp"
       ), 
       col=c(friendlycolor(7),
             paste(friendlycolor(7),"88",sep=""),
             friendlycolor(1),
             paste(friendlycolor(1),"88",sep="")             
       ),
       lwd=c(2,10,2,10), 
       lty=c(1,1,1,1), 
       cex=0.7,
       box.lwd=0, bg="transparent")  

Nesta situação, a amostra captura informação (com imperfeição) da população. Assim como Ć© a população, esta amostra nĆ£o tem distribuição normal. Repare que os ā€œpicosā€ e ā€œvalesā€ existentes na distribuição populacional foram incompletamente representados, mas a mĆ©dia e desvio padrĆ£o amostrais sĆ£o similares Ć queles da população.

Ainda existe uma fantasia a eliminar: na prÔtica temos tão somente uma única amostra, sem a referência populacional:

# amostra unica
plot.density.withmeansd(amo.unique,
                        main="Amostra unica",
                        xlab="Valores",
                        ylab="Densidade",
                        x.min=limits[1], x.max=limits[2],
                        y.min=limits[3], y.max=limits[4],
                        col=friendlycolor(1))
legend("right", 
       c("Amostra", 
         "Media am. +-3 dp"
       ), 
       col=c(friendlycolor(1),
             paste(friendlycolor(1),"88",sep="")             
       ),
       lwd=c(2,10), 
       lty=c(1,1), 
       cex=0.7,
       box.lwd=0, bg="transparent")  

Com base nesta amostra precisamos chegar a conclusões que possam ser extrapoladas para a população de onde ela proveio. O procedimento conhecido como bootstrapping é uma possível solução. Trata-se de um processo similar ao anterior, com a diferença de que faremos 1000 reamostragens com reposição de 36 elementos sobre a única amostra de 36 elementos que temos para trabalhar.


Cada uma das reamostras tem que ser feita com reposição, enquanto as amostragens simples sobre a população eram feitas sem reposição.

Esta reposição implica em manter cada indivíduo, embora jÔ sorteado para uma amostra, disponível para o sorteio seguinte, assim permitindo que este apareça na amostra mais de uma vez.

Por exemplo, imagine uma amostra que tenha cinco valores, da qual computamos a média e o desvio padrão:

amostra <- c(1, 2, 7, 8, 9)
t <- length(amostra)
cat("amostra: ", amostra, 
           " (mƩdia = ", round(mean(amostra),2), 
           " e dp = ", round(sd(amostra),2), 
           ")\n")
amostra:  1 2 7 8 9  (mƩdia =  5.4  e dp =  3.65 )

Com 9 reamostras de cinco elementos sejam feitas sem reposição, tudo que obteremos são 9 representações da amostra, permutando a ordem dos 5 valores, com a mesma média e desvio-padrão da amostra original:

# 9 reamostragens sem reposicao
for(r in 1:9)
{
  # <br> replace=FALSE por default <br>
  reamostra <- sample(amostra,t)
  cat("reamostra",r,": ", reamostra, 
             ", mƩdia = ", round(mean(reamostra),2), 
             "e dp = ", round(sd(reamostra),2), 
             "\n")
}
reamostra 1 :  9 2 1 7 8 , mƩdia =  5.4 e dp =  3.65 
reamostra 2 :  8 2 7 1 9 , mƩdia =  5.4 e dp =  3.65 
reamostra 3 :  9 8 2 1 7 , mƩdia =  5.4 e dp =  3.65 
reamostra 4 :  2 7 1 9 8 , mƩdia =  5.4 e dp =  3.65 
reamostra 5 :  8 2 1 9 7 , mƩdia =  5.4 e dp =  3.65 
reamostra 6 :  2 7 9 1 8 , mƩdia =  5.4 e dp =  3.65 
reamostra 7 :  2 9 8 1 7 , mƩdia =  5.4 e dp =  3.65 
reamostra 8 :  1 8 7 2 9 , mƩdia =  5.4 e dp =  3.65 
reamostra 9 :  8 7 9 2 1 , mƩdia =  5.4 e dp =  3.65 

No entanto, fazendo este processo com reposição (utilizando o parâmetro replace=TRUE na função sample()):

# 9 reamostragens com reposicao
for(r in 1:9)
{
  # <br> replace=FALSE por default <br>
  reamostra <- sample(amostra,t,replace=TRUE)
  cat("reamostra",r,": ", reamostra, 
             ", mƩdia = ", round(mean(reamostra),2), 
             "e dp = ", round(sd(reamostra),2), 
             "\n")
}
reamostra 1 :  9 8 8 2 2 , mƩdia =  5.8 e dp =  3.49 
reamostra 2 :  1 1 8 2 1 , mƩdia =  2.6 e dp =  3.05 
reamostra 3 :  2 2 7 9 9 , mƩdia =  5.8 e dp =  3.56 
reamostra 4 :  9 1 2 2 8 , mƩdia =  4.4 e dp =  3.78 
reamostra 5 :  8 9 2 9 1 , mƩdia =  5.8 e dp =  3.96 
reamostra 6 :  2 1 8 8 8 , mƩdia =  5.4 e dp =  3.58 
reamostra 7 :  9 8 7 2 8 , mƩdia =  6.8 e dp =  2.77 
reamostra 8 :  2 7 8 7 8 , mƩdia =  6.4 e dp =  2.51 
reamostra 9 :  8 9 1 9 7 , mƩdia =  6.8 e dp =  3.35 
obteremos a essĆŖncia do bootstrapping: variantes da amostra original.


O procedimento, sobre a amostra obtida da população fictícia, resulta em:

# bootstrapping
plot.density.withmeansd(amo.unique,
                        main="Amostra unica\n(bootstrapping)",
                        xlab="Valores",
                        ylab="Densidade",
                        x.min=limits[1], x.max=limits[2],
                        y.min=limits[3], y.max=limits[4],
                        col=friendlycolor(3))
samples <- sampling(amo.unique,B=B,
                    n=n,replace=TRUE,
                    graph=TRUE,col=friendlycolor(29))
boot.medias <- samples[[2]]
boot.sds <- samples[[3]]
legend("right", 
       c("Amostra unica", 
         "Media am. +-3 dp",
         paste("bootstraps: ",B,sep=""),
         "Media boot +-3 dp"
       ), 
       col=c(friendlycolor(3),
             paste(friendlycolor(3),"88",sep=""),
             friendlycolor(29),
             paste(friendlycolor(29),"88",sep="")             
       ),
       lwd=c(2,10,2,10), 
       lty=c(1,1,1,1), 
       cex=0.7,
       box.lwd=0, bg="transparent")  
# distribuicao da amostra original, sobreposta para referencia
plot.density.singleline(amo.unique,col=friendlycolor(3))

Obtemos 1000 linhas representando 1000 reamostras de 36 indivĆ­duos, Ć s quais a distribuição da amostra original foi sobreposta. Observe que atĆ© mesmo os ā€œpicosā€ e ā€œvalesā€ da população original reapareceram entre as reamostras, apesar deste procedimento ter sido executado sem que os dados da população original fossem utilizados.

Como acontecia entre as amostras e a população, as reamostras seguem o perfil geral da amostra única que tomamos como ponto de partida. Na parte alta do grÔfico vemos que as médias da amostra original e a média das 1000 reamostras coincidem, e também o desvio-padrão da amostra original e a média dos desvios-padrão das 1000 reamostras. Numericamente:

um <- mean(amo.unique,na.rm=TRUE)
us <- sd(amo.unique,na.rm=TRUE)
bm <- mean(boot.medias,na.rm=TRUE)
bs <- mean(boot.sds,na.rm=TRUE)
v <- ""
v <- paste(v,"Amostra:\n")
v <- paste(v,"\tmedia amostral:",round(um,4),"\n")
v <- paste(v,"\tdp amostral:",round(us,4),"\n")
v <- paste(v,"\n")
v <- paste(v,"Reamostras:",B,"com n =",n,"\n")
v <- paste(v,"\tmedia das medias das reamostras:",round(bm,4),"\n")
v <- paste(v,"\tmedia dos dp da media das reamostras:",round(bs,4))
cat(v)
 Amostra:
    media amostral: 220.7004 
    dp amostral: 42.8547 
 
 Reamostras: 1000 com n = 36 
    media das medias das reamostras: 220.7082 
    media dos dp da media das reamostras: 42.0506

Novamente, observamos o comportamento da distribuição das médias das reamostras:

# distribuicao das medias das reamostras (deixando a escala livre)
plot.density.withmeansd(boot.medias,
                        main="Distribuicao de medias das reamostras\n(bootstrapping)",
                        xlab="Valores",
                        ylab="Densidade",
                        col=friendlycolor(29))
# ajustando distribuicao normal
um <- mean(amo.unique,na.rm=TRUE)
us <- sd(amo.unique,na.rm=TRUE)
bm <- mean(boot.medias,na.rm=TRUE)
ep <- sd(boot.medias,na.rm=TRUE)
x <- seq(bm-4*ep,bm+4*ep,length.out=100)
y <- dnorm(x, mean=bm, sd=ep)
lines(x,y,lty=2,lwd=2,col=friendlycolor(3))
# intervalo de confianca 95%
icx <- quantile(boot.medias,probs=c((1-0.95)/2,1-((1-0.95)/2)))
icy <- mean(y[which(round(x,0)==round(icx,0))],na.rm=TRUE)
h <- icy/5
lines(c(icx[1],icx[1],icx[1],icx[2],icx[2],icx[2]),
      c(icy-h ,icy+h ,icy   ,icy   ,icy+h ,icy-h ),
      lwd=2, col=friendlycolor(29))
# media das reamostras (ponto solido)
points(bm,icy,pch=21,cex=1.5,col=friendlycolor(29),bg=friendlycolor(29))
# media amostral (ponto solido)
points(um,icy-h,pch=21,cex=1.5,col=friendlycolor(3),bg=friendlycolor(3))
# media populacional (ponto branco)
points(pm,icy-2*h,pch=21,cex=1.5,col=friendlycolor(7),bg="white")

Como fizemos com o exemplo do sampling, a linha horizontal representa o intervalo de confiança 95% com halteres indicando os limites de 95% da Ôrea sob a curva da distribuição das médias das reamostras. O círculo sólido na mesma cor da distribuição estÔ na posição da média das médias das reamostras, mas adicionamos um círculo sólido na posição da média da amostra original e um círculo branco no da média populacional. Esta última, na prÔtica, não conheceremos; por este motivo, precisamos estimar o IC95, um intervalo para o qual temos 95% de confiança em conter a média populacional (com sucesso, neste exemplo).

A distribuição das médias das reamostras é normal (apesar da amostra não o ser) com média igual à da amostra original e desvio-padrão dado por \(EP=s/\sqrt{n}\), verificado numericamente nesta simulação:

um <- mean(amo.unique,na.rm=TRUE)
us <- sd(amo.unique,na.rm=TRUE)
bm <- mean(boot.medias,na.rm=TRUE)
ep <- sd(boot.medias,na.rm=TRUE)
v <- ""
v <- paste(v,"Amostra:\n")
v <- paste(v,"\tmedia da amostra:",round(um,4),"\n")
v <- paste(v,"\tdp da amostra:",round(us,4))
v <- paste(v,"\n")
v <- paste(v,"Reamostras:",B,"com n =",n,"\n")
v <- paste(v,"\tmedia das medias das reamostrais:",round(bm,4),"\n")
v <- paste(v,"\tdp das medias das reamostras:",round(ep,4))
cat(v)
 Amostra:
    media da amostra: 220.7004 
    dp da amostra: 42.8547 
 Reamostras: 1000 com n = 36 
    media das medias das reamostrais: 220.7082 
    dp das medias das reamostras: 7.2795

Neste caso temos o desvio-padrão da amostra us=42.8547 e o desvio padrão das 1000 médias das reamostras ep=7.2795. Podemos conferir que us/ep=5.8870389 é valor próximo a sqrt(36)=6. A concordância talvez fosse melhor se usÔssemos um bootstrapping com mais reamostras; aqui exemplificamos, por razões grÔficas, com 1000 reamostras, mas é recomendado que se aplique entre 10000 (1e+04) e 1000000 (1e+06) reamostras para fins de decisão estatística.

O bootstrapping é um procedimento sempre possível com o uso de computadores, de certa forma capturando o experimento imaginÔrio da primeira parte deste exemplo e reconstituindo propriedades da população inalcançÔvel de onde a amostra proveio.

Intervalos de predição

Ɖ necessĆ”rio, na Ć”rea da saĆŗde, que testes laboratoriais apresentem a faixa dos valores de referĆŖncia para que seja verificado se o resultado pode ser considerado alterado.

A norma para a glicemia de jejum em adultos saudƔveis Ʃ computada a partir de uma amostra. Por exemplo, suponha:

Segundo van Belle, 12 é o número mínimo de observações para calcular um intervalo de predição.
van Belle, G (2008) Statistical rules of thumb. 2nd ed.Ā NJ: Wiley.

Supondo que a distribuição da glicemia é aproximadamente normal, os laboratórios tradicionalmente estimam: o intervalo de predição 95% (IP95).

source ("eiras.numeric.summary.R")

glicemia <- c(5.5, 5.2, 5.2, 5.8, 5.6, 4.6, 
              5.6, 5.9, 4.7, 5.0, 5.7, 5.2)

n <- length(glicemia)
media <- mean(glicemia)
desvpad <- sd(glicemia)
qt <- qt(0.975, df=length(glicemia)-1)
lowerlimit <- media - qt * desvpad
upperlimit <- media + qt * desvpad

densidade <- density(glicemia)
skewness <- DescTools::Skew(glicemia)
curtose <- DescTools::Kurt(glicemia)
norm.x <- seq(from = min(densidade$x), to = max(densidade$x), length.out = 500)
norm.y <- dnorm(norm.x, mean=media, sd=desvpad)

ht <- dnorm(lowerlimit, mean=media, sd=desvpad)

plot (densidade,
      main="Distribuição da Glicemia de Jejum", 
      xlab="Glicemia (mmol/l)", ylab="Densidade",
      ylim=c(0,max(densidade$y,norm.y)), lwd=3)
lines(norm.x, norm.y, col="red", lty=2, lwd=2)
segments(lowerlimit, ht, upperlimit, ht, lwd=3, col= "brown")
lines(rep(as.numeric(lowerlimit),2),c(0,ht), lty=2, col= "brown")
lines(rep(as.numeric(upperlimit),2),c(0,ht), lty=2, col= "brown")
points(media,ht,pch=21,col="brown",bg="brown")

legend("topright", 
       c("Glicemia", "Normal"), 
       col=c("black", "red"),
       lwd=c(3,2), 
       lty=c(1,2), 
       box.lwd=0, bg="transparent")  

cat("Glicemia de jejum:\n")
cat("SumƔrio:\n")
sumario <- numeric.summary(glicemia)
print(sumario)
cat("MƩdia = ",media,"\n", sep="")
cat("Desvio-padrão = ",desvpad,"\n", sep="")
cat("Assimetria = ",skewness,"\n", sep="")
cat("Ex.curtose = ",curtose,"\n", sep="")
cat("\nIntervalo de predição:\n")
cat("  IP95=[",lowerlimit,",",upperlimit,"]\n",sep="")

obtendo:

Glicemia de jejum:
SumƔrio:
 Min. 1st Qu. Median 3rd Qu. Max.     Mean   St.Dev.  n NA
  4.6    5.15   5.35   5.625  5.9 5.333333 0.4206777 12  0
MƩdia = 5.333333
Desvio-padrão = 0.4206777
Assimetria = -0.354962
Ex.curtose = -1.289367

Intervalo de predição:
  IP95=[4.407428,6.259239]

Então a faixa de valores considerados normais vão de 4.4 a 6.3 mmol/l. Glicemia costuma ser considerada como variÔvel que tem distribuição normal.

Nesta amostra reduzida, porém, apenas por inspeção visual, a distribuição não parece normal. Pelas medidas diretas, feitas nesta amostra, a distribuição é assimétrica à esquerda e platicúrtica. Caso estivéssemos na situação em que somente pudéssemos acessar estes 12 voluntÔrios, a saída é utilizar métodos mais robustos.

Um código para verificar normalidade, simetria e unimodalidade através de testes estatísticos antes de calcular intervalos centrados na média, optando por variantes no caso de uma das suposições não ser atendida, é:

library(lawstat)
library(diptest)

alfa <- 0.05
glicemia <- c(5.5, 5.2, 5.2, 5.8, 5.6, 4.6, 
              5.6, 5.9, 4.7, 5.0, 5.7, 5.2)
m <- mean(glicemia)
s <- sd(glicemia)
print(ressw <- shapiro.test(glicemia)) # teste de unimormalidade 
print(ressim <- lawstat::symmetry.test(sort(glicemia),option="MGG",boot=T,B=1e4))
print(resdip <- diptest::dip.test(sort(glicemia),simulate.p.value=T,B=1e4)) # Hartigans' Dip Test for Unimodality
cat("Distribuicao da glicemia:\n")
if (ressw$p.value>alfa) 
{cat("\tNormal (Shapiro-Wilk test)\n")} else
{cat("\tNao-normal (Shapiro-Wilk test)\n")}
if (ressim$p.value>alfa) 
{cat("\tSimetrica (bootstrap Miao et al symmetry test)\n")} else
{cat("\tAssimetrica (bootstrap Miao et al symmetry test)\n")}
if (resdip$p.value>alfa) 
{cat("\tUnimodal (bootstrap Hartigans dip test for unimodality)\n\n")} else
{cat("\tNao-unimodal (bootstrap Hartigans dip test for unimodality)\n\n")}
cat("Intervalo de predicao de 95 simetrico centrado na media\n")

iqr <- IQR(glicemia,na.rm=TRUE)
notfound <- TRUE
if (ressw$p.value>alfa) {
  k <- qt(1-alfa/2, df=length(glicemia)-1)
  ipnome <- "Normal"
  notfound <- FALSE
}
if (notfound && ressw$p.value<=alfa && resdip$p.value>alfa && ressim$p.value>alfa) {
  k <- (2/3)*sqrt(1/alfa)
  ipnome <- "Gauss-Camp-Meidell unimodal simetrica nao-normal"
  notfound <- FALSE
} 
if (notfound && ressw$p.value<=alfa && resdip$p.value>alfa && ressim$p.value<=alfa) {
  a <- abs(m-moda)/iqr
  k <- a + (2/3)*sqrt((1-a^2)/alfa)
  ipnome <- "Gauss-Camp-Meidell unimodal assimetrica nao-normal"
  notfound <- FALSE
}
if (notfound) {
  k <- sqrt(1/alfa)
  ipnome <- "Chebychev para qualquer distribuicao"
} 
lb95pi <- m - k*s 
ub95pi <- m + k*s
cat("Intervalo de Predicao (IP)\n")
cat("  IP95 de ",ipnome, " = [",lb95pi,",",ub95pi,"]\n", sep="")

obtendo:


Results of Hypothesis Test
--------------------------

Alternative Hypothesis:          

Test Name:                       Shapiro-Wilk normality test

Data:                            glicemia

Test Statistic:                  W = 0.9380164

P-value:                         0.4728106


Results of Hypothesis Test
--------------------------

Alternative Hypothesis:          the distribution is asymmetric.

Test Name:                       m-out-of-n bootstrap symmetry test by Miao, Gel, and Gastwirth (2006)

Estimated Parameter(s):          bootstrap optimal m = 11

Data:                            sort(glicemia)

Test Statistic:                  Test statistic = -0.1742091

P-value:                         0.9312


Results of Hypothesis Test
--------------------------

Alternative Hypothesis:          non-unimodal, i.e., at least bimodal

Test Name:                       Hartigans' dip test for unimodality / multimodality with simulated p-value
     (based on 10000 replicates)

Data:                            sort(glicemia)

Test Statistic:                  D = 0.1071429

P-value:                         0.2354

Distribuicao da glicemia:
    Normal (Shapiro-Wilk test)
    Simetrica (bootstrap Miao et al symmetry test)
    Unimodal (bootstrap Hartigans dip test for unimodality)

Intervalo de predicao de 95 simetrico centrado na media
Intervalo de Predicao (IP)
  IP95 de Normal = [4.407428,6.259239]

Neste caso, de acordo com os testes estatístico, foi calculado o intervalo com base na distribuição normal. As outras alternativas que este código poderia utilizar são

  • Gauss-Camp-Meidell unimodal simĆ©trica nĆ£o-normal
  • Gauss-Camp-Meidell unimodal assimĆ©trica nĆ£o-normal
  • Chebychev para qualquer distribuição

Outra possibilidade Ć© o highest density interval (HDI):

library("HDInterval")

alfa <- 0.05

valores <- c(5.5, 5.2, 5.2, 5.8, 5.6, 4.6, 
              5.6, 5.9, 4.7, 5.0, 5.7, 5.2)

# HDI com outlier
densidade <- density(valores,na.rm=TRUE)
plot (densidade,
      main="Distribuição da Glicemia de Jejum", 
      xlab="Glicemia (mmol/l)", ylab="Densidade",
      lwd=2)
hdir1 <- HDInterval::hdi(densidade, credMass=1-alfa)
ht <- attr(hdir1, "height")
HDIll1 <- hdir1[1]
HDIul1 <- hdir1[2]
cat("Intervalo de predição:\n")
cat("  HDI95 = [",HDIll1,",",HDIul1,"]\n", sep="")
segments(HDIll1, ht, HDIul1, ht, lwd=3, col= "blue")
lines(rep(as.numeric(HDIll1),2),c(0,ht), lty=2, col= "blue")
lines(rep(as.numeric(HDIul1),2),c(0,ht), lty=2, col= "blue")

obtendo:

Intervalo de predição:
  HDI95 = [4.451805,6.081956]

Compare os intervalos. O anterior (IP95=[4.4,6.3] ) supõe normalidade e é centrado na média amostral. Alternativamente, o HDI é o menor intervalo de predição de 95% não centrado na média: somando-se as Ôreas à esquerda e à direita das duas linhas verticais encontraremos 5% da Ôrea sob a curva.

GrÔficos em R (apêndice)

Esta sessão serve para ajudÔ-lo a encontrar formatos grÔficos para adaptar para seu caso, mostrando capacidades do R em gerÔ-los com maior facilidade e flexibilidade do que aquela encontrada em outros softwares.

HÔ muitas funções de diversos pacotes para fazer grÔficos em R. Muitas delas adotaram os mesmos nomes de parâmetros.

Cores, por exemplo, (parĆ¢metro col em muitas funƧƵes) aceita nomes de cores prĆ©-definidos (ā€œwhiteā€, ā€œblackā€, ā€œredā€, ā€œdarkgreenā€, etc.) ou no formato ā€œ#RRGGBBTTā€ (red, green, blue, transparĆŖncia).

Existem outros como pch para definir o símbolo dos pontos, lty para definir o padrão das linhas e lwd para definir a espessura das linhas.

O tĆ­tulo dos graficos sĆ£o colocados com main=ā€œTĆ­tulo escrito aquiā€ e os nomes dos eixos com xlab=ā€œNome no eixo xā€ e ylab=ā€œNome no eixo yā€. As escalas do grĆ”fico geralmente sĆ£o definidas como xlim=c(min,max) e ylim=c(min,max).

Muitas das funções têm defaults e colocam elementos no grÔfico, sem que o usuÔrio precise pedi-los.

pie chart (grƔfico de setores, torta, pizza)

faixaetaria <- sort(factor(c("Idoso", "Idoso", "Idoso", "Idoso", 
                             "Adulto", "Adulto", "Adulto", "Jovem")))
rotulo <- unique(faixaetaria)
freq <- summary(faixaetaria)
dt_tmp <- data.frame(c(2,3,1),rotulo,freq)
names(dt_tmp) <- c("ordem","rotulo","freq")
dt_tmp <- dt_tmp[order(dt_tmp$ordem),]
pie(dt_tmp$freq, 
    label = dt_tmp$rotulo,
    main = "Grafico de setores",
    xlab = "Faixa Etaria", 
    col = gray(seq(0.4,1.0,
                   length = length(dt_tmp$rotulo))))


Qualquer grƔfico, em vez de ser mostrado na tela, pode ser salvo em disco. Basta colocar antes e depois do ponto do Rscript que exibe o grƔfico:

  • para gerar PDF (que pode conter mĆŗltiplos grĆ”ficos):

pdf(ā€œGraficoSetores.pdfā€)
# exibição do grÔfico
dev.off()

  • para EPS (cada arquivo em um grĆ”fico separado):

setEPS()
postscript(ā€œGraficoSetores.epsā€)
# exibição do grÔfico
dev.off()

  • para PNG (cada arquivo em um grĆ”fico separado):
png(ā€œGraficoSetores.pngā€)
# exibição do grÔfico
dev.off()


grƔfico de barras

faixaetaria <- sort(factor(c("Idoso","Idoso","Idoso","Idoso",
                             "Adulto","Adulto","Adulto","Jovem")))
rotulo <- unique(faixaetaria)
freq <- summary(faixaetaria)
dt_tmp <- data.frame(c(2,3,1),rotulo,freq)
names(dt_tmp) <- c("ordem","rotulo","freq")
dt_tmp <- dt_tmp[order(dt_tmp$ordem),]
barplot(dt_tmp$freq,
        main = "Grafico de barras",
        xlab = "Faixa Etaria", ylab = "Frequencia Absoluta",
        names.arg = dt_tmp$rotulo,
        col = gray(seq(0.4,1.0,length = length(dt_tmp$rotulo))))

Caso pegue um data frame com sƩries temporais, poderƔ usar R para construir este tipo de vƭdeo, que talvez jƔ tenham encontrado na Web: https://www.youtube.com/watch?v=IHF6A5Tri1U&feature=youtu.be

combinação de grÔficos:

Veja diversas possibilidades em Plot Grouped Data: Box plot, Bar Plot and More. Por exemplo:

linhas com mƔximo e mƭnimo

mes <- c("Jan", "Fev", "Mar", "Abr", "Mai", "Jun",
         "Jul", "Ago", "Set", "Out", "Nov", "Dez")
mes_num <- 1:length(mes)
high_NYC2014 <- c(28.8, 28.5, 37.0, 56.8, 69.7, 79.7, 78.5, 77.8, 74.1, 62.6, 45.3, 39.9)
low_NYC2014 <- c(12.7, 14.3, 18.6, 35.5, 49.9, 58.0, 60.0, 58.6, 51.7, 45.2, 32.2, 29.1)
dados <- data.frame(mes, high_NYC2014, low_NYC2014)
minx <- min(mes_num, na.rm=TRUE)
maxx <- max(mes_num, na.rm=TRUE)
miny <- min(high_NYC2014, low_NYC2014, na.rm=TRUE)
maxy <- max(high_NYC2014, low_NYC2014, na.rm=TRUE)
plot(NA, NA, 
     main = "Temperaturas altas e baixas mƩdias em NYC-2014",
     xlim=c(minx,maxx), ylim=c(miny,maxy),
     xaxt="n", yaxt="n",
     xlab =  "Mes",
     ylab = "Temperatura (F)")
# x axis
axis(side=1, at=c(minx-1,maxx+1), labels = FALSE)
text(x=mes_num,  par("usr")[3], 
     labels = mes, srt = 30, pos = 1, xpd = TRUE)
# y axis
axis(side=2, las=1)
# high temps
high_cor <- "red"
high_lty <- 2  
lines(mes_num,high_NYC2014,lwd=2,lty=high_lty,col=high_cor)
points(mes_num,high_NYC2014,pch=25,col=high_cor,bg=high_cor)
# low temps
low_cor <- "blue"
low_lty <- 3  
lines(mes_num,low_NYC2014,lwd=2,lty=low_lty,col=low_cor)
points(mes_num,low_NYC2014,pch=24,col=low_cor,bg=low_cor)
# high-low vertical lines
hl_x <- c()
hl_y <- c()
for (m in 1:length(mes))
{
  hl_x <- c(hl_x, mes_num[m],      mes_num[m]    , NA)
  hl_y <- c(hl_y, high_NYC2014[m], low_NYC2014[m], NA)
}
lines(hl_x,hl_y,lty=2, lwd=1,col="#888888")
# legenda
legend("topleft",
       c("Maximas", "Minimas"),
       col=c(high_cor,low_cor),
       pt.bg=c(high_cor,low_cor),
       pch=c(25,24),
       lwd=c(2,2),
       lty=c(high_lty,low_lty),
       box.lwd=0, bg="transparent")

stacked dot plot (grƔfico de pontos empilhados)

para um grupo

estatura <- as.integer(rnorm(n=50, mean=177, sd=10))
stripchart(estatura, method="stack", offset=0.5, at=0.15, pch=19, 
           xlab ="Estatura masculina (cm)", ylab ="Frequencia absoluta", 
           main="Dotplot")

para dois grupos

set.seed(123)
Estatura.m <- as.integer(rnorm(n=50, mean=177, sd=10))
Estatura.f <- as.integer(rnorm(n=50, mean=165, sd=8))
stripchart(Estatura.m, method="stack", 
           offset=0.5, at=0.15, 
           pch=4, ylab="Contagem", xlab ="Estatura (cm)")
stripchart(Estatura.f, add=TRUE, method="stack", 
           offset=0.5, at=0.15, pch=1)
legend("topright",c("Masculina", "Feminina"),
       pch=c(4,1))

histograma

para um grupo

estatura <- rnorm(n=50, mean=177, sd=10)
hist(estatura, 
     xlab ="Estatura masculina (cm)", 
     ylab ="Frequencia absoluta", 
     main="Histograma")

para dois grupos

set.seed(123)
Estatura.m <- as.integer(rnorm(n=50, mean=177, sd=10))
Estatura.f <- as.integer(rnorm(n=50, mean=165, sd=8))
hist(Estatura.f, ylab="Contagem", xlab ="Estatura (cm)", 
     main="Estaturas dos adultos",
     col="#88000044")
hist(Estatura.m,  add=TRUE, col="#00008844")
legend("topleft",
       c("Feminina","Masculina"),
       pt.bg=c("#88000044","#00008844"),
       pch=22
       )

scatterplot (grÔfico de dispersão)

para um grupo

library(readxl)
suppressMessages(library(car, warn.conflicts = FALSE))
Dados <- readxl::read_excel("Adm2008.xlsx")
N <- min(sum(!is.na(Dados$Estatura[Dados$Genero=="Feminino"])), 
         Dados$MCT[Dados$Genero=="Feminino"])
car::scatterplot(MCT[Genero=="Feminino"] ~ 
                         Estatura[Genero=="Feminino"], 
                       regLine=FALSE, smooth=FALSE, boxplots=FALSE, 
                       jitter=list(x=1, y=1), col="black",
                       main=paste("Estudantes femininas de Administração 2008", 
                                  "\nN =",N), 
                       xlab="Estatura (cm)", 
                       ylab=" Massa Corporal Total (kg)",
                       data=Dados)

para dois grupos

library(readxl)
suppressMessages(library(car, warn.conflicts = FALSE))
Dados <- readxl::read_excel("Adm2008.xlsx")
Dados$Genero <- as.factor(Dados$Genero)
car::scatterplot(MCT~Estatura|Genero, 
                       regLine=FALSE, smooth=FALSE, ellipse=FALSE, 
                       col=c("red","black"), 
                       jitter=list(x=1, y=1),
                       xlab = "Estatura (m)", 
                       ylab = "MCT (kg)", 
                       data=Dados)

bagplot

library(readxl)
suppressMessages(library(aplpack, warn.conflicts = FALSE))
Dados <- readxl::read_excel("Adm2008.xlsx")
head(Dados)
attach(Dados)
N <- min(sum(!is.na(Estatura[Genero=="Feminino"])), 
         MCT[Genero=="Feminino"])
aplpack::bagplot(Estatura[Genero=="Feminino"], 
                 MCT[Genero=="Feminino"],
                 main=paste("Estudantes femininas de Administração Noturno FEA-USP 2008", "\nN =",N),
                 xlab="Estatura (m)",
                 ylab="Massa Corporal Total (kg)",
                 na.rm = TRUE)

density plot (grƔfico de densidade)

para um grupo

estatura.masc <- rnorm(n=50, mean=177, sd=10)
plot(density(estatura.masc), 
     main="Grafico de densidade", 
     xlab="Estatura masculina (cm)", ylab="Densidade")
rug(estatura.masc)

para dois grupos

library(readxl)
suppressMessages(library(car, warn.conflicts = FALSE))
Dados <- readxl::read_excel("Adm2008.xlsx")
car::densityPlot(Estatura~factor(Genero), data=Dados, bw=bw.SJ, 
                 adjust=1, kernel=dnorm, method="adaptive")

dot plot com mƩdias para 2 grupos

library(readxl)
library(lattice)

TH <- readxl::read_excel("Sodio_2.xlsx")

TH$Instructor <- factor(TH$Instructor, levels=unique(TH$Instructor))
grafico <- lattice::xyplot(Sodium ~ Instructor, data=TH, type=c("p","a"),
                           jitter.x=TRUE, jitter.y=TRUE, col="black")
print(grafico)
$formula
Sodium ~ Instructor

$as.table
[1] FALSE

$aspect.fill
[1] TRUE

$legend
NULL

$panel
[1] "panel.xyplot"

$page
NULL

$layout
NULL

$skip
[1] FALSE

$strip
[1] FALSE

$strip.left
[1] FALSE

$xscale.components
function (lim, packet.number = 0, packet.list = NULL, top = TRUE, 
    ...) 
{
    comps <- calculateAxisComponents(lim, packet.list = packet.list, 
        packet.number = packet.number, ...)
    list(num.limit = comps$num.limit, bottom = list(ticks = list(at = comps$at, 
        tck = 1), labels = list(at = comps$at, labels = comps$labels, 
        check.overlap = comps$check.overlap)), top = top)
}
<bytecode: 0x0000014b8d7c10d0>
<environment: namespace:lattice>

$yscale.components
function (lim, packet.number = 0, packet.list = NULL, right = TRUE, 
    ...) 
{
    comps <- calculateAxisComponents(lim, packet.list = packet.list, 
        packet.number = packet.number, ...)
    list(num.limit = comps$num.limit, left = list(ticks = list(at = comps$at, 
        tck = 1), labels = list(at = comps$at, labels = comps$labels, 
        cex = 1, check.overlap = comps$check.overlap)), right = right)
}
<bytecode: 0x0000014b8d807a00>
<environment: namespace:lattice>

$axis
function (side = c("top", "bottom", "left", "right"), scales, 
    components, as.table, labels = c("default", "yes", "no"), 
    ticks = c("default", "yes", "no"), ..., prefix = lattice.getStatus("current.prefix")) 
{
    side <- match.arg(side)
    labels <- match.arg(labels)
    ticks <- match.arg(ticks)
    row <- lattice.getStatus("current.focus.row", prefix = prefix)
    column <- lattice.getStatus("current.focus.column", prefix = prefix)
    panel.layout <- trellis.currentLayout("panel", prefix = prefix)
    layout.dim <- dim(panel.layout)
    determineStatus <- function(x) {
        if (is.null(x) || (is.logical(x) && !x)) 
            FALSE
        else TRUE
    }
    lastPanel <- function() {
        ((pn <- panel.number(prefix = prefix)) > 0 && pn == max(panel.layout))
    }
    atBoundary <- function() {
        switch(side, top = if (as.table) row == 1 else row == 
            layout.dim[1], bottom = if (!as.table) row == 1 else row == 
            layout.dim[1], left = column == 1, right = column == 
            layout.dim[2] || lastPanel())
    }
    do.ticks <- switch(ticks, yes = TRUE, no = FALSE, default = scales$draw && 
        determineStatus(components[[side]]) && (if (scales$relation == 
        "same") atBoundary() else TRUE))
    do.labels <- switch(labels, yes = TRUE, no = FALSE, default = scales$draw && 
        (if (scales$relation == "same") {
            atBoundary() && switch(side, top = rep(scales$alternating, 
                length.out = column)[column] %in% c(2, 3), bottom = rep(scales$alternating, 
                length.out = column)[column] %in% c(1, 3), left = rep(scales$alternating, 
                length.out = row)[row] %in% c(1, 3), right = rep(scales$alternating, 
                length.out = row)[row] %in% c(2, 3))
        } else TRUE))
    if (do.ticks || do.labels) {
        comp.list <- switch(side, top = if (is.logical(components[["top"]]) && 
            components[["top"]]) components[["bottom"]] else components[["top"]], 
            bottom = components[["bottom"]], left = components[["left"]], 
            right = if (is.logical(components[["right"]]) && 
                components[["right"]]) components[["left"]] else components[["right"]])
        scales.tck <- switch(side, left = , bottom = scales$tck[1], 
            right = , top = scales$tck[2])
        if (!is.logical(comp.list)) {
            if (do.ticks) 
                panel.axis(side = side, at = comp.list$ticks$at, 
                  labels = FALSE, draw.labels = FALSE, check.overlap = FALSE, 
                  outside = TRUE, ticks = TRUE, tck = scales.tck * 
                    comp.list$ticks$tck, ...)
            if (do.labels) 
                panel.axis(side = side, at = comp.list$labels$at, 
                  labels = comp.list$labels$labels, draw.labels = TRUE, 
                  check.overlap = comp.list$labels$check.overlap, 
                  outside = TRUE, ticks = FALSE, tck = scales.tck * 
                    comp.list$ticks$tck, ...)
        }
    }
}
<bytecode: 0x0000014b8d806490>
<environment: namespace:lattice>

$xlab
[1] "Instructor"

$ylab
[1] "Sodium"

$xlab.default
[1] "Instructor"

$ylab.default
[1] "Sodium"

$xlab.top
NULL

$ylab.right
NULL

$main
NULL

$sub
NULL

$x.between
[1] 0

$y.between
[1] 0

$par.settings
NULL

$plot.args
NULL

$lattice.options
NULL

$par.strip.text
NULL

$index.cond
$index.cond[[1]]
[1] 1


$perm.cond
[1] 1

$condlevels
$condlevels[[1]]
[1] "1"


$call
xyplot(Sodium ~ Instructor, data = TH, type = c("p", "a"), jitter.x = TRUE, 
    jitter.y = TRUE, col = "black")

$x.scales
$x.scales$draw
[1] TRUE

$x.scales$axs
[1] "r"

$x.scales$tck
[1] 1 1

$x.scales$tick.number
[1] 5

$x.scales$at
[1] FALSE

$x.scales$labels
[1] FALSE

$x.scales$log
[1] FALSE

$x.scales$alternating
[1] 1 2

$x.scales$relation
[1] "same"

$x.scales$abbreviate
[1] FALSE

$x.scales$minlength
[1] 4

$x.scales$limits
NULL

$x.scales$format
NULL

$x.scales$equispaced.log
[1] TRUE

$x.scales$lty
[1] FALSE

$x.scales$lwd
[1] FALSE

$x.scales$cex
[1] FALSE FALSE

$x.scales$rot
[1] FALSE FALSE

$x.scales$col
[1] FALSE

$x.scales$col.line
[1] FALSE

$x.scales$alpha
[1] FALSE

$x.scales$alpha.line
[1] FALSE

$x.scales$font
[1] FALSE

$x.scales$fontfamily
[1] FALSE

$x.scales$fontface
[1] FALSE

$x.scales$lineheight
[1] FALSE


$y.scales
$y.scales$draw
[1] TRUE

$y.scales$axs
[1] "r"

$y.scales$tck
[1] 1 1

$y.scales$tick.number
[1] 5

$y.scales$at
[1] FALSE

$y.scales$labels
[1] FALSE

$y.scales$log
[1] FALSE

$y.scales$alternating
[1] 1 2

$y.scales$relation
[1] "same"

$y.scales$abbreviate
[1] FALSE

$y.scales$minlength
[1] 4

$y.scales$limits
NULL

$y.scales$format
NULL

$y.scales$equispaced.log
[1] TRUE

$y.scales$lty
[1] FALSE

$y.scales$lwd
[1] FALSE

$y.scales$cex
[1] FALSE FALSE

$y.scales$rot
[1] FALSE FALSE

$y.scales$col
[1] FALSE

$y.scales$col.line
[1] FALSE

$y.scales$alpha
[1] FALSE

$y.scales$alpha.line
[1] FALSE

$y.scales$font
[1] FALSE

$y.scales$fontfamily
[1] FALSE

$y.scales$fontface
[1] FALSE

$y.scales$lineheight
[1] FALSE


$panel.args.common
$panel.args.common$type
[1] "p" "a"

$panel.args.common$jitter.x
[1] TRUE

$panel.args.common$jitter.y
[1] TRUE

$panel.args.common$col
[1] "black"


$panel.args
$panel.args[[1]]
$panel.args[[1]]$x
 [1] Brendon Small Brendon Small Brendon Small Brendon Small Brendon Small
 [6] Brendon Small Brendon Small Brendon Small Brendon Small Brendon Small
[11] Brendon Small Brendon Small Brendon Small Brendon Small Brendon Small
[16] Brendon Small Brendon Small Brendon Small Brendon Small Brendon Small
[21] Coach McGuirk Coach McGuirk Coach McGuirk Coach McGuirk Coach McGuirk
[26] Coach McGuirk Coach McGuirk Coach McGuirk Coach McGuirk Coach McGuirk
[31] Coach McGuirk Coach McGuirk Coach McGuirk Coach McGuirk Coach McGuirk
[36] Coach McGuirk Coach McGuirk Coach McGuirk Coach McGuirk Coach McGuirk
Levels: Brendon Small Coach McGuirk

$panel.args[[1]]$y
 [1] 1200 1400 1350  950 1400 1150 1300 1325 1425 1500 1250 1150  950 1150 1600
[16] 1300 1050 1300 1700 1300 1100 1200 1250 1050 1200 1250 1350 1350 1325 1525
[31] 1225 1125 1000 1125 1400 1200 1150 1400 1500 1200



$packet.sizes
[1] 40

$x.limits
[1] "Brendon Small" "Coach McGuirk"

$y.limits
[1]  897.5 1752.5

$x.used.at
NULL

$y.used.at
NULL

$x.num.limit
NULL

$y.num.limit
NULL

$aspect.ratio
[1] 1

$prepanel.default
[1] "prepanel.default.xyplot"

$prepanel
NULL

attr(,"class")
[1] "trellis"

mƩdias para 2 grupos com intervalo de confianƧa

# Intervalo de confianƧa de 95% da mƩdia populacional
suppressMessages(library(sandwich, warn.conflicts = FALSE))
suppressMessages(library(car, warn.conflicts = FALSE))
library(RcmdrMisc)
suppressMessages(library(gplots, warn.conflicts = FALSE))

estatura <- c(176, 183, 173, 191, 157, 152, 174, 166)
genero <- factor(c("M", "M", "M", "M", "F", "F", "F", "F"))
tabela <- data.frame(estatura, genero)
with(tabela, RcmdrMisc::plotMeans(estatura, genero, connect=FALSE,
                                  xlab="Genero", ylab="Estatura", main="IC95%"))  
with(tabela, gplots::plotmeans(estatura ~ genero, connect=FALSE,
                               xlab="Genero", ylab="Estatura", main="IC95%",
                               barcol="black"))

mƩdias para 2 fatores com intervalo de confianƧa

suppressMessages(library(sandwich, warn.conflicts = FALSE))
suppressMessages(library(car, warn.conflicts = FALSE))
library(RcmdrMisc)
with(datasets::ToothGrowth, 
     RcmdrMisc::plotMeans(len, supp, as.factor(dose),  
                          error.bars="conf.int", level=.95, connect=FALSE,
                          xlab="Suppliment", ylab="Lenght", main="CI95%",
                          legend.pos="top"))
with(datasets::ToothGrowth, 
     RcmdrMisc::plotMeans(len, as.factor(dose), supp,  
                          error.bars="conf.int", level=.95, connect=FALSE,
                          xlab="Suppliment", ylab="Lenght", main="CI95%",
                          legend.pos="topleft"))

boxplot com dois fatores

boxplot(len~dose*supp, 
        data=datasets::ToothGrowth, 
        main="Tooth Growth", xlab="Suppliment and Dose", ylab="Length")
boxplot(len~supp*dose, 
        data=datasets::ToothGrowth, 
        main="Tooth Growth", xlab="Suppliment and Dose", ylab="Length")

itens Likert

suppressMessages(library(psych, warn.conflicts = FALSE))
suppressMessages(library(likert, warn.conflicts = FALSE))

Input <- ("
  Pooh    Leitao  Tigrao
  3       2       4
  5       4       4
  4       2       4
  4       2       4
  4       1       5
  4       2       3
  4       3       5
  4       2       4
  5       2       4
  5       3       3
")
Dados <- read.table(textConnection(Input),header=TRUE)
Dados$Pooh <- factor(Dados$Pooh,
                     levels = c("1", "2", "3", "4", "5"),
                     ordered = TRUE)
Dados$Leitao <- factor(Dados$Leitao,
                       levels = c("1", "2", "3", "4", "5"),
                       ordered = TRUE)
Dados$Tigrao <- factor(Dados$Tigrao,
                       levels = c("1", "2", "3", "4", "5"),
                       ordered = TRUE)
psych::headTail(Dados)
print(str(Dados))
print(summary(Dados))
print(likert::likert(Dados)) # Percent responses in each group
out <- likert::likert(Dados)
print(summary(out))
print(plot(out,type="bar"))
print(plot(out,type="heat",low.color = "white",high.color = "blue",
     text.color = "black",text.size = 4,wrap = 50))
print(plot(out,type="density",facet = TRUE,bw = 0.5))
'data.frame':   10 obs. of  3 variables:
 $ Pooh  : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 3 5 4 4 4 4 4 4 5 5
 $ Leitao: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 2 4 2 2 1 2 3 2 2 3
 $ Tigrao: Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 4 4 4 4 5 3 5 4 4 3
NULL
 Pooh  Leitao Tigrao
 1:0   1:1    1:0   
 2:0   2:6    2:0   
 3:1   3:2    3:2   
 4:6   4:1    4:6   
 5:3   5:0    5:2   
$results
    Item  1  2  3  4  5
1   Pooh  0  0 10 60 30
2 Leitao 10 60 20 10  0
3 Tigrao  0  0 20 60 20

$items
   Pooh Leitao Tigrao
1     3      2      4
2     5      4      4
3     4      2      4
4     4      2      4
5     4      1      5
6     4      2      3
7     4      3      5
8     4      2      4
9     5      2      4
10    5      3      3

$grouping
NULL

$factors
NULL

$nlevels
[1] 5

$levels
[1] "1" "2" "3" "4" "5"

attr(,"class")
[1] "likert"
    Item low neutral high mean        sd
1   Pooh   0      10   90  4.2 0.6324555
3 Tigrao   0      20   80  4.0 0.6666667
2 Leitao  70      20   10  2.3 0.8232726
$data
     Item variable value
1    Pooh        1     0
2  Leitao        1   -10
3  Tigrao        1     0
4    Pooh        2     0
5  Leitao        2   -60
6  Tigrao        2     0
7    Pooh        3     5
8  Leitao        3    10
9  Tigrao        3    10
10   Pooh        4    60
11 Leitao        4    10
12 Tigrao        4    60
13   Pooh        5    30
14 Leitao        5     0
15 Tigrao        5    20
71   Pooh        3    -5
81 Leitao        3   -10
91 Tigrao        3   -10

$layers
$layers[[1]]
mapping: yintercept = ~yintercept 
geom_hline: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 

$layers[[2]]
mapping: fill = ~variable 
geom_bar: just = 0.5, width = NULL, na.rm = FALSE, orientation = NA
stat_identity: na.rm = FALSE
position_stack 

$layers[[3]]
mapping: fill = ~variable 
geom_bar: just = 0.5, width = NULL, na.rm = FALSE, orientation = NA
stat_identity: na.rm = FALSE
position_stack 

$layers[[4]]
mapping: x = ~Item, label = ~paste0(round(low), "%") 
geom_text: parse = FALSE, check_overlap = FALSE, size.unit = mm, na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 

$layers[[5]]
mapping: x = ~Item, label = ~paste0(round(high), "%") 
geom_text: parse = FALSE, check_overlap = FALSE, size.unit = mm, na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 

$layers[[6]]
mapping: x = ~Item, label = ~paste0(round(neutral), "%") 
geom_text: parse = FALSE, check_overlap = FALSE, size.unit = mm, na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 


$scales
<ggproto object: Class ScalesList, gg>
    add: function
    add_defaults: function
    add_missing: function
    backtransform_df: function
    clone: function
    find: function
    get_scales: function
    has_scale: function
    input: function
    map_df: function
    n: function
    non_position_scales: function
    scales: list
    train_df: function
    transform_df: function
    super:  <ggproto object: Class ScalesList, gg>

$guides
<Guides[0] ggproto object>

<empty>

$mapping
Aesthetic mapping: 
* `x`     -> `Item`
* `y`     -> `value`
* `group` -> `Item`

$theme
$theme$axis.ticks
 list()
 - attr(*, "class")= chr [1:2] "element_blank" "element"

$theme$legend.position
[1] "bottom"

$theme$panel.background
List of 5
 $ fill         : logi NA
 $ colour       : chr "grey70"
 $ linewidth    : num 1
 $ linetype     : NULL
 $ inherit.blank: logi FALSE
 - attr(*, "class")= chr [1:2] "element_rect" "element"

attr(,"complete")
[1] FALSE
attr(,"validate")
[1] TRUE

$coordinates
<ggproto object: Class CoordFlip, CoordCartesian, Coord, gg>
    aspect: function
    backtransform_range: function
    clip: on
    default: FALSE
    distance: function
    expand: TRUE
    is_free: function
    is_linear: function
    labels: function
    limits: list
    modify_scales: function
    range: function
    render_axis_h: function
    render_axis_v: function
    render_bg: function
    render_fg: function
    setup_data: function
    setup_layout: function
    setup_panel_guides: function
    setup_panel_params: function
    setup_params: function
    train_panel_guides: function
    transform: function
    super:  <ggproto object: Class CoordFlip, CoordCartesian, Coord, gg>

$facet
<ggproto object: Class FacetNull, Facet, gg>
    compute_layout: function
    draw_back: function
    draw_front: function
    draw_labels: function
    draw_panels: function
    finish_data: function
    init_scales: function
    map_data: function
    params: list
    setup_data: function
    setup_params: function
    shrink: TRUE
    train_scales: function
    vars: function
    super:  <ggproto object: Class FacetNull, Facet, gg>

$plot_env
<environment: 0x0000014ba309d9a8>

$layout
<ggproto object: Class Layout, gg>
    coord: NULL
    coord_params: list
    facet: NULL
    facet_params: list
    finish_data: function
    get_scales: function
    layout: NULL
    map_position: function
    panel_params: NULL
    panel_scales_x: NULL
    panel_scales_y: NULL
    render: function
    render_labels: function
    reset_scales: function
    resolve_label: function
    setup: function
    setup_panel_guides: function
    setup_panel_params: function
    train_position: function
    super:  <ggproto object: Class Layout, gg>

$labels
$labels$x
[1] ""

$labels$y
[1] "Percentage"

$labels$group
[1] "Item"

$labels$yintercept
[1] "yintercept"

$labels$fill
[1] "variable"

$labels$label
[1] "paste0(round(low), \"%\")"


attr(,"class")
[1] "likert.bar.plot" "gg"              "ggplot"         
attr(,"item.order")
[1] "Leitao" "Tigrao" "Pooh"  
$data
     Item  variable value      label
1    Pooh Mean (SD)  -100 4.2 (0.63)
2  Tigrao Mean (SD)  -100 4.0 (0.67)
3  Leitao Mean (SD)  -100 2.3 (0.82)
4    Pooh         1     0         0%
5  Leitao         1    10        10%
6  Tigrao         1     0         0%
7    Pooh         2     0         0%
8  Leitao         2    60        60%
9  Tigrao         2     0         0%
10   Pooh         3    10        10%
11 Leitao         3    20        20%
12 Tigrao         3    20        20%
13   Pooh         4    60        60%
14 Leitao         4    10        10%
15 Tigrao         4    60        60%
16   Pooh         5    30        30%
17 Leitao         5     0         0%
18 Tigrao         5    20        20%

$layers
$layers[[1]]
geom_tile: linejoin = mitre, na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 

$layers[[2]]
geom_text: parse = FALSE, check_overlap = FALSE, size.unit = mm, na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 


$scales
<ggproto object: Class ScalesList, gg>
    add: function
    add_defaults: function
    add_missing: function
    backtransform_df: function
    clone: function
    find: function
    get_scales: function
    has_scale: function
    input: function
    map_df: function
    n: function
    non_position_scales: function
    scales: list
    train_df: function
    transform_df: function
    super:  <ggproto object: Class ScalesList, gg>

$guides
<Guides[0] ggproto object>

<empty>

$mapping
Aesthetic mapping: 
* `x`     -> `Item`
* `y`     -> `variable`
* `fill`  -> `value`
* `label` -> `label`

$theme
$theme$axis.ticks
 list()
 - attr(*, "class")= chr [1:2] "element_blank" "element"

$theme$panel.background
List of 5
 $ fill         : logi NA
 $ colour       : chr "grey70"
 $ linewidth    : num 1
 $ linetype     : NULL
 $ inherit.blank: logi FALSE
 - attr(*, "class")= chr [1:2] "element_rect" "element"

$theme$panel.grid.major
 list()
 - attr(*, "class")= chr [1:2] "element_blank" "element"

$theme$panel.grid.minor
 list()
 - attr(*, "class")= chr [1:2] "element_blank" "element"

attr(,"complete")
[1] FALSE
attr(,"validate")
[1] TRUE

$coordinates
<ggproto object: Class CoordFlip, CoordCartesian, Coord, gg>
    aspect: function
    backtransform_range: function
    clip: on
    default: FALSE
    distance: function
    expand: TRUE
    is_free: function
    is_linear: function
    labels: function
    limits: list
    modify_scales: function
    range: function
    render_axis_h: function
    render_axis_v: function
    render_bg: function
    render_fg: function
    setup_data: function
    setup_layout: function
    setup_panel_guides: function
    setup_panel_params: function
    setup_params: function
    train_panel_guides: function
    transform: function
    super:  <ggproto object: Class CoordFlip, CoordCartesian, Coord, gg>

$facet
<ggproto object: Class FacetNull, Facet, gg>
    compute_layout: function
    draw_back: function
    draw_front: function
    draw_labels: function
    draw_panels: function
    finish_data: function
    init_scales: function
    map_data: function
    params: list
    setup_data: function
    setup_params: function
    shrink: TRUE
    train_scales: function
    vars: function
    super:  <ggproto object: Class FacetNull, Facet, gg>

$plot_env
<environment: 0x0000014ba977bdc0>

$layout
<ggproto object: Class Layout, gg>
    coord: NULL
    coord_params: list
    facet: NULL
    facet_params: list
    finish_data: function
    get_scales: function
    layout: NULL
    map_position: function
    panel_params: NULL
    panel_scales_x: NULL
    panel_scales_y: NULL
    render: function
    render_labels: function
    reset_scales: function
    resolve_label: function
    setup: function
    setup_panel_guides: function
    setup_panel_params: function
    train_position: function
    super:  <ggproto object: Class Layout, gg>

$labels
$labels$y
[1] ""

$labels$x
[1] ""

$labels$fill
[1] "value"

$labels$label
[1] "label"


attr(,"class")
[1] "likert.heat.plot" "gg"               "ggplot"          
$data
       Item            x            y
1      Pooh  1.500000000 0.0008901437
2      Pooh  1.509784736 0.0009431587
3      Pooh  1.519569472 0.0010002525
4      Pooh  1.529354207 0.0010595517
5      Pooh  1.539138943 0.0011221588
6      Pooh  1.548923679 0.0011883373
7      Pooh  1.558708415 0.0012568966
8      Pooh  1.568493151 0.0013305886
9      Pooh  1.578277886 0.0014055637
10     Pooh  1.588062622 0.0014874429
11     Pooh  1.597847358 0.0015708058
12     Pooh  1.607632094 0.0016601029
13     Pooh  1.617416830 0.0017525826
14     Pooh  1.627201566 0.0018498362
15     Pooh  1.636986301 0.0019522020
16     Pooh  1.646771037 0.0020579760
17     Pooh  1.656555773 0.0021710372
18     Pooh  1.666340509 0.0022859203
19     Pooh  1.676125245 0.0024105255
20     Pooh  1.685909980 0.0025372026
21     Pooh  1.695694716 0.0026721670
22     Pooh  1.705479452 0.0028115392
23     Pooh  1.715264188 0.0029575229
24     Pooh  1.725048924 0.0031105275
25     Pooh  1.734833659 0.0032682127
26     Pooh  1.744618395 0.0034358217
27     Pooh  1.754403131 0.0036059117
28     Pooh  1.764187867 0.0037891291
29     Pooh  1.773972603 0.0039751201
30     Pooh  1.783757339 0.0041722057
31     Pooh  1.793542074 0.0043751414
32     Pooh  1.803326810 0.0045868522
33     Pooh  1.813111546 0.0048078007
34     Pooh  1.822896282 0.0050349077
35     Pooh  1.832681018 0.0052749581
36     Pooh  1.842465753 0.0055182443
37     Pooh  1.852250489 0.0057785020
38     Pooh  1.862035225 0.0060423139
39     Pooh  1.871819961 0.0063203424
40     Pooh  1.881604697 0.0066058003
41     Pooh  1.891389432 0.0069024025
42     Pooh  1.901174168 0.0072106311
43     Pooh  1.910958904 0.0075266108
44     Pooh  1.920743640 0.0078587336
45     Pooh  1.930528376 0.0081948922
46     Pooh  1.940313112 0.0085520253
47     Pooh  1.950097847 0.0089135106
48     Pooh  1.959882583 0.0092924046
49     Pooh  1.969667319 0.0096803124
50     Pooh  1.979452055 0.0100817407
51     Pooh  1.989236791 0.0104971437
52     Pooh  1.999021526 0.0109218633
53     Pooh  2.008806262 0.0113658051
54     Pooh  2.018590998 0.0118145525
55     Pooh  2.028375734 0.0122880403
56     Pooh  2.038160470 0.0127666132
57     Pooh  2.047945205 0.0132655265
58     Pooh  2.057729941 0.0137748714
59     Pooh  2.067514677 0.0142998639
60     Pooh  2.077299413 0.0148408754
61     Pooh  2.087084149 0.0153925662
62     Pooh  2.096868885 0.0159660806
63     Pooh  2.106653620 0.0165450509
64     Pooh  2.116438356 0.0171518408
65     Pooh  2.126223092 0.0177642939
66     Pooh  2.136007828 0.0183993999
67     Pooh  2.145792564 0.0190460124
68     Pooh  2.155577299 0.0197098846
69     Pooh  2.165362035 0.0203912579
70     Pooh  2.175146771 0.0210842986
71     Pooh  2.184931507 0.0218009557
72     Pooh  2.194716243 0.0225235170
73     Pooh  2.204500978 0.0232759004
74     Pooh  2.214285714 0.0240342982
75     Pooh  2.224070450 0.0248167536
76     Pooh  2.233855186 0.0256113174
77     Pooh  2.243639922 0.0264240437
78     Pooh  2.253424658 0.0272550212
79     Pooh  2.263209393 0.0280981663
80     Pooh  2.272994129 0.0289657256
81     Pooh  2.282778865 0.0298393884
82     Pooh  2.292563601 0.0307436207
83     Pooh  2.302348337 0.0316539683
84     Pooh  2.312133072 0.0325887776
85     Pooh  2.321917808 0.0335358046
86     Pooh  2.331702544 0.0345011579
87     Pooh  2.341487280 0.0354847963
88     Pooh  2.351272016 0.0364806248
89     Pooh  2.361056751 0.0375007535
90     Pooh  2.370841487 0.0385269573
91     Pooh  2.380626223 0.0395834121
92     Pooh  2.390410959 0.0406458886
93     Pooh  2.400195695 0.0417324523
94     Pooh  2.409980431 0.0428309987
95     Pooh  2.419765166 0.0439475192
96     Pooh  2.429549902 0.0450819216
97     Pooh  2.439334638 0.0462282453
98     Pooh  2.449119374 0.0473982948
99     Pooh  2.458904110 0.0485742758
100    Pooh  2.468688845 0.0497797855
101    Pooh  2.478473581 0.0509911808
102    Pooh  2.488258317 0.0522261187
103    Pooh  2.498043053 0.0534728031
104    Pooh  2.507827789 0.0547371075
105    Pooh  2.517612524 0.0560190248
106    Pooh  2.527397260 0.0573126841
107    Pooh  2.537181996 0.0586298678
108    Pooh  2.546966732 0.0599529325
109    Pooh  2.556751468 0.0613055270
110    Pooh  2.566536204 0.0626640695
111    Pooh  2.576320939 0.0640464038
112    Pooh  2.586105675 0.0654407572
113    Pooh  2.595890411 0.0668531391
114    Pooh  2.605675147 0.0682837999
115    Pooh  2.615459883 0.0697266467
116    Pooh  2.625244618 0.0711942958
117    Pooh  2.635029354 0.0726681454
118    Pooh  2.644814090 0.0741736674
119    Pooh  2.654598826 0.0756856861
120    Pooh  2.664383562 0.0772236917
121    Pooh  2.674168297 0.0787750755
122    Pooh  2.683953033 0.0803465268
123    Pooh  2.693737769 0.0819387181
124    Pooh  2.703522505 0.0835447362
125    Pooh  2.713307241 0.0851794375
126    Pooh  2.723091977 0.0868213095
127    Pooh  2.732876712 0.0885004942
128    Pooh  2.742661448 0.0901874682
129    Pooh  2.752446184 0.0919055997
130    Pooh  2.762230920 0.0936400345
131    Pooh  2.772015656 0.0953989243
132    Pooh  2.781800391 0.0971834630
133    Pooh  2.791585127 0.0989851009
134    Pooh  2.801369863 0.1008226698
135    Pooh  2.811154599 0.1026692214
136    Pooh  2.820939335 0.1045630244
137    Pooh  2.830724070 0.1064667784
138    Pooh  2.840508806 0.1084103361
139    Pooh  2.850293542 0.1103748598
140    Pooh  2.860078278 0.1123708326
141    Pooh  2.869863014 0.1143999378
142    Pooh  2.879647750 0.1164511313
143    Pooh  2.889432485 0.1185488516
144    Pooh  2.899217221 0.1206582035
145    Pooh  2.909001957 0.1228287664
146    Pooh  2.918786693 0.1250122013
147    Pooh  2.928571429 0.1272471240
148    Pooh  2.938356164 0.1295090797
149    Pooh  2.948140900 0.1318115851
150    Pooh  2.957925636 0.1341566037
151    Pooh  2.967710372 0.1365299646
152    Pooh  2.977495108 0.1389626466
153    Pooh  2.987279843 0.1414101589
154    Pooh  2.997064579 0.1439351123
155    Pooh  3.006849315 0.1464762044
156    Pooh  3.016634051 0.1490818511
157    Pooh  3.026418787 0.1517210475
158    Pooh  3.036203523 0.1544105683
159    Pooh  3.045988258 0.1571522582
160    Pooh  3.055772994 0.1599287274
161    Pooh  3.065557730 0.1627770998
162    Pooh  3.075342466 0.1656434480
163    Pooh  3.085127202 0.1686024235
164    Pooh  3.094911937 0.1715804299
165    Pooh  3.104696673 0.1746345596
166    Pooh  3.114481409 0.1777276568
167    Pooh  3.124266145 0.1808792055
168    Pooh  3.134050881 0.1840903829
169    Pooh  3.143835616 0.1873413129
170    Pooh  3.153620352 0.1906730431
171    Pooh  3.163405088 0.1940249733
172    Pooh  3.173189824 0.1974791394
173    Pooh  3.182974560 0.2009539150
174    Pooh  3.192759295 0.2045111292
175    Pooh  3.202544031 0.2081097028
176    Pooh  3.212328767 0.2117703158
177    Pooh  3.222113503 0.2154928797
178    Pooh  3.231898239 0.2192567442
179    Pooh  3.241682975 0.2231026655
180    Pooh  3.251467710 0.2269691010
181    Pooh  3.261252446 0.2309368620
182    Pooh  3.271037182 0.2349245201
183    Pooh  3.280821918 0.2389917666
184    Pooh  3.290606654 0.2430978231
185    Pooh  3.300391389 0.2472620947
186    Pooh  3.310176125 0.2514827194
187    Pooh  3.319960861 0.2557409130
188    Pooh  3.329745597 0.2600712330
189    Pooh  3.339530333 0.2644195846
190    Pooh  3.349315068 0.2688536559
191    Pooh  3.359099804 0.2733038469
192    Pooh  3.368884540 0.2778185163
193    Pooh  3.378669276 0.2823631013
194    Pooh  3.388454012 0.2869525599
195    Pooh  3.398238748 0.2915829954
196    Pooh  3.408023483 0.2962407488
197    Pooh  3.417808219 0.3009473997
198    Pooh  3.427592955 0.3056662750
199    Pooh  3.437377691 0.3104384335
200    Pooh  3.447162427 0.3152195514
201    Pooh  3.456947162 0.3200365073
202    Pooh  3.466731898 0.3248677386
203    Pooh  3.476516634 0.3297203832
204    Pooh  3.486301370 0.3345886205
205    Pooh  3.496086106 0.3394672528
206    Pooh  3.505870841 0.3443584693
207    Pooh  3.515655577 0.3492528318
208    Pooh  3.525440313 0.3541521524
209    Pooh  3.535225049 0.3590502168
210    Pooh  3.545009785 0.3639432559
211    Pooh  3.554794521 0.3688291207
212    Pooh  3.564579256 0.3737042238
213    Pooh  3.574363992 0.3785613580
214    Pooh  3.584148728 0.3834065130
215    Pooh  3.593933464 0.3882178631
216    Pooh  3.603718200 0.3930207620
217    Pooh  3.613502935 0.3977688677
218    Pooh  3.623287671 0.4025034753
219    Pooh  3.633072407 0.4071840907
220    Pooh  3.642857143 0.4118325966
221    Pooh  3.652641879 0.4164329381
222    Pooh  3.662426614 0.4209774383
223    Pooh  3.672211350 0.4254847110
224    Pooh  3.681996086 0.4299073461
225    Pooh  3.691780822 0.4343088218
226    Pooh  3.701565558 0.4385919175
227    Pooh  3.711350294 0.4428488657
228    Pooh  3.721135029 0.4470012237
229    Pooh  3.730919765 0.4510964652
230    Pooh  3.740704501 0.4551060323
231    Pooh  3.750489237 0.4590229231
232    Pooh  3.760273973 0.4628780298
233    Pooh  3.770058708 0.4666006016
234    Pooh  3.779843444 0.4702900397
235    Pooh  3.789628180 0.4738031376
236    Pooh  3.799412916 0.4772789551
237    Pooh  3.809197652 0.4806056504
238    Pooh  3.818982387 0.4838540311
239    Pooh  3.828767123 0.4869849399
240    Pooh  3.838551859 0.4899931921
241    Pooh  3.848336595 0.4929196734
242    Pooh  3.858121331 0.4956763426
243    Pooh  3.867906067 0.4983905588
244    Pooh  3.877690802 0.5008855303
245    Pooh  3.887475538 0.5033354383
246    Pooh  3.897260274 0.5056050922
247    Pooh  3.907045010 0.5077825695
248    Pooh  3.916829746 0.5098217817
249    Pooh  3.926614481 0.5117202451
250    Pooh  3.936399217 0.5135248758
251    Pooh  3.946183953 0.5151393393
252    Pooh  3.955968689 0.5167062609
253    Pooh  3.965753425 0.5180333785
254    Pooh  3.975538160 0.5193123253
255    Pooh  3.985322896 0.5203985891
256    Pooh  3.995107632 0.5213885113
257    Pooh  4.004892368 0.5222339212
258    Pooh  4.014677104 0.5229354466
259    Pooh  4.024461840 0.5235410488
260    Pooh  4.034246575 0.5239564695
261    Pooh  4.044031311 0.5243243448
262    Pooh  4.053816047 0.5244575884
263    Pooh  4.063600783 0.5245447223
264    Pooh  4.073385519 0.5244474168
265    Pooh  4.083170254 0.5242599054
266    Pooh  4.092954990 0.5239370851
267    Pooh  4.102739726 0.5234825219
268    Pooh  4.112524462 0.5229401302
269    Pooh  4.122309198 0.5222275234
270    Pooh  4.132093933 0.5214723629
271    Pooh  4.141878669 0.5205120397
272    Pooh  4.151663405 0.5195123533
273    Pooh  4.161448141 0.5183552142
274    Pooh  4.171232877 0.5171229569
275    Pooh  4.181017613 0.5157780221
276    Pooh  4.190802348 0.5143261824
277    Pooh  4.200587084 0.5128030727
278    Pooh  4.210371820 0.5111455389
279    Pooh  4.220156556 0.5094543991
280    Pooh  4.229941292 0.5076058178
281    Pooh  4.239726027 0.5057279381
282    Pooh  4.249510763 0.5037328649
283    Pooh  4.259295499 0.5016836854
284    Pooh  4.269080235 0.4995533462
285    Pooh  4.278864971 0.4973486972
286    Pooh  4.288649706 0.4950945083
287    Pooh  4.298434442 0.4927504559
288    Pooh  4.308219178 0.4903839376
289    Pooh  4.318003914 0.4879166287
290    Pooh  4.327788650 0.4854314560
291    Pooh  4.337573386 0.4828748288
292    Pooh  4.347358121 0.4802870038
293    Pooh  4.357142857 0.4776523820
294    Pooh  4.366927593 0.4749776206
295    Pooh  4.376712329 0.4722760995
296    Pooh  4.386497065 0.4695296909
297    Pooh  4.396281800 0.4667720605
298    Pooh  4.406066536 0.4639687340
299    Pooh  4.415851272 0.4611582618
300    Pooh  4.425636008 0.4583192074
301    Pooh  4.435420744 0.4554696464
302    Pooh  4.445205479 0.4526043256
303    Pooh  4.454990215 0.4497285839
304    Pooh  4.464774951 0.4468458948
305    Pooh  4.474559687 0.4439559389
306    Pooh  4.484344423 0.4410641663
307    Pooh  4.494129159 0.4381709378
308    Pooh  4.503913894 0.4352788048
309    Pooh  4.513698630 0.4323910544
310    Pooh  4.523483366 0.4295079794
311    Pooh  4.533268102 0.4266319178
312    Pooh  4.543052838 0.4237661487
313    Pooh  4.552837573 0.4209072414
314    Pooh  4.562622309 0.4180658215
315    Pooh  4.572407045 0.4152287736
316    Pooh  4.582191781 0.4124175225
317    Pooh  4.591976517 0.4096120646
318    Pooh  4.601761252 0.4068297799
319    Pooh  4.611545988 0.4040600452
320    Pooh  4.621330724 0.4013091354
321    Pooh  4.631115460 0.3985780474
322    Pooh  4.640900196 0.3958601741
323    Pooh  4.650684932 0.3931694778
324    Pooh  4.660469667 0.3904855757
325    Pooh  4.670254403 0.3878358802
326    Pooh  4.680039139 0.3851929395
327    Pooh  4.689823875 0.3825770185
328    Pooh  4.699608611 0.3799741830
329    Pooh  4.709393346 0.3773909757
330    Pooh  4.719178082 0.3748264086
331    Pooh  4.728962818 0.3722742684
332    Pooh  4.738747554 0.3697452339
333    Pooh  4.748532290 0.3672219758
334    Pooh  4.758317025 0.3647249276
335    Pooh  4.768101761 0.3622325006
336    Pooh  4.777886497 0.3597585578
337    Pooh  4.787671233 0.3572924651
338    Pooh  4.797455969 0.3548381476
339    Pooh  4.807240705 0.3523933275
340    Pooh  4.817025440 0.3499548389
341    Pooh  4.826810176 0.3475257717
342    Pooh  4.836594912 0.3450990597
343    Pooh  4.846379648 0.3426798774
344    Pooh  4.856164384 0.3402613248
345    Pooh  4.865949119 0.3378452914
346    Pooh  4.875733855 0.3354287362
347    Pooh  4.885518591 0.3330113982
348    Pooh  4.895303327 0.3305905974
349    Pooh  4.905088063 0.3281674881
350    Pooh  4.914872798 0.3257362238
351    Pooh  4.924657534 0.3233029208
352    Pooh  4.934442270 0.3208551021
353    Pooh  4.944227006 0.3184035465
354    Pooh  4.954011742 0.3159370432
355    Pooh  4.963796477 0.3134614798
356    Pooh  4.973581213 0.3109723261
357    Pooh  4.983365949 0.3084673523
358    Pooh  4.993150685 0.3059518316
359    Pooh  5.002935421 0.3034124775
360    Pooh  5.012720157 0.3008671651
361    Pooh  5.022504892 0.2982889657
362    Pooh  5.032289628 0.2957036426
363    Pooh  5.042074364 0.2930898246
364    Pooh  5.051859100 0.2904608237
365    Pooh  5.061643836 0.2878090483
366    Pooh  5.071428571 0.2851333450
367    Pooh  5.081213307 0.2824416899
368    Pooh  5.090998043 0.2797169421
369    Pooh  5.100782779 0.2769839211
370    Pooh  5.110567515 0.2742084988
371    Pooh  5.120352250 0.2714244812
372    Pooh  5.130136986 0.2686060822
373    Pooh  5.139921722 0.2657704482
374    Pooh  5.149706458 0.2629089619
375    Pooh  5.159491194 0.2600218356
376    Pooh  5.169275930 0.2571176159
377    Pooh  5.179060665 0.2541798610
378    Pooh  5.188845401 0.2512337223
379    Pooh  5.198630137 0.2482469298
380    Pooh  5.208414873 0.2452523471
381    Pooh  5.218199609 0.2422266041
382    Pooh  5.227984344 0.2391861305
383    Pooh  5.237769080 0.2361235612
384    Pooh  5.247553816 0.2330404109
385    Pooh  5.257338552 0.2299435401
386    Pooh  5.267123288 0.2268215491
387    Pooh  5.276908023 0.2236932781
388    Pooh  5.286692759 0.2205368583
389    Pooh  5.296477495 0.2173755233
390    Pooh  5.306262231 0.2141945270
391    Pooh  5.316046967 0.2110052448
392    Pooh  5.325831703 0.2078035337
393    Pooh  5.335616438 0.2045918646
394    Pooh  5.345401174 0.2013735567
395    Pooh  5.355185910 0.1981454433
396    Pooh  5.364970646 0.1949148786
397    Pooh  5.374755382 0.1916765833
398    Pooh  5.384540117 0.1884376771
399    Pooh  5.394324853 0.1851963276
400    Pooh  5.404109589 0.1819556727
401    Pooh  5.413894325 0.1787160594
402    Pooh  5.423679061 0.1754804086
403    Pooh  5.433463796 0.1722473994
404    Pooh  5.443248532 0.1690236011
405    Pooh  5.453033268 0.1658021056
406    Pooh  5.462818004 0.1625970397
407    Pooh  5.472602740 0.1593962375
408    Pooh  5.482387476 0.1562124899
409    Pooh  5.492172211 0.1530392009
410    Pooh  5.501956947 0.1498815999
411    Pooh  5.511741683 0.1467425289
412    Pooh  5.521526419 0.1436158112
413    Pooh  5.531311155 0.1405174931
414    Pooh  5.541095890 0.1374262749
415    Pooh  5.550880626 0.1343750237
416    Pooh  5.560665362 0.1313326247
417    Pooh  5.570450098 0.1283256347
418    Pooh  5.580234834 0.1253379882
419    Pooh  5.590019569 0.1223793569
420    Pooh  5.599804305 0.1194520689
421    Pooh  5.609589041 0.1165456765
422    Pooh  5.619373777 0.1136839912
423    Pooh  5.629158513 0.1108334826
424    Pooh  5.638943249 0.1080422516
425    Pooh  5.648727984 0.1052635020
426    Pooh  5.658512720 0.1025346781
427    Pooh  5.668297456 0.0998319587
428    Pooh  5.678082192 0.0971683964
429    Pooh  5.687866928 0.0945455338
430    Pooh  5.697651663 0.0919498046
431    Pooh  5.707436399 0.0894101679
432    Pooh  5.717221135 0.0868845543
433    Pooh  5.727005871 0.0844310471
434    Pooh  5.736790607 0.0819923005
435    Pooh  5.746575342 0.0796125968
436    Pooh  5.756360078 0.0772629766
437    Pooh  5.766144814 0.0749584815
438    Pooh  5.775929550 0.0726997811
439    Pooh  5.785714286 0.0704716106
440    Pooh  5.795499022 0.0683051654
441    Pooh  5.805283757 0.0661541515
442    Pooh  5.815068493 0.0640808488
443    Pooh  5.824853229 0.0620231455
444    Pooh  5.834637965 0.0600278398
445    Pooh  5.844422701 0.0580637436
446    Pooh  5.854207436 0.0561464615
447    Pooh  5.863992172 0.0542758609
448    Pooh  5.873776908 0.0524363813
449    Pooh  5.883561644 0.0506587779
450    Pooh  5.893346380 0.0488966436
451    Pooh  5.903131115 0.0472111750
452    Pooh  5.912915851 0.0455408619
453    Pooh  5.922700587 0.0439311707
454    Pooh  5.932485323 0.0423513576
455    Pooh  5.942270059 0.0408163616
456    Pooh  5.952054795 0.0393254258
457    Pooh  5.961839530 0.0378638636
458    Pooh  5.971624266 0.0364599084
459    Pooh  5.981409002 0.0350703550
460    Pooh  5.991193738 0.0337512373
461    Pooh  6.000978474 0.0324458656
462    Pooh  6.010763209 0.0311954780
463    Pooh  6.020547945 0.0299718534
464    Pooh  6.030332681 0.0287883733
465    Pooh  6.040117417 0.0276438829
466    Pooh  6.049902153 0.0265253857
467    Pooh  6.059686888 0.0254572658
468    Pooh  6.069471624 0.0244017403
469    Pooh  6.079256360 0.0234071029
470    Pooh  6.089041096 0.0224242149
471    Pooh  6.098825832 0.0214883240
472    Pooh  6.108610568 0.0205750572
473    Pooh  6.118395303 0.0196957265
474    Pooh  6.128180039 0.0188490009
475    Pooh  6.137964775 0.0180240122
476    Pooh  6.147749511 0.0172407068
477    Pooh  6.157534247 0.0164678223
478    Pooh  6.167318982 0.0157447960
479    Pooh  6.177103718 0.0150312927
480    Pooh  6.186888454 0.0143558813
481    Pooh  6.196673190 0.0136986235
482    Pooh  6.206457926 0.0130685960
483    Pooh  6.216242661 0.0124644733
484    Pooh  6.226027397 0.0118776204
485    Pooh  6.235812133 0.0113235635
486    Pooh  6.245596869 0.0107777057
487    Pooh  6.255381605 0.0102707008
488    Pooh  6.265166341 0.0097710468
489    Pooh  6.274951076 0.0093007967
490    Pooh  6.284735812 0.0088444293
491    Pooh  6.294520548 0.0084088860
492    Pooh  6.304305284 0.0079929709
493    Pooh  6.314090020 0.0075901414
494    Pooh  6.323874755 0.0072119361
495    Pooh  6.333659491 0.0068398870
496    Pooh  6.343444227 0.0064967480
497    Pooh  6.353228963 0.0061590304
498    Pooh  6.363013699 0.0058429978
499    Pooh  6.372798434 0.0055371137
500    Pooh  6.382583170 0.0052464523
501    Pooh  6.392367906 0.0049700147
502    Pooh  6.402152642 0.0047030597
503    Pooh  6.411937378 0.0044537954
504    Pooh  6.421722114 0.0042089537
505    Pooh  6.431506849 0.0039847047
506    Pooh  6.441291585 0.0037642847
507    Pooh  6.451076321 0.0035591803
508    Pooh  6.460861057 0.0033611835
509    Pooh  6.470645793 0.0031738481
510    Pooh  6.480430528 0.0029963917
511    Pooh  6.490215264 0.0028255213
512    Pooh  6.500000000 0.0026668365
513  Leitao -0.500000000 0.0008897526
514  Leitao -0.488258317 0.0009544630
515  Leitao -0.476516634 0.0010238666
516  Leitao -0.464774951 0.0010956167
517  Leitao -0.453033268 0.0011750389
518  Leitao -0.441291585 0.0012572425
519  Leitao -0.429549902 0.0013450091
520  Leitao -0.417808219 0.0014388143
521  Leitao -0.406066536 0.0015356387
522  Leitao -0.394324853 0.0016422755
523  Leitao -0.382583170 0.0017524485
524  Leitao -0.370841487 0.0018696937
525  Leitao -0.359099804 0.0019945696
526  Leitao -0.347358121 0.0021232606
527  Leitao -0.335616438 0.0022642757
528  Leitao -0.323874755 0.0024097049
529  Leitao -0.312133072 0.0025639622
530  Leitao -0.300391389 0.0027276856
531  Leitao -0.288649706 0.0028961422
532  Leitao -0.276908023 0.0030797926
533  Leitao -0.265166341 0.0032688508
534  Leitao -0.253424658 0.0034687247
535  Leitao -0.241682975 0.0036801230
536  Leitao -0.229941292 0.0038972833
537  Leitao -0.218199609 0.0041328232
538  Leitao -0.206457926 0.0043748630
539  Leitao -0.194716243 0.0046299024
540  Leitao -0.182974560 0.0048987037
541  Leitao -0.171232877 0.0051743860
542  Leitao -0.159491194 0.0054718734
543  Leitao -0.147749511 0.0057770216
544  Leitao -0.136007828 0.0060974913
545  Leitao -0.124266145 0.0064340733
546  Leitao -0.112524462 0.0067787116
547  Leitao -0.100782779 0.0071487092
548  Leitao -0.089041096 0.0075275563
549  Leitao -0.077299413 0.0079241022
550  Leitao -0.065557730 0.0083391347
551  Leitao -0.053816047 0.0087634104
552  Leitao -0.042074364 0.0092165832
553  Leitao -0.030332681 0.0096797707
554  Leitao -0.018590998 0.0101629874
555  Leitao -0.006849315 0.0106669798
556  Leitao  0.004892368 0.0111813601
557  Leitao  0.016634051 0.0117279892
558  Leitao  0.028375734 0.0122857162
559  Leitao  0.040117417 0.0128656389
560  Leitao  0.051859100 0.0134684221
561  Leitao  0.063600783 0.0140826354
562  Leitao  0.075342466 0.0147320826
563  Leitao  0.087084149 0.0153935687
564  Leitao  0.098825832 0.0160791327
565  Leitao  0.110567515 0.0167893193
566  Leitao  0.122309198 0.0175118172
567  Leitao  0.134050881 0.0182719952
568  Leitao  0.145792564 0.0190449566
569  Leitao  0.157534247 0.0198434851
570  Leitao  0.169275930 0.0206679747
571  Leitao  0.181017613 0.0215054449
572  Leitao  0.192759295 0.0223823657
573  Leitao  0.204500978 0.0232725783
574  Leitao  0.216242661 0.0241893746
575  Leitao  0.227984344 0.0251329815
576  Leitao  0.239726027 0.0260899935
577  Leitao  0.251467710 0.0270874774
578  Leitao  0.263209393 0.0280985099
579  Leitao  0.274951076 0.0291366396
580  Leitao  0.286692759 0.0302019297
581  Leitao  0.298434442 0.0312808001
582  Leitao  0.310176125 0.0324004324
583  Leitao  0.321917808 0.0335336366
584  Leitao  0.333659491 0.0346939844
585  Leitao  0.345401174 0.0358814054
586  Leitao  0.357142857 0.0370823630
587  Leitao  0.368884540 0.0383237752
588  Leitao  0.380626223 0.0395786077
589  Leitao  0.392367906 0.0408602810
590  Leitao  0.404109589 0.0421686494
591  Leitao  0.415851272 0.0434903653
592  Leitao  0.427592955 0.0448518947
593  Leitao  0.439334638 0.0462266210
594  Leitao  0.451076321 0.0476277407
595  Leitao  0.462818004 0.0490551205
596  Leitao  0.474559687 0.0504956303
597  Leitao  0.486301370 0.0519753721
598  Leitao  0.498043053 0.0534681590
599  Leitao  0.509784736 0.0549870364
600  Leitao  0.521526419 0.0565319950
601  Leitao  0.533268102 0.0580899943
602  Leitao  0.545009785 0.0596872056
603  Leitao  0.556751468 0.0612975595
604  Leitao  0.568493151 0.0629341988
605  Leitao  0.580234834 0.0645973658
606  Leitao  0.591976517 0.0662737966
607  Leitao  0.603718200 0.0679905517
608  Leitao  0.615459883 0.0697209891
609  Leitao  0.627201566 0.0714787914
610  Leitao  0.638943249 0.0732645807
611  Leitao  0.650684932 0.0750643636
612  Leitao  0.662426614 0.0769072896
613  Leitao  0.674168297 0.0787650661
614  Leitao  0.685909980 0.0806525440
615  Leitao  0.697651663 0.0825708364
616  Leitao  0.709393346 0.0845045361
617  Leitao  0.721135029 0.0864864012
618  Leitao  0.732876712 0.0884850638
619  Leitao  0.744618395 0.0905173212
620  Leitao  0.756360078 0.0925848508
621  Leitao  0.768101761 0.0946700165
622  Leitao  0.779843444 0.0968108985
623  Leitao  0.791585127 0.0989713852
624  Leitao  0.803326810 0.1011710814
625  Leitao  0.815068493 0.1034122421
626  Leitao  0.826810176 0.1056741351
627  Leitao  0.838551859 0.1080018808
628  Leitao  0.850293542 0.1103528820
629  Leitao  0.862035225 0.1127503943
630  Leitao  0.873776908 0.1151971853
631  Leitao  0.885518591 0.1176686156
632  Leitao  0.897260274 0.1202183263
633  Leitao  0.909001957 0.1227956447
634  Leitao  0.920743640 0.1254281784
635  Leitao  0.932485323 0.1281190511
636  Leitao  0.944227006 0.1308390933
637  Leitao  0.955968689 0.1336514306
638  Leitao  0.967710372 0.1364961463
639  Leitao  0.979452055 0.1394056188
640  Leitao  0.991193738 0.1423830760
641  Leitao  1.002935421 0.1453945254
642  Leitao  1.014677104 0.1485127376
643  Leitao  1.026418787 0.1516680937
644  Leitao  1.038160470 0.1548977374
645  Leitao  1.049902153 0.1582046596
646  Leitao  1.061643836 0.1615502212
647  Leitao  1.073385519 0.1650159356
648  Leitao  1.085127202 0.1685230051
649  Leitao  1.096868885 0.1721127848
650  Leitao  1.108610568 0.1757876189
651  Leitao  1.120352250 0.1795049801
652  Leitao  1.132093933 0.1833529676
653  Leitao  1.143835616 0.1872453300
654  Leitao  1.155577299 0.1912264421
655  Leitao  1.167318982 0.1952975547
656  Leitao  1.179060665 0.1994136675
657  Leitao  1.190802348 0.2036659614
658  Leitao  1.202544031 0.2079637865
659  Leitao  1.214285714 0.2123526741
660  Leitao  1.226027397 0.2168323416
661  Leitao  1.237769080 0.2213573990
662  Leitao  1.249510763 0.2260173015
663  Leitao  1.261252446 0.2307213907
664  Leitao  1.272994129 0.2355138532
665  Leitao  1.284735812 0.2403924895
666  Leitao  1.296477495 0.2453142129
667  Leitao  1.308219178 0.2503608378
668  Leitao  1.319960861 0.2554472772
669  Leitao  1.331702544 0.2606133456
670  Leitao  1.343444227 0.2658546519
671  Leitao  1.355185910 0.2711335771
672  Leitao  1.366927593 0.2765176238
673  Leitao  1.378669276 0.2819337460
674  Leitao  1.390410959 0.2874140196
675  Leitao  1.402152642 0.2929517428
676  Leitao  1.413894325 0.2985181909
677  Leitao  1.425636008 0.3041596146
678  Leitao  1.437377691 0.3098219231
679  Leitao  1.449119374 0.3155260013
680  Leitao  1.460861057 0.3212629105
681  Leitao  1.472602740 0.3270162352
682  Leitao  1.484344423 0.3328043589
683  Leitao  1.496086106 0.3385989399
684  Leitao  1.507827789 0.3444064354
685  Leitao  1.519569472 0.3502159553
686  Leitao  1.531311155 0.3560264873
687  Leitao  1.543052838 0.3618228946
688  Leitao  1.554794521 0.3676086293
689  Leitao  1.566536204 0.3733730190
690  Leitao  1.578277886 0.3791037166
691  Leitao  1.590019569 0.3848175682
692  Leitao  1.601761252 0.3904618472
693  Leitao  1.613502935 0.3960764601
694  Leitao  1.625244618 0.4016317405
695  Leitao  1.636986301 0.4071145636
696  Leitao  1.648727984 0.4125611580
697  Leitao  1.660469667 0.4178792535
698  Leitao  1.672211350 0.4231479174
699  Leitao  1.683953033 0.4283177179
700  Leitao  1.695694716 0.4333755654
701  Leitao  1.707436399 0.4383774364
702  Leitao  1.719178082 0.4431920532
703  Leitao  1.730919765 0.4479379630
704  Leitao  1.742661448 0.4525464589
705  Leitao  1.754403131 0.4570053671
706  Leitao  1.766144814 0.4613894815
707  Leitao  1.777886497 0.4655317054
708  Leitao  1.789628180 0.4695877605
709  Leitao  1.801369863 0.4734714782
710  Leitao  1.813111546 0.4771724676
711  Leitao  1.824853229 0.4807820928
712  Leitao  1.836594912 0.4841031979
713  Leitao  1.848336595 0.4873237470
714  Leitao  1.860078278 0.4903431841
715  Leitao  1.871819961 0.4931536708
716  Leitao  1.883561644 0.4958596822
717  Leitao  1.895303327 0.4982420007
718  Leitao  1.907045010 0.5005135251
719  Leitao  1.918786693 0.5025634612
720  Leitao  1.930528376 0.5043871171
721  Leitao  1.942270059 0.5060976331
722  Leitao  1.954011742 0.5074634030
723  Leitao  1.965753425 0.5087130679
724  Leitao  1.977495108 0.5097305226
725  Leitao  1.989236791 0.5105145783
726  Leitao  2.000978474 0.5111819345
727  Leitao  2.012720157 0.5114992082
728  Leitao  2.024461840 0.5117003919
729  Leitao  2.036203523 0.5116693957
730  Leitao  2.047945205 0.5114086131
731  Leitao  2.059686888 0.5110329373
732  Leitao  2.071428571 0.5103179149
733  Leitao  2.083170254 0.5094921189
734  Leitao  2.094911937 0.5084447754
735  Leitao  2.106653620 0.5071816527
736  Leitao  2.118395303 0.5058106404
737  Leitao  2.130136986 0.5041261587
738  Leitao  2.141878669 0.5023410717
739  Leitao  2.153620352 0.5003547741
740  Leitao  2.165362035 0.4981759339
741  Leitao  2.177103718 0.4959008223
742  Leitao  2.188845401 0.4933511310
743  Leitao  2.200587084 0.4907150264
744  Leitao  2.212328767 0.4879060952
745  Leitao  2.224070450 0.4849352113
746  Leitao  2.235812133 0.4818833511
747  Leitao  2.247553816 0.4786057027
748  Leitao  2.259295499 0.4752587327
749  Leitao  2.271037182 0.4717731196
750  Leitao  2.282778865 0.4681611012
751  Leitao  2.294520548 0.4644858802
752  Leitao  2.306262231 0.4606397884
753  Leitao  2.318003914 0.4567430617
754  Leitao  2.329745597 0.4527450649
755  Leitao  2.341487280 0.4486584937
756  Leitao  2.353228963 0.4445276352
757  Leitao  2.364970646 0.4402828880
758  Leitao  2.376712329 0.4360064309
759  Leitao  2.388454012 0.4316665543
760  Leitao  2.400195695 0.4272755303
761  Leitao  2.411937378 0.4228589327
762  Leitao  2.423679061 0.4183835421
763  Leitao  2.435420744 0.4138943293
764  Leitao  2.447162427 0.4093774719
765  Leitao  2.458904110 0.4048440453
766  Leitao  2.470645793 0.4003023342
767  Leitao  2.482387476 0.3957515688
768  Leitao  2.494129159 0.3912027510
769  Leitao  2.505870841 0.3866578284
770  Leitao  2.517612524 0.3821260792
771  Leitao  2.529354207 0.3776009169
772  Leitao  2.541095890 0.3731083893
773  Leitao  2.552837573 0.3686306669
774  Leitao  2.564579256 0.3641825546
775  Leitao  2.576320939 0.3597711516
776  Leitao  2.588062622 0.3553781033
777  Leitao  2.599804305 0.3510496119
778  Leitao  2.611545988 0.3467454145
779  Leitao  2.623287671 0.3424898054
780  Leitao  2.635029354 0.3382875576
781  Leitao  2.646771037 0.3341119904
782  Leitao  2.658512720 0.3300224725
783  Leitao  2.670254403 0.3259632643
784  Leitao  2.681996086 0.3219646758
785  Leitao  2.693737769 0.3180292331
786  Leitao  2.705479452 0.3141253632
787  Leitao  2.717221135 0.3103189561
788  Leitao  2.728962818 0.3065456214
789  Leitao  2.740704501 0.3028384314
790  Leitao  2.752446184 0.2991979376
791  Leitao  2.764187867 0.2955907919
792  Leitao  2.775929550 0.2920836604
793  Leitao  2.787671233 0.2886095964
794  Leitao  2.799412916 0.2852016673
795  Leitao  2.811154599 0.2818588641
796  Leitao  2.822896282 0.2785486238
797  Leitao  2.834637965 0.2753339397
798  Leitao  2.846379648 0.2721502190
799  Leitao  2.858121331 0.2690284251
800  Leitao  2.869863014 0.2659664821
801  Leitao  2.881604697 0.2629344646
802  Leitao  2.893346380 0.2599887476
803  Leitao  2.905088063 0.2570705462
804  Leitao  2.916829746 0.2542073761
805  Leitao  2.928571429 0.2513966039
806  Leitao  2.940313112 0.2486120308
807  Leitao  2.952054795 0.2459019867
808  Leitao  2.963796477 0.2432154150
809  Leitao  2.975538160 0.2405757882
810  Leitao  2.987279843 0.2379803812
811  Leitao  2.999021526 0.2354070842
812  Leitao  3.010763209 0.2328961172
813  Leitao  3.022504892 0.2304046418
814  Leitao  3.034246575 0.2279521493
815  Leitao  3.045988258 0.2255361985
816  Leitao  3.057729941 0.2231385185
817  Leitao  3.069471624 0.2207922253
818  Leitao  3.081213307 0.2184620097
819  Leitao  3.092954990 0.2161639491
820  Leitao  3.104696673 0.2138961398
821  Leitao  3.116438356 0.2116434562
822  Leitao  3.128180039 0.2094336131
823  Leitao  3.139921722 0.2072373152
824  Leitao  3.151663405 0.2050681077
825  Leitao  3.163405088 0.2029247452
826  Leitao  3.175146771 0.2007943051
827  Leitao  3.186888454 0.1987011003
828  Leitao  3.198630137 0.1966199056
829  Leitao  3.210371820 0.1945627311
830  Leitao  3.222113503 0.1925289830
831  Leitao  3.233855186 0.1905069482
832  Leitao  3.245596869 0.1885194565
833  Leitao  3.257338552 0.1865433705
834  Leitao  3.269080235 0.1845900960
835  Leitao  3.280821918 0.1826595770
836  Leitao  3.292563601 0.1807404357
837  Leitao  3.304305284 0.1788555540
838  Leitao  3.316046967 0.1769821928
839  Leitao  3.327788650 0.1751318726
840  Leitao  3.339530333 0.1733048876
841  Leitao  3.351272016 0.1714895701
842  Leitao  3.363013699 0.1697097976
843  Leitao  3.374755382 0.1679420751
844  Leitao  3.386497065 0.1661984525
845  Leitao  3.398238748 0.1644793492
846  Leitao  3.409980431 0.1627725057
847  Leitao  3.421722114 0.1611030570
848  Leitao  3.433463796 0.1594462621
849  Leitao  3.445205479 0.1578147745
850  Leitao  3.456947162 0.1562089158
851  Leitao  3.468688845 0.1546158715
852  Leitao  3.480430528 0.1530616373
853  Leitao  3.492172211 0.1515204140
854  Leitao  3.503913894 0.1500052122
855  Leitao  3.515655577 0.1485160670
856  Leitao  3.527397260 0.1470399502
857  Leitao  3.539138943 0.1456027797
858  Leitao  3.550880626 0.1441784753
859  Leitao  3.562622309 0.1427799032
860  Leitao  3.574363992 0.1414066833
861  Leitao  3.586105675 0.1400461395
862  Leitao  3.597847358 0.1387228220
863  Leitao  3.609589041 0.1374115673
864  Leitao  3.621330724 0.1361244378
865  Leitao  3.633072407 0.1348605836
866  Leitao  3.644814090 0.1336083670
867  Leitao  3.656555773 0.1323895548
868  Leitao  3.668297456 0.1311812995
869  Leitao  3.680039139 0.1299941581
870  Leitao  3.691780822 0.1288268324
871  Leitao  3.703522505 0.1276694146
872  Leitao  3.715264188 0.1265395749
873  Leitao  3.727005871 0.1254181530
874  Leitao  3.738747554 0.1243135667
875  Leitao  3.750489237 0.1232241608
876  Leitao  3.762230920 0.1221423451
877  Leitao  3.773972603 0.1210806836
878  Leitao  3.785714286 0.1200248323
879  Leitao  3.797455969 0.1189806012
880  Leitao  3.809197652 0.1179461218
881  Leitao  3.820939335 0.1169165181
882  Leitao  3.832681018 0.1158986890
883  Leitao  3.844422701 0.1148838270
884  Leitao  3.856164384 0.1138748995
885  Leitao  3.867906067 0.1128699984
886  Leitao  3.879647750 0.1118671106
887  Leitao  3.891389432 0.1108674414
888  Leitao  3.903131115 0.1098679285
889  Leitao  3.914872798 0.1088687281
890  Leitao  3.926614481 0.1078680737
891  Leitao  3.938356164 0.1068666921
892  Leitao  3.950097847 0.1058606072
893  Leitao  3.961839530 0.1048521650
894  Leitao  3.973581213 0.1038390080
895  Leitao  3.985322896 0.1028196758
896  Leitao  3.997064579 0.1017972559
897  Leitao  4.008806262 0.1007635814
898  Leitao  4.020547945 0.0997255644
899  Leitao  4.032289628 0.0986788622
900  Leitao  4.044031311 0.0976224497
901  Leitao  4.055772994 0.0965611820
902  Leitao  4.067514677 0.0954840592
903  Leitao  4.079256360 0.0944013082
904  Leitao  4.090998043 0.0933073003
905  Leitao  4.102739726 0.0922015269
906  Leitao  4.114481409 0.0910898707
907  Leitao  4.126223092 0.0899600741
908  Leitao  4.137964775 0.0888241576
909  Leitao  4.149706458 0.0876760012
910  Leitao  4.161448141 0.0865156394
911  Leitao  4.173189824 0.0853491750
912  Leitao  4.184931507 0.0841647209
913  Leitao  4.196673190 0.0829744627
914  Leitao  4.208414873 0.0817725964
915  Leitao  4.220156556 0.0805596735
916  Leitao  4.231898239 0.0793412221
917  Leitao  4.243639922 0.0781072498
918  Leitao  4.255381605 0.0768685328
919  Leitao  4.267123288 0.0756203263
920  Leitao  4.278864971 0.0743636257
921  Leitao  4.290606654 0.0731026779
922  Leitao  4.302348337 0.0718306697
923  Leitao  4.314090020 0.0705555912
924  Leitao  4.325831703 0.0692743720
925  Leitao  4.337573386 0.0679883434
926  Leitao  4.349315068 0.0666999102
927  Leitao  4.361056751 0.0654063858
928  Leitao  4.372798434 0.0641119066
929  Leitao  4.384540117 0.0628155180
930  Leitao  4.396281800 0.0615187584
931  Leitao  4.408023483 0.0602218134
932  Leitao  4.419765166 0.0589266787
933  Leitao  4.431506849 0.0576329483
934  Leitao  4.443248532 0.0563420267
935  Leitao  4.454990215 0.0550555250
936  Leitao  4.466731898 0.0537712332
937  Leitao  4.478473581 0.0524959813
938  Leitao  4.490215264 0.0512245366
939  Leitao  4.501956947 0.0499607065
940  Leitao  4.513698630 0.0487060477
941  Leitao  4.525440313 0.0474559746
942  Leitao  4.537181996 0.0462219285
943  Leitao  4.548923679 0.0449939540
944  Leitao  4.560665362 0.0437781228
945  Leitao  4.572407045 0.0425758286
946  Leitao  4.584148728 0.0413803029
947  Leitao  4.595890411 0.0402070622
948  Leitao  4.607632094 0.0390418686
949  Leitao  4.619373777 0.0378927692
950  Leitao  4.631115460 0.0367609125
951  Leitao  4.642857143 0.0356376771
952  Leitao  4.654598826 0.0345418861
953  Leitao  4.666340509 0.0334557202
954  Leitao  4.678082192 0.0323888046
955  Leitao  4.689823875 0.0313419903
956  Leitao  4.701565558 0.0303052266
957  Leitao  4.713307241 0.0292997331
958  Leitao  4.725048924 0.0283049823
959  Leitao  4.736790607 0.0273317170
960  Leitao  4.748532290 0.0263804688
961  Leitao  4.760273973 0.0254402291
962  Leitao  4.772015656 0.0245336525
963  Leitao  4.783757339 0.0236384572
964  Leitao  4.795499022 0.0227660241
965  Leitao  4.807240705 0.0219165710
966  Leitao  4.818982387 0.0210786079
967  Leitao  4.830724070 0.0202752920
968  Leitao  4.842465753 0.0194835366
969  Leitao  4.854207436 0.0187149020
970  Leitao  4.865949119 0.0179693198
971  Leitao  4.877690802 0.0172352638
972  Leitao  4.889432485 0.0165355544
973  Leitao  4.901174168 0.0158471761
974  Leitao  4.912915851 0.0151814600
975  Leitao  4.924657534 0.0145380955
976  Leitao  4.936399217 0.0139059068
977  Leitao  4.948140900 0.0133066757
978  Leitao  4.959882583 0.0127182091
979  Leitao  4.971624266 0.0121512714
980  Leitao  4.983365949 0.0116053633
981  Leitao  4.995107632 0.0110699700
982  Leitao  5.006849315 0.0105652960
983  Leitao  5.018590998 0.0100705650
984  Leitao  5.030332681 0.0095957196
985  Leitao  5.042074364 0.0091401282
986  Leitao  5.053816047 0.0086941638
987  Leitao  5.065557730 0.0082760849
988  Leitao  5.077299413 0.0078669566
989  Leitao  5.089041096 0.0074757293
990  Leitao  5.100782779 0.0071016935
991  Leitao  5.112524462 0.0067362534
992  Leitao  5.124266145 0.0063955141
993  Leitao  5.136007828 0.0060626414
994  Leitao  5.147749511 0.0057455019
995  Leitao  5.159491194 0.0054433570
996  Leitao  5.171232877 0.0051487093
997  Leitao  5.182974560 0.0048754448
998  Leitao  5.194716243 0.0046089403
999  Leitao  5.206457926 0.0043559560
1000 Leitao  5.218199609 0.0041157639
1001 Leitao  5.229941292 0.0038819680
1002 Leitao  5.241682975 0.0036662852
1003 Leitao  5.253424658 0.0034562887
1004 Leitao  5.265166341 0.0032576647
1005 Leitao  5.276908023 0.0030697269
1006 Leitao  5.288649706 0.0028871322
1007 Leitao  5.300391389 0.0027195657
1008 Leitao  5.312133072 0.0025566853
1009 Leitao  5.323874755 0.0024031774
1010 Leitao  5.335616438 0.0022584179
1011 Leitao  5.347358121 0.0021180326
1012 Leitao  5.359099804 0.0019898700
1013 Leitao  5.370841487 0.0018654941
1014 Leitao  5.382583170 0.0017486916
1015 Leitao  5.394324853 0.0016389131
1016 Leitao  5.406066536 0.0015326466
1017 Leitao  5.417808219 0.0014361315
1018 Leitao  5.429549902 0.0013426186
1019 Leitao  5.441291585 0.0012551099
1020 Leitao  5.453033268 0.0011731353
1021 Leitao  5.464774951 0.0010939278
1022 Leitao  5.476516634 0.0010223561
1023 Leitao  5.488258317 0.0009531208
1024 Leitao  5.500000000 0.0008885585
1025 Tigrao  1.500000000 0.0017784901
1026 Tigrao  1.509784736 0.0018843400
1027 Tigrao  1.519569472 0.0019983221
1028 Tigrao  1.529354207 0.0021166999
1029 Tigrao  1.539138943 0.0022416712
1030 Tigrao  1.548923679 0.0023737588
1031 Tigrao  1.558708415 0.0025105907
1032 Tigrao  1.568493151 0.0026576467
1033 Tigrao  1.578277886 0.0028072587
1034 Tigrao  1.588062622 0.0029706192
1035 Tigrao  1.597847358 0.0031369327
1036 Tigrao  1.607632094 0.0033150588
1037 Tigrao  1.617416830 0.0034995174
1038 Tigrao  1.627201566 0.0036934749
1039 Tigrao  1.636986301 0.0038975999
1040 Tigrao  1.646771037 0.0041085032
1041 Tigrao  1.656555773 0.0043338926
1042 Tigrao  1.666340509 0.0045629036
1043 Tigrao  1.676125245 0.0048112308
1044 Tigrao  1.685909980 0.0050636720
1045 Tigrao  1.695694716 0.0053325690
1046 Tigrao  1.705479452 0.0056102126
1047 Tigrao  1.715264188 0.0059009761
1048 Tigrao  1.725048924 0.0062056621
1049 Tigrao  1.734833659 0.0065196298
1050 Tigrao  1.744618395 0.0068532613
1051 Tigrao  1.754403131 0.0071918087
1052 Tigrao  1.764187867 0.0075563463
1053 Tigrao  1.773972603 0.0079263702
1054 Tigrao  1.783757339 0.0083183395
1055 Tigrao  1.793542074 0.0087218687
1056 Tigrao  1.803326810 0.0091427378
1057 Tigrao  1.813111546 0.0095818410
1058 Tigrao  1.822896282 0.0100331002
1059 Tigrao  1.832681018 0.0105098770
1060 Tigrao  1.842465753 0.0109930333
1061 Tigrao  1.852250489 0.0115096044
1062 Tigrao  1.862035225 0.0120331631
1063 Tigrao  1.871819961 0.0125846717
1064 Tigrao  1.881604697 0.0131507634
1065 Tigrao  1.891389432 0.0137387298
1066 Tigrao  1.901174168 0.0143494776
1067 Tigrao  1.910958904 0.0149754128
1068 Tigrao  1.920743640 0.0156329182
1069 Tigrao  1.930528376 0.0162983162
1070 Tigrao  1.940313112 0.0170046455
1071 Tigrao  1.950097847 0.0177194481
1072 Tigrao  1.959882583 0.0184681437
1073 Tigrao  1.969667319 0.0192343428
1074 Tigrao  1.979452055 0.0200267971
1075 Tigrao  1.989236791 0.0208463109
1076 Tigrao  1.999021526 0.0216838645
1077 Tigrao  2.008806262 0.0225585212
1078 Tigrao  2.018590998 0.0234424537
1079 Tigrao  2.028375734 0.0243739743
1080 Tigrao  2.038160470 0.0253152384
1081 Tigrao  2.047945205 0.0262954761
1082 Tigrao  2.057729941 0.0272956165
1083 Tigrao  2.067514677 0.0283256108
1084 Tigrao  2.077299413 0.0293860231
1085 Tigrao  2.087084149 0.0304667141
1086 Tigrao  2.096868885 0.0315886278
1087 Tigrao  2.106653620 0.0327208473
1088 Tigrao  2.116438356 0.0339053094
1089 Tigrao  2.126223092 0.0351003376
1090 Tigrao  2.136007828 0.0363376304
1091 Tigrao  2.145792564 0.0375962370
1092 Tigrao  2.155577299 0.0388868141
1093 Tigrao  2.165362035 0.0402095489
1094 Tigrao  2.175146771 0.0415537220
1095 Tigrao  2.184931507 0.0429409023
1096 Tigrao  2.194716243 0.0443388343
1097 Tigrao  2.204500978 0.0457905329
1098 Tigrao  2.214285714 0.0472529544
1099 Tigrao  2.224070450 0.0487582674
1100 Tigrao  2.233855186 0.0502848994
1101 Tigrao  2.243639922 0.0518435101
1102 Tigrao  2.253424658 0.0534338090
1103 Tigrao  2.263209393 0.0550452334
1104 Tigrao  2.272994129 0.0566983863
1105 Tigrao  2.282778865 0.0583619714
1106 Tigrao  2.292563601 0.0600768943
1107 Tigrao  2.302348337 0.0618018864
1108 Tigrao  2.312133072 0.0635671557
1109 Tigrao  2.321917808 0.0653521005
1110 Tigrao  2.331702544 0.0671665583
1111 Tigrao  2.341487280 0.0690097372
1112 Tigrao  2.351272016 0.0708720634
1113 Tigrao  2.361056751 0.0727715026
1114 Tigrao  2.370841487 0.0746802200
1115 Tigrao  2.380626223 0.0766337016
1116 Tigrao  2.390410959 0.0785957826
1117 Tigrao  2.400195695 0.0805922606
1118 Tigrao  2.409980431 0.0826051778
1119 Tigrao  2.419765166 0.0846427537
1120 Tigrao  2.429549902 0.0867037782
1121 Tigrao  2.439334638 0.0887804350
1122 Tigrao  2.449119374 0.0908866592
1123 Tigrao  2.458904110 0.0930002753
1124 Tigrao  2.468688845 0.0951486393
1125 Tigrao  2.478473581 0.0973034960
1126 Tigrao  2.488258317 0.0994843238
1127 Tigrao  2.498043053 0.1016772015
1128 Tigrao  2.507827789 0.1038881542
1129 Tigrao  2.517612524 0.1061157573
1130 Tigrao  2.527397260 0.1083544608
1131 Tigrao  2.537181996 0.1106134537
1132 Tigrao  2.546966732 0.1128775191
1133 Tigrao  2.556751468 0.1151645641
1134 Tigrao  2.566536204 0.1174557345
1135 Tigrao  2.576320939 0.1197634062
1136 Tigrao  2.586105675 0.1220784083
1137 Tigrao  2.595890411 0.1244044059
1138 Tigrao  2.605675147 0.1267400638
1139 Tigrao  2.615459883 0.1290821619
1140 Tigrao  2.625244618 0.1314354395
1141 Tigrao  2.635029354 0.1337915120
1142 Tigrao  2.644814090 0.1361595554
1143 Tigrao  2.654598826 0.1385296214
1144 Tigrao  2.664383562 0.1409077781
1145 Tigrao  2.674168297 0.1432893046
1146 Tigrao  2.683953033 0.1456758858
1147 Tigrao  2.693737769 0.1480666226
1148 Tigrao  2.703522505 0.1504601298
1149 Tigrao  2.713307241 0.1528581479
1150 Tigrao  2.723091977 0.1552572938
1151 Tigrao  2.732876712 0.1576610217
1152 Tigrao  2.742661448 0.1600655042
1153 Tigrao  2.752446184 0.1624730053
1154 Tigrao  2.762230920 0.1648817978
1155 Tigrao  2.772015656 0.1672925274
1156 Tigrao  2.781800391 0.1697050336
1157 Tigrao  2.791585127 0.1721187240
1158 Tigrao  2.801369863 0.1745347998
1159 Tigrao  2.811154599 0.1769514719
1160 Tigrao  2.820939335 0.1793714427
1161 Tigrao  2.830724070 0.1817921971
1162 Tigrao  2.840508806 0.1842160858
1163 Tigrao  2.850293542 0.1866419109
1164 Tigrao  2.860078278 0.1890706404
1165 Tigrao  2.869863014 0.1915030100
1166 Tigrao  2.879647750 0.1939378063
1167 Tigrao  2.889432485 0.1963786752
1168 Tigrao  2.899217221 0.1988210623
1169 Tigrao  2.909001957 0.2012728543
1170 Tigrao  2.918786693 0.2037269456
1171 Tigrao  2.928571429 0.2061902345
1172 Tigrao  2.938356164 0.2086590640
1173 Tigrao  2.948140900 0.2111362044
1174 Tigrao  2.957925636 0.2136232142
1175 Tigrao  2.967710372 0.2161168036
1176 Tigrao  2.977495108 0.2186258061
1177 Tigrao  2.987279843 0.2211386620
1178 Tigrao  2.997064579 0.2236737949
1179 Tigrao  3.006849315 0.2262140180
1180 Tigrao  3.016634051 0.2287746017
1181 Tigrao  3.026418787 0.2313466868
1182 Tigrao  3.036203523 0.2339360240
1183 Tigrao  3.045988258 0.2365446507
1184 Tigrao  3.055772994 0.2391661369
1185 Tigrao  3.065557730 0.2418161010
1186 Tigrao  3.075342466 0.2444731844
1187 Tigrao  3.085127202 0.2471693237
1188 Tigrao  3.094911937 0.2498739590
1189 Tigrao  3.104696673 0.2526125785
1190 Tigrao  3.114481409 0.2553695275
1191 Tigrao  3.124266145 0.2581539708
1192 Tigrao  3.134050881 0.2609678372
1193 Tigrao  3.143835616 0.2638013189
1194 Tigrao  3.153620352 0.2666764602
1195 Tigrao  3.163405088 0.2695620165
1196 Tigrao  3.173189824 0.2725024555
1197 Tigrao  3.182974560 0.2754543770
1198 Tigrao  3.192759295 0.2784522283
1199 Tigrao  3.202544031 0.2814739252
1200 Tigrao  3.212328767 0.2845313905
1201 Tigrao  3.222113503 0.2876257187
1202 Tigrao  3.231898239 0.2907446224
1203 Tigrao  3.241682975 0.2939137965
1204 Tigrao  3.251467710 0.2970955384
1205 Tigrao  3.261252446 0.3003410479
1206 Tigrao  3.271037182 0.3035993943
1207 Tigrao  3.280821918 0.3069090876
1208 Tigrao  3.290606654 0.3102443994
1209 Tigrao  3.300391389 0.3136181388
1210 Tigrao  3.310176125 0.3170298690
1211 Tigrao  3.319960861 0.3204669262
1212 Tigrao  3.329745597 0.3239535566
1213 Tigrao  3.339530333 0.3274525802
1214 Tigrao  3.349315068 0.3310115668
1215 Tigrao  3.359099804 0.3345820105
1216 Tigrao  3.368884540 0.3381982818
1217 Tigrao  3.378669276 0.3418361183
1218 Tigrao  3.388454012 0.3455063025
1219 Tigrao  3.398238748 0.3492063877
1220 Tigrao  3.408023483 0.3529264067
1221 Tigrao  3.417808219 0.3566824611
1222 Tigrao  3.427592955 0.3604475243
1223 Tigrao  3.437377691 0.3642521275
1224 Tigrao  3.447162427 0.3680633964
1225 Tigrao  3.456947162 0.3719013280
1226 Tigrao  3.466731898 0.3757498282
1227 Tigrao  3.476516634 0.3796141813
1228 Tigrao  3.486301370 0.3834898374
1229 Tigrao  3.496086106 0.3873730288
1230 Tigrao  3.505870841 0.3912647035
1231 Tigrao  3.515655577 0.3951584990
1232 Tigrao  3.525440313 0.3990540457
1233 Tigrao  3.535225049 0.4029480558
1234 Tigrao  3.545009785 0.4068359199
1235 Tigrao  3.554794521 0.4107167231
1236 Tigrao  3.564579256 0.4145869351
1237 Tigrao  3.574363992 0.4184402827
1238 Tigrao  3.584148728 0.4222823874
1239 Tigrao  3.593933464 0.4260932985
1240 Tigrao  3.603718200 0.4298964113
1241 Tigrao  3.613502935 0.4336492793
1242 Tigrao  3.623287671 0.4373897874
1243 Tigrao  3.633072407 0.4410808557
1244 Tigrao  3.642857143 0.4447424893
1245 Tigrao  3.652641879 0.4483599709
1246 Tigrao  3.662426614 0.4519261336
1247 Tigrao  3.672211350 0.4554580835
1248 Tigrao  3.681996086 0.4589119874
1249 Tigrao  3.691780822 0.4623463797
1250 Tigrao  3.701565558 0.4656711867
1251 Tigrao  3.711350294 0.4689716870
1252 Tigrao  3.721135029 0.4721749604
1253 Tigrao  3.730919765 0.4753249057
1254 Tigrao  3.740704501 0.4783948588
1255 Tigrao  3.750489237 0.4813778940
1256 Tigrao  3.760273973 0.4843029839
1257 Tigrao  3.770058708 0.4871032097
1258 Tigrao  3.779843444 0.4898722194
1259 Tigrao  3.789628180 0.4924743383
1260 Tigrao  3.799412916 0.4950410139
1261 Tigrao  3.809197652 0.4974659164
1262 Tigrao  3.818982387 0.4998160266
1263 Tigrao  3.828767123 0.5020539484
1264 Tigrao  3.838551859 0.5041742032
1265 Tigrao  3.848336595 0.5062160133
1266 Tigrao  3.858121331 0.5080941911
1267 Tigrao  3.867906067 0.5099314608
1268 Tigrao  3.877690802 0.5115565269
1269 Tigrao  3.887475538 0.5131377842
1270 Tigrao  3.897260274 0.5145438071
1271 Tigrao  3.907045010 0.5158598273
1272 Tigrao  3.916829746 0.5170408436
1273 Tigrao  3.926614481 0.5180838309
1274 Tigrao  3.936399217 0.5190347990
1275 Tigrao  3.946183953 0.5197984639
1276 Tigrao  3.955968689 0.5205153028
1277 Tigrao  3.965753425 0.5209949240
1278 Tigrao  3.975538160 0.5214266871
1279 Tigrao  3.985322896 0.5216670178
1280 Tigrao  3.995107632 0.5218112163
1281 Tigrao  4.004892368 0.5218112163
1282 Tigrao  4.014677104 0.5216670178
1283 Tigrao  4.024461840 0.5214266871
1284 Tigrao  4.034246575 0.5209949240
1285 Tigrao  4.044031311 0.5205153028
1286 Tigrao  4.053816047 0.5197984639
1287 Tigrao  4.063600783 0.5190347990
1288 Tigrao  4.073385519 0.5180838309
1289 Tigrao  4.083170254 0.5170408436
1290 Tigrao  4.092954990 0.5158598273
1291 Tigrao  4.102739726 0.5145438071
1292 Tigrao  4.112524462 0.5131377842
1293 Tigrao  4.122309198 0.5115565269
1294 Tigrao  4.132093933 0.5099314608
1295 Tigrao  4.141878669 0.5080941911
1296 Tigrao  4.151663405 0.5062160133
1297 Tigrao  4.161448141 0.5041742032
1298 Tigrao  4.171232877 0.5020539484
1299 Tigrao  4.181017613 0.4998160266
1300 Tigrao  4.190802348 0.4974659164
1301 Tigrao  4.200587084 0.4950410139
1302 Tigrao  4.210371820 0.4924743383
1303 Tigrao  4.220156556 0.4898722194
1304 Tigrao  4.229941292 0.4871032097
1305 Tigrao  4.239726027 0.4843029839
1306 Tigrao  4.249510763 0.4813778940
1307 Tigrao  4.259295499 0.4783948588
1308 Tigrao  4.269080235 0.4753249057
1309 Tigrao  4.278864971 0.4721749604
1310 Tigrao  4.288649706 0.4689716870
1311 Tigrao  4.298434442 0.4656711867
1312 Tigrao  4.308219178 0.4623463797
1313 Tigrao  4.318003914 0.4589119874
1314 Tigrao  4.327788650 0.4554580835
1315 Tigrao  4.337573386 0.4519261336
1316 Tigrao  4.347358121 0.4483599709
1317 Tigrao  4.357142857 0.4447424893
1318 Tigrao  4.366927593 0.4410808557
1319 Tigrao  4.376712329 0.4373897874
1320 Tigrao  4.386497065 0.4336492793
1321 Tigrao  4.396281800 0.4298964113
1322 Tigrao  4.406066536 0.4260932985
1323 Tigrao  4.415851272 0.4222823874
1324 Tigrao  4.425636008 0.4184402827
1325 Tigrao  4.435420744 0.4145869351
1326 Tigrao  4.445205479 0.4107167231
1327 Tigrao  4.454990215 0.4068359199
1328 Tigrao  4.464774951 0.4029480558
1329 Tigrao  4.474559687 0.3990540457
1330 Tigrao  4.484344423 0.3951584990
1331 Tigrao  4.494129159 0.3912647035
1332 Tigrao  4.503913894 0.3873730288
1333 Tigrao  4.513698630 0.3834898374
1334 Tigrao  4.523483366 0.3796141813
1335 Tigrao  4.533268102 0.3757498282
1336 Tigrao  4.543052838 0.3719013280
1337 Tigrao  4.552837573 0.3680633964
1338 Tigrao  4.562622309 0.3642521275
1339 Tigrao  4.572407045 0.3604475243
1340 Tigrao  4.582191781 0.3566824611
1341 Tigrao  4.591976517 0.3529264067
1342 Tigrao  4.601761252 0.3492063877
1343 Tigrao  4.611545988 0.3455063025
1344 Tigrao  4.621330724 0.3418361183
1345 Tigrao  4.631115460 0.3381982818
1346 Tigrao  4.640900196 0.3345820105
1347 Tigrao  4.650684932 0.3310115668
1348 Tigrao  4.660469667 0.3274525802
1349 Tigrao  4.670254403 0.3239535566
1350 Tigrao  4.680039139 0.3204669262
1351 Tigrao  4.689823875 0.3170298690
1352 Tigrao  4.699608611 0.3136181388
1353 Tigrao  4.709393346 0.3102443994
1354 Tigrao  4.719178082 0.3069090876
1355 Tigrao  4.728962818 0.3035993943
1356 Tigrao  4.738747554 0.3003410479
1357 Tigrao  4.748532290 0.2970955384
1358 Tigrao  4.758317025 0.2939137965
1359 Tigrao  4.768101761 0.2907446224
1360 Tigrao  4.777886497 0.2876257187
1361 Tigrao  4.787671233 0.2845313905
1362 Tigrao  4.797455969 0.2814739252
1363 Tigrao  4.807240705 0.2784522283
1364 Tigrao  4.817025440 0.2754543770
1365 Tigrao  4.826810176 0.2725024555
1366 Tigrao  4.836594912 0.2695620165
1367 Tigrao  4.846379648 0.2666764602
1368 Tigrao  4.856164384 0.2638013189
1369 Tigrao  4.865949119 0.2609678372
1370 Tigrao  4.875733855 0.2581539708
1371 Tigrao  4.885518591 0.2553695275
1372 Tigrao  4.895303327 0.2526125785
1373 Tigrao  4.905088063 0.2498739590
1374 Tigrao  4.914872798 0.2471693237
1375 Tigrao  4.924657534 0.2444731844
1376 Tigrao  4.934442270 0.2418161010
1377 Tigrao  4.944227006 0.2391661369
1378 Tigrao  4.954011742 0.2365446507
1379 Tigrao  4.963796477 0.2339360240
1380 Tigrao  4.973581213 0.2313466868
1381 Tigrao  4.983365949 0.2287746017
1382 Tigrao  4.993150685 0.2262140180
1383 Tigrao  5.002935421 0.2236737949
1384 Tigrao  5.012720157 0.2211386620
1385 Tigrao  5.022504892 0.2186258061
1386 Tigrao  5.032289628 0.2161168036
1387 Tigrao  5.042074364 0.2136232142
1388 Tigrao  5.051859100 0.2111362044
1389 Tigrao  5.061643836 0.2086590640
1390 Tigrao  5.071428571 0.2061902345
1391 Tigrao  5.081213307 0.2037269456
1392 Tigrao  5.090998043 0.2012728543
1393 Tigrao  5.100782779 0.1988210623
1394 Tigrao  5.110567515 0.1963786752
1395 Tigrao  5.120352250 0.1939378063
1396 Tigrao  5.130136986 0.1915030100
1397 Tigrao  5.139921722 0.1890706404
1398 Tigrao  5.149706458 0.1866419109
1399 Tigrao  5.159491194 0.1842160858
1400 Tigrao  5.169275930 0.1817921971
1401 Tigrao  5.179060665 0.1793714427
1402 Tigrao  5.188845401 0.1769514719
1403 Tigrao  5.198630137 0.1745347998
1404 Tigrao  5.208414873 0.1721187240
1405 Tigrao  5.218199609 0.1697050336
1406 Tigrao  5.227984344 0.1672925274
1407 Tigrao  5.237769080 0.1648817978
1408 Tigrao  5.247553816 0.1624730053
1409 Tigrao  5.257338552 0.1600655042
1410 Tigrao  5.267123288 0.1576610217
1411 Tigrao  5.276908023 0.1552572938
1412 Tigrao  5.286692759 0.1528581479
1413 Tigrao  5.296477495 0.1504601298
1414 Tigrao  5.306262231 0.1480666226
1415 Tigrao  5.316046967 0.1456758858
1416 Tigrao  5.325831703 0.1432893046
1417 Tigrao  5.335616438 0.1409077781
1418 Tigrao  5.345401174 0.1385296214
1419 Tigrao  5.355185910 0.1361595554
1420 Tigrao  5.364970646 0.1337915120
1421 Tigrao  5.374755382 0.1314354395
1422 Tigrao  5.384540117 0.1290821619
1423 Tigrao  5.394324853 0.1267400638
1424 Tigrao  5.404109589 0.1244044059
1425 Tigrao  5.413894325 0.1220784083
1426 Tigrao  5.423679061 0.1197634062
1427 Tigrao  5.433463796 0.1174557345
1428 Tigrao  5.443248532 0.1151645641
1429 Tigrao  5.453033268 0.1128775191
1430 Tigrao  5.462818004 0.1106134537
1431 Tigrao  5.472602740 0.1083544608
1432 Tigrao  5.482387476 0.1061157573
1433 Tigrao  5.492172211 0.1038881542
1434 Tigrao  5.501956947 0.1016772015
1435 Tigrao  5.511741683 0.0994843238
1436 Tigrao  5.521526419 0.0973034960
1437 Tigrao  5.531311155 0.0951486393
1438 Tigrao  5.541095890 0.0930002753
1439 Tigrao  5.550880626 0.0908866592
1440 Tigrao  5.560665362 0.0887804350
1441 Tigrao  5.570450098 0.0867037782
1442 Tigrao  5.580234834 0.0846427537
1443 Tigrao  5.590019569 0.0826051778
1444 Tigrao  5.599804305 0.0805922606
1445 Tigrao  5.609589041 0.0785957826
1446 Tigrao  5.619373777 0.0766337016
1447 Tigrao  5.629158513 0.0746802200
1448 Tigrao  5.638943249 0.0727715026
1449 Tigrao  5.648727984 0.0708720634
1450 Tigrao  5.658512720 0.0690097372
1451 Tigrao  5.668297456 0.0671665583
1452 Tigrao  5.678082192 0.0653521005
1453 Tigrao  5.687866928 0.0635671557
1454 Tigrao  5.697651663 0.0618018864
1455 Tigrao  5.707436399 0.0600768943
1456 Tigrao  5.717221135 0.0583619714
1457 Tigrao  5.727005871 0.0566983863
1458 Tigrao  5.736790607 0.0550452334
1459 Tigrao  5.746575342 0.0534338090
1460 Tigrao  5.756360078 0.0518435101
1461 Tigrao  5.766144814 0.0502848994
1462 Tigrao  5.775929550 0.0487582674
1463 Tigrao  5.785714286 0.0472529544
1464 Tigrao  5.795499022 0.0457905329
1465 Tigrao  5.805283757 0.0443388343
1466 Tigrao  5.815068493 0.0429409023
1467 Tigrao  5.824853229 0.0415537220
1468 Tigrao  5.834637965 0.0402095489
1469 Tigrao  5.844422701 0.0388868141
1470 Tigrao  5.854207436 0.0375962370
1471 Tigrao  5.863992172 0.0363376304
1472 Tigrao  5.873776908 0.0351003376
1473 Tigrao  5.883561644 0.0339053094
1474 Tigrao  5.893346380 0.0327208473
1475 Tigrao  5.903131115 0.0315886278
1476 Tigrao  5.912915851 0.0304667141
1477 Tigrao  5.922700587 0.0293860231
1478 Tigrao  5.932485323 0.0283256108
1479 Tigrao  5.942270059 0.0272956165
1480 Tigrao  5.952054795 0.0262954761
1481 Tigrao  5.961839530 0.0253152384
1482 Tigrao  5.971624266 0.0243739743
1483 Tigrao  5.981409002 0.0234424537
1484 Tigrao  5.991193738 0.0225585212
1485 Tigrao  6.000978474 0.0216838645
1486 Tigrao  6.010763209 0.0208463109
1487 Tigrao  6.020547945 0.0200267971
1488 Tigrao  6.030332681 0.0192343428
1489 Tigrao  6.040117417 0.0184681437
1490 Tigrao  6.049902153 0.0177194481
1491 Tigrao  6.059686888 0.0170046455
1492 Tigrao  6.069471624 0.0162983162
1493 Tigrao  6.079256360 0.0156329182
1494 Tigrao  6.089041096 0.0149754128
1495 Tigrao  6.098825832 0.0143494776
1496 Tigrao  6.108610568 0.0137387298
1497 Tigrao  6.118395303 0.0131507634
1498 Tigrao  6.128180039 0.0125846717
1499 Tigrao  6.137964775 0.0120331631
1500 Tigrao  6.147749511 0.0115096044
1501 Tigrao  6.157534247 0.0109930333
1502 Tigrao  6.167318982 0.0105098770
1503 Tigrao  6.177103718 0.0100331002
1504 Tigrao  6.186888454 0.0095818410
1505 Tigrao  6.196673190 0.0091427378
1506 Tigrao  6.206457926 0.0087218687
1507 Tigrao  6.216242661 0.0083183395
1508 Tigrao  6.226027397 0.0079263702
1509 Tigrao  6.235812133 0.0075563463
1510 Tigrao  6.245596869 0.0071918087
1511 Tigrao  6.255381605 0.0068532613
1512 Tigrao  6.265166341 0.0065196298
1513 Tigrao  6.274951076 0.0062056621
1514 Tigrao  6.284735812 0.0059009761
1515 Tigrao  6.294520548 0.0056102126
1516 Tigrao  6.304305284 0.0053325690
1517 Tigrao  6.314090020 0.0050636720
1518 Tigrao  6.323874755 0.0048112308
1519 Tigrao  6.333659491 0.0045629036
1520 Tigrao  6.343444227 0.0043338926
1521 Tigrao  6.353228963 0.0041085032
1522 Tigrao  6.363013699 0.0038975999
1523 Tigrao  6.372798434 0.0036934749
1524 Tigrao  6.382583170 0.0034995174
1525 Tigrao  6.392367906 0.0033150588
1526 Tigrao  6.402152642 0.0031369327
1527 Tigrao  6.411937378 0.0029706192
1528 Tigrao  6.421722114 0.0028072587
1529 Tigrao  6.431506849 0.0026576467
1530 Tigrao  6.441291585 0.0025105907
1531 Tigrao  6.451076321 0.0023737588
1532 Tigrao  6.460861057 0.0022416712
1533 Tigrao  6.470645793 0.0021166999
1534 Tigrao  6.480430528 0.0019983221
1535 Tigrao  6.490215264 0.0018843400
1536 Tigrao  6.500000000 0.0017784901

$layers
$layers[[1]]
geom_polygon: na.rm = FALSE, rule = evenodd
stat_identity: na.rm = FALSE
position_identity 

$layers[[2]]
mapping: xintercept = ~mean, colour = ~Item 
geom_vline: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 

$layers[[3]]
geom_path: lineend = butt, linejoin = round, linemitre = 10, arrow = NULL, na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 


$scales
<ggproto object: Class ScalesList, gg>
    add: function
    add_defaults: function
    add_missing: function
    backtransform_df: function
    clone: function
    find: function
    get_scales: function
    has_scale: function
    input: function
    map_df: function
    n: function
    non_position_scales: function
    scales: list
    train_df: function
    transform_df: function
    super:  <ggproto object: Class ScalesList, gg>

$guides
<Guides[0] ggproto object>

<empty>

$mapping
Aesthetic mapping: 
* `x`      -> `x`
* `y`      -> `y`
* `colour` -> `Item`
* `fill`   -> `Item`
* `group`  -> `Item`

$theme
$theme$axis.text.y
 list()
 - attr(*, "class")= chr [1:2] "element_blank" "element"

$theme$axis.ticks.y
 list()
 - attr(*, "class")= chr [1:2] "element_blank" "element"

$theme$legend.position
[1] "none"

$theme$panel.background
List of 5
 $ fill         : logi NA
 $ colour       : chr "grey70"
 $ linewidth    : num 1
 $ linetype     : NULL
 $ inherit.blank: logi FALSE
 - attr(*, "class")= chr [1:2] "element_rect" "element"

attr(,"complete")
[1] FALSE
attr(,"validate")
[1] TRUE

$coordinates
<ggproto object: Class CoordCartesian, Coord, gg>
    aspect: function
    backtransform_range: function
    clip: on
    default: TRUE
    distance: function
    expand: TRUE
    is_free: function
    is_linear: function
    labels: function
    limits: list
    modify_scales: function
    range: function
    render_axis_h: function
    render_axis_v: function
    render_bg: function
    render_fg: function
    setup_data: function
    setup_layout: function
    setup_panel_guides: function
    setup_panel_params: function
    setup_params: function
    train_panel_guides: function
    transform: function
    super:  <ggproto object: Class CoordCartesian, Coord, gg>

$facet
<ggproto object: Class FacetWrap, Facet, gg>
    compute_layout: function
    draw_back: function
    draw_front: function
    draw_labels: function
    draw_panels: function
    finish_data: function
    init_scales: function
    map_data: function
    params: list
    setup_data: function
    setup_params: function
    shrink: TRUE
    train_scales: function
    vars: function
    super:  <ggproto object: Class FacetWrap, Facet, gg>

$plot_env
<environment: 0x0000014b99168bc0>

$layout
<ggproto object: Class Layout, gg>
    coord: NULL
    coord_params: list
    facet: NULL
    facet_params: list
    finish_data: function
    get_scales: function
    layout: NULL
    map_position: function
    panel_params: NULL
    panel_scales_x: NULL
    panel_scales_y: NULL
    render: function
    render_labels: function
    reset_scales: function
    resolve_label: function
    setup: function
    setup_panel_guides: function
    setup_panel_params: function
    train_position: function
    super:  <ggproto object: Class Layout, gg>

$labels
$labels$y
[1] ""

$labels$x
[1] ""

$labels$colour
[1] "Item"

$labels$fill
[1] "Item"

$labels$group
[1] "Item"

$labels$xintercept
[1] "mean"


attr(,"class")
[1] "gg"     "ggplot"