GABARITO

Instruções

1 Fumantes

  1. Uma amostra aleatória de \(86\) pessoas inclui \(41\) fumantes.

    1. Construa um intervalo de confiança de \(95\%\) para o percentual de fumantes na população de onde foi coletada a amostra.

      Condições

      • A distribuição da população é normal e \(n \geq 10\)?

        Não sabemos se a distribuição da população é normal.

      • Caso a distribuição da população não seja conhecida, \(n \geq 30\)?

        Sim.

      • A amostra é aleatória, representativa da população?

        Supomos que sim.

      • Os valores da amostra são independentes entre si?

        Supomos que sim.

      • O tamanho da amostra é menos do que \(10\%\) da população?

        Sim.

      • Há pelo menos 10 fracassos e pelo menos 10 sucessos na amostra?

        Sim.

      Passo a passo

      n <- 86
      sucessos <- 41
      nivel_confianca <- .95
      
      pchapeu <- sucessos / n
      cat('pchapeu =', pchapeu)
      ## pchapeu = 0,4767442
      
      erro_padrao <- sqrt(pchapeu * (1 - pchapeu) / n)
      cat('\nEP =', erro_padrao)
      ## 
      ## EP = 0,05385804
      
      valor_critico <- -qnorm((1 - nivel_confianca)/2)
      cat('\nValor crítico =', valor_critico)
      ## 
      ## Valor crítico = 1,959964
      
      margem_erro <- erro_padrao * valor_critico
      cat('\nME =', margem_erro)
      ## 
      ## ME = 0,1055598
      
      intervalo <- pchapeu + c(-1, 1) * margem_erro
      cat('\nIC = [', intervalo[1], ';', intervalo[2], ']')
      ## 
      ## IC = [ 0,3711844 ; 0,582304 ]

      Graficamente, segundo esta amostra, a distribuição amostral de \(\hat p\) é a normal abaixo, com média \(0{,}477\) e desvio padrão \(0{,}054\). A área preenchida corresponde a \(95\%\) de probabilidade:

      Usando a função binom.confint()

      library(binom)
      n <- 86
      sucessos <- 41
      binom.confint(
        sucessos,
        n,
        method = 'asymptotic'
      )
    2. Faça um teste de hipóteses para avaliar a afirmação de que o percentual de fumantes na população é diferente de \(50\%\). Use \(\alpha = 0{,}05\).

      Condições

      Já foram verificadas no item anterior.

      Hipóteses

      \[ H_0 : p = 0{,}5 \]

      \[ H_A : p \neq 0{,}5 \]

      Passo a passo

      n <- 86
      sucessos <- 41
      
      # Valor de p na hipótese nula
      pzero <- .5
      
      # Supondo a hipótese nula
      erro_padrao <- sqrt(pzero * (1 - pzero) / n)
      cat('\nEP =', erro_padrao)
      ## 
      ## EP = 0,05391639
      
      pchapeu <- sucessos / n
      cat('\npchapeu =', pchapeu)
      ## 
      ## pchapeu = 0,4767442
      
      # Valor p
      valor_p <- 2 * pnorm(
        pchapeu, 
        mean = pzero, 
        sd = erro_padrao
      )
      cat('\nValor p =', valor_p)
      ## 
      ## Valor p = 0,6662276

      Graficamente, o valor \(p\) corresponde à área em vermelho abaixo da seguinte distribuição normal, com média \(0{,}500\) e desvio padrão \(\approx 0{,}054\):

      Note que esta é a distribuição amostral de \(\hat p\) supondo que \(H_0\) é verdadeira; sua média é \(0{,}5\), diferente da distribuição amostral de \(\hat p\) baseada na amostra que temos, desenhada acima, cuja média era \(0{,}477\).

      Como o valor \(p\) \((\approx 0{,}666)\) é muito maior do que \(\alpha\) (\(0{,}05\)), não temos evidência para rejeitar \(H_0\).

      Usando a função prop.test()

      n <- 86
      sucessos <- 41
      
      prop.test(sucessos, n, p = .5, correct = FALSE)
      ## 
      ##    1-sample proportions test without continuity correction
      ## 
      ## data:  sucessos out of n, null probability 0.5
      ## X-squared = 0,18605, df = 1, p-value = 0,6662
      ## alternative hypothesis: true p is not equal to 0,5
      ## 95 percent confidence interval:
      ##  0,3744554 0,5810217
      ## sample estimates:
      ##         p 
      ## 0,4767442

2 Graduação em \(4\) anos

  1. Qual o tamanho mínimo da amostra necessária para estimar, com um nível de confiança de \(95\%\) e uma margem de erro de \(0{,}05\) (\(5\) pontos percentuais), a proporção de alunos universitários que completam a graduação em \(4\) anos ou menos? Nada mais é sabido sobre a população.

    Explique por que você escolheu o valor de \(\hat p\) que você escolheu.

    Quando construímos um intervalo de confiança com nível de confiança de \(95\%\), a margem de erro é calculada como

    \[ \text{ME} = z^\star \cdot \sqrt{\frac{\hat p (1 - \hat p)}{n}} \]

    onde \(z^\star = {}\) -qnorm((1 - .95)/2) \({} \approx 1{,}96\).

    Se isolarmos \(n\), chegamos a

    \[ n = \hat p (1-\hat p) \left(\frac{z^\star}{\text{ME}}\right)^2 \]

    Não sabemos o valor de \(\hat p\). Vamos pensar no maior \(n\) possível, que corresponde a \(\hat p = 0{,}5\). Então,

    \[ n = \hat p (1-\hat p) \left(\frac{z^\star}{\text{ME}}\right)^2 = 0{,}5 \cdot 0{,}5 \cdot \left( \frac{1{,}96}{0{,}05} \right)^2 \approx 385 \]

    Ou seja, na pior das hipóteses, vamos precisar de uma amostra de \(385\) ou mais pessoas.

  2. Em uma amostra de \(400\) alunos universitários, \(150\) completaram a graduação em \(4\) anos ou menos. Teste a afirmação de que, na população, menos de \(40\%\) dos alunos universitários completam a graduação neste tempo.

    Condições

    • A distribuição da população é normal e \(n \geq 10\)?

      Não sabemos se a distribuição da população é normal.

    • Caso a distribuição da população não seja conhecida, \(n \geq 30\)?

      Sim.

    • A amostra é aleatória, representativa da população?

      Supomos que sim.

    • Os valores da amostra são independentes entre si?

      Supomos que sim.

    • O tamanho da amostra é menos do que \(10\%\) da população?

      Sim.

    • Há pelo menos 10 fracassos e pelo menos 10 sucessos na amostra?

      Sim.

    Hipóteses

    \[ H_0 : p \geq 0{,}4 \]

    \[ H_A : p < 0{,}4 \]

    Passo a passo

    n <- 400
    sucessos <- 150
    
    # Valor de p na hipótese nula
    pzero <- .4
    
    # Supondo a hipótese nula
    erro_padrao <- sqrt(pzero * (1 - pzero) / n)
    cat('\nEP =', erro_padrao)
    ## 
    ## EP = 0,0244949
    
    pchapeu <- sucessos / n
    cat('\npchapeu =', pchapeu)
    ## 
    ## pchapeu = 0,375
    
    # Valor p
    valor_p <- pnorm(
      pchapeu, 
      mean = pzero, 
      sd = erro_padrao
    )
    cat('\nValor p =', valor_p)
    ## 
    ## Valor p = 0,1537171

    Graficamente, o valor \(p\) corresponde à área em vermelho abaixo da seguinte distribuição normal, com média \(0{,}400\) e desvio padrão \(\approx 0{,}024\):

    Como o valor \(p\) \((\approx 0{,}154)\) é maior do que \(\alpha\) (\(0{,}05\)), não temos evidência para rejeitar \(H_0\).

    Como a hipótese alternativa é \(H_A : p < 0{,}4\), o teste é unilateral.

    Usando a função prop.test()

    n <- 400
    sucessos <- 150
    
    prop.test(sucessos, n, p = .4, alternative = 'less', correct = FALSE)
    ## 
    ##   1-sample proportions test without continuity correction
    ## 
    ## data:  sucessos out of n, null probability 0.4
    ## X-squared = 1,0417, df = 1, p-value = 0,1537
    ## alternative hypothesis: true p is less than 0,4
    ## 95 percent confidence interval:
    ##  0,0000000 0,4155303
    ## sample estimates:
    ##     p 
    ## 0,375

3 Estimativa do tamanho de uma multidão1

Observe a foto abaixo, que mostra parte de uma multidão. A quantidade de pessoas em cada setor quadrado foi estimada por um algoritmo.

Os valores obtidos para os setores da foto foram

setores <- c(
  200, 400, 800, 1000, 400, 800, 700, 1000, 400, 200, 700, 900, 400, 400, 700, 900,  
  600, 700, 900, 650, 672, 700, 900, 450, 566, 700, 900
)
  1. Construa um intervalo de confiança de \(95\%\) para a quantidade média de pessoas por setor na multidão inteira (inclusive as partes que não aparecem na foto).

    A população consiste de todas as quantidades de pessoas por setor na multidão inteira.

    O vetor setores é uma amostra.

    Como não sabemos o desvio padrão da população, vamos usar o teste \(t\) para estimar a média de pessoas por setor.

    Condições

    • A amostra é aleatória, representativa da população?

      Supomos que sim.

    • Os valores da amostra são independentes entre si?

      Supomos que sim.

    • A amostra vem de uma população aproximadamente normal?

      Podemos fazer um teste de normalidade:

      setores %>% shapiro.test()
      ## 
      ##    Shapiro-Wilk normality test
      ## 
      ## data:  .
      ## W = 0,93376, p-value = 0,08547

      O valor \(p\) acima de \(0{,}05\) é evidência de que os dados seguem uma distribuição normal.

      Podemos fazer um histograma:

      tibble(n = setores) %>% 
        ggplot(aes(n)) +
          geom_histogram(bins = 5) +
          labs(y = NULL)

      A forma do histograma é aproximadamente normal.

    Passo a passo

    n = length(setores)
    cat('n =', n)
    ## n = 27
    
    xbarra <- mean(setores)
    cat('\nMédia amostral =', xbarra)
    ## 
    ## Média amostral = 653,2593
    
    s <- sd(setores)
    cat('\nDesvio padrão amostral =', s)
    ## 
    ## Desvio padrão amostral = 230,7807
    
    erro_padrao <- s / sqrt(n)
    cat('\nEP =', erro_padrao)
    ## 
    ## EP = 44,41377
    
    gl <- n - 1
    cat('\nGraus de liberdade = ', gl)
    ## 
    ## Graus de liberdade =  26
    
    nivel_confianca <- .95
    valor_critico <- -qt((1 - nivel_confianca)/2, df = gl)
    cat('\nValor crítico =', valor_critico)
    ## 
    ## Valor crítico = 2,055529
    
    margem_erro <- erro_padrao * valor_critico
    cat('\nME =', margem_erro)
    ## 
    ## ME = 91,29381
    
    intervalo <- xbarra + c(-1, 1) * margem_erro
    cat('\nIC = [', intervalo[1], ';', intervalo[2], ']')
    ## 
    ## IC = [ 561,9654 ; 744,5531 ]

    Graficamente, o intervalo de confiança corresponde à área em vermelho abaixo da seguinte distribuição \(t\), com \(26\) graus de liberdade:

    Observe que esta distribuição \(t\) corresponde à variável padronizada

    \[ \frac{x - \bar x}{s/\sqrt{n}} \]

    Trabalhamos com esta variável padronizada porque a distribuição \(t\) sempre tem média zero.

    Aqui, cada valor no eixo \(x\) corresponde ao número de desvios padrão acima ou abaixo da média.

    De fato, o limite inferior da área preenchida corresponde a

    (intervalo[1] - xbarra) / erro_padrao
    ## [1] -2,055529

    e o limite superior da área preenchida corresponde a

    (intervalo[2] - xbarra) / erro_padrao
    ## [1] 2,055529

    Usando a função t.test()

    t.test(x = setores)
    ## 
    ##  One Sample t-test
    ## 
    ## data:  setores
    ## t = 14,708, df = 26, p-value = 0,00000000000004076
    ## alternative hypothesis: true mean is not equal to 0
    ## 95 percent confidence interval:
    ##  561,9654 744,5531
    ## sample estimates:
    ## mean of x 
    ##  653,2593
  2. Usando o resultado do item anterior e considerando que a multidão inteira cobre \(50\) setores, construa um intervalo de confiança para o total de pessoas na multidão.

    Basta multiplicar os valores do intervalo de confiança por \(50\):

    intervalo * 50
    ## [1] 28098,27 37227,65
  3. Faça um teste de hipóteses para avaliar a afirmação de que a multidão inteira consiste de mais de \(35\) mil pessoas. Use \(\alpha = 0{,}05\).

    A multidão inteira ter \(35\) mil pessoas equivale a

    \[ \mu = \frac{35.000}{50} = 700 \]

    onde \(\mu\) é a média de pessoas por setor.

    Antes de fazer qualquer cálculo, percebemos que o valor \(700\) está dentro do intervalo de confiança de \(95\%\) para a média de pessoas por setor.

    Isto significa que a hipótese de nulidade não vai ser rejeitada.

    Condições

    Já foram verificadas em um item anterior.

    Hipóteses

    \[ H_0 : \mu \leq 700 \]

    \[ H_A : \mu > 700 \]

    Passo a passo

    n <- length(setores)
    cat('n =', n)
    ## n = 27
    
    s <- sd(setores)
    cat('\nDesvio padrão amostral =', s)
    ## 
    ## Desvio padrão amostral = 230,7807
    
    xbarra <- mean(setores)
    cat('\nMédia amostral =', xbarra)
    ## 
    ## Média amostral = 653,2593
    
    # Valor de μ na hipótese nula
    mizero <- 700
    
    # Supondo a hipótese nula 
    erro_padrao <- s / sqrt(n)
    cat('\nEP =', erro_padrao)
    ## 
    ## EP = 44,41377
    
    # Média amostral padronizada (supondo a hipótese nula)
    tzero <- (xbarra - mizero) / erro_padrao
    cat('\ntzero =', tzero)
    ## 
    ## tzero = -1,052393
    
    # Graus de liberdade
    gl <- n - 1
    
    # Valor p
    valor_p <- pt(
      tzero, 
      df = gl,
      lower.tail = FALSE
    )
    cat('\nValor p =', valor_p)
    ## 
    ## Valor p = 0,8488489

    Como o valor \(p\) \((\approx 0{,}849)\) é muito maior do que \(\alpha\) (\(0{,}05\)), não temos evidência para rejeitar \(H_0\).

    Graficamente, o valor \(p\) corresponde à área em vermelho abaixo da seguinte distribuição \(t\), com \(26\) graus de liberdade, que corresponde à variável padronizada

    \[ \frac{x - \bar x}{s/\sqrt{n}} \]

    Como a hipótese alternativa é \(H_A : \mu > 700\), o teste é unilateral.

    Usando a função t.test()

    t.test(x = setores, alternative = 'greater', mu = mizero)
    ## 
    ##  One Sample t-test
    ## 
    ## data:  setores
    ## t = -1,0524, df = 26, p-value = 0,8488
    ## alternative hypothesis: true mean is greater than 700
    ## 95 percent confidence interval:
    ##  577,5063      Inf
    ## sample estimates:
    ## mean of x 
    ##  653,2593

4 Pulsação média de mulheres

  1. Qual o tamanho mínimo da amostra necessária para estimar, com um nível de confiança de \(95\%\) e uma margem de erro de \(2\) batimentos por minuto (bpm), a pulsação média de mulheres adultas? De estudos anteriores, podemos usar a informação de que o desvio padrão da população é \(\sigma = 12{,}54\) bpm.

    Quando construímos um intervalo de confiança com nível de confiança de \(95\%\), a margem de erro é calculada como

    \[ \text{ME} = z^\star \cdot \frac{\sigma}{\sqrt{n}} \]

    onde \(z^\star = {}\) -qnorm((1 - .95)/2) \({} \approx 1{,}96\).

    Se isolarmos \(n\), chegamos a

    \[ n = \left(\frac{z^\star \cdot \sigma}{\text{ME}}\right)^2 \]

    Substituindo os valores que temos:

    \[ n = \left(\frac{1{,}96 \cdot 12{,}54}{2}\right)^2 \approx 152 \]

    Vamos precisar de uma amostra de \(152\) ou mais pessoas.

  2. O vetor pulsacao contém os valores das pulsações (em bpm) de diversas mulheres.

    pulsacao <- c(
      80, 94, 58, 66, 56, 82, 78, 86, 88, 56, 36, 66, 84, 76, 78, 64, 66, 
      78, 60, 64, 84, 82, 70, 74, 86, 90, 88, 90, 90, 94, 68, 90, 82, 80, 74, 
      56, 100, 74, 76, 76, 86, 74, 66, 62, 78, 68, 62, 62, 74, 104, 54, 74, 
      74, 84, 60, 52, 84, 66, 56, 66, 84, 64, 64, 78, 104, 84, 84, 62, 82, 64, 
      78, 76, 86, 72, 82, 82, 66, 58, 62, 80, 58, 82, 76, 70, 88, 44, 58, 64, 
      68, 70, 58, 72, 80, 70, 74, 72, 66, 82, 98, 74, 80, 82, 56, 78, 100, 56, 
      68, 72, 64, 94, 72, 56, 80, 76, 56, 56, 54, 72, 70, 80, 72, 62, 96, 72, 
      60, 98, 72, 80, 84, 68, 86, 72, 80, 64, 82, 80, 62, 74, 96, 72, 96, 64, 
      62, 82, 76, 94, 74
    )
  3. Teste a afirmação de que a pulsação média de mulheres adultas é menor do que \(70\) bpm. Use \(\alpha = 0{,}05\). Use o fato de que \(\sigma = 12{,}54\) bpm.

    Condições

    Como temos o valor do desvio padrão da população, podemos usar o teste \(z\), cujas condições são:

    • A amostra é aleatória, representativa da população?

      Supomos que sim.

    • Os valores da amostra são independentes entre si?

      Supomos que sim.

    • O tamanho da amostra é menor do que \(10\%\) da população?

      A população é o conjunto de todas as mulheres adultas (da cidade? do país?)

      Nossa amostra tem \(147\), que é menos do que \(10\%\) da população.

    Hipóteses

    \[ H_0 : \mu \geq 70 \]

    \[ H_A : \mu < 70 \]

    Passo a passo

    n <- length(pulsacao)
    cat('n =', n)
    ## n = 147
    
    xbarra <- mean(pulsacao)
    cat('\nMédia amostral =', xbarra)
    ## 
    ## Média amostral = 74,04082
    
    # Desvio padrão da população (dado)
    sigma <- 12.54
    
    # Valor de μ na hipótese nula
    mizero <- 70
    
    erro_padrao <- sigma / sqrt(n)
    cat('\nEP =', erro_padrao)
    ## 
    ## EP = 1,034282
    
    # Valor p
    valor_p <- pnorm(
      xbarra, 
      mean = mizero,
      sd = erro_padrao
    )
    cat('\nValor p =', valor_p)
    ## 
    ## Valor p = 0,9999533

    Como o valor \(p\) \((\approx 1{,}000)\) é muito maior do que \(\alpha\) (\(0{,}05\)), não temos evidência para rejeitar \(H_0\).

    Na verdade, como a média da amostra é maior do que \(70\)bpm, esta amostra não ajuda a refutar a hipótese de nulidade, que diz que \(\mu < 70\).

    Além disso, o valor baixo do erro padrão diz que as amostras não variam muito em suas médias; ou seja, esta é uma amostra típica.

    Por isso, é praticamente impossível refutar a hipótese de nulidade com esta amostra.

    Graficamente, o valor \(p\) corresponde à área em vermelho abaixo da normal na seguinte figura. Perceba como a área à esquerda do valor de \(\bar x = 74{,}041\) é praticamente \(100\%\) da área inteira abaixo da curva:

    Como a hipótese alternativa é \(H_A : \mu < 70\), o teste é unilateral.

    Usando a função z.test()

    library(BSDA)
    ## Loading required package: lattice
    z.test(
      pulsacao,
      alternative = 'less',
      mu = 70,
      sigma.x = sigma
    )
    ## 
    ##  One-sample z-Test
    ## 
    ## data:  pulsacao
    ## z = 3,9069, p-value = 1
    ## alternative hypothesis: true mean is less than 70
    ## 95 percent confidence interval:
    ##        NA 75,74206
    ## sample estimates:
    ## mean of x 
    ##  74,04082
  4. Refaça o item anterior sem usar o fato de que \(\sigma = 12{,}54\) bpm.

    Condições

    Como agora não temos o desvio padrão da população, precisamos fazer um teste \(t\), cujas condições são:

    • A amostra é aleatória, representativa da população?

      Supomos que sim.

    • Os valores da amostra são independentes entre si?

      Supomos que sim.

    • A amostra vem de uma população aproximadamente normal?

      Podemos fazer um teste de normalidade:

      pulsacao %>% shapiro.test()
      ## 
      ##    Shapiro-Wilk normality test
      ## 
      ## data:  .
      ## W = 0,98912, p-value = 0,3102

      O valor \(p\) acima de \(0{,}05\) é evidência de que os dados seguem uma distribuição normal.

      Podemos fazer um histograma:

      tibble(n = pulsacao) %>% 
        ggplot(aes(n)) +
          geom_histogram(bins = 9) +
          labs(y = NULL)

      A forma do histograma é aproximadamente normal.

    Hipóteses

    \[ H_0 : \mu \geq 70 \]

    \[ H_A : \mu < 70 \]

    Passo a passo

    n <- length(pulsacao)
    cat('n =', n)
    ## n = 147
    
    s <- sd(pulsacao)
    cat('\nDesvio padrão amostral =', s)
    ## 
    ## Desvio padrão amostral = 12,54356
    
    xbarra <- mean(pulsacao)
    cat('\nMédia amostral =', xbarra)
    ## 
    ## Média amostral = 74,04082
    
    # Valor de μ na hipótese nula
    mizero <- 70
    
    # Supondo a hipótese nula 
    erro_padrao <- s / sqrt(n)
    cat('\nEP =', erro_padrao)
    ## 
    ## EP = 1,034575
    
    # Média amostral padronizada (supondo a hipótese nula)
    tzero <- (xbarra - mizero) / erro_padrao
    cat('\ntzero =', tzero)
    ## 
    ## tzero = 3,905774
    
    # Graus de liberdade
    gl <- n - 1
    cat('\ngl =', gl)
    ## 
    ## gl = 146
    
    # Valor p
    valor_p <- pt(
     tzero, 
     df = gl
    )
    cat('\nValor p =', valor_p)
    ## 
    ## Valor p = 0,9999284

    Como o valor \(p\) \((\approx 1{,}000)\) é muito maior do que \(\alpha\) (\(0{,}05\)), não temos evidência para rejeitar \(H_0\).

    Graficamente, o valor \(p\) corresponde à área em vermelho abaixo da seguinte distribuição \(t\), com \(146\) graus de liberdade, que corresponde à variável padronizada

    \[ \frac{x - \bar x}{s/\sqrt{n}} \]

    Trabalhamos com esta variável padronizada porque a distribuição \(t\) sempre tem média zero.

    Aqui, cada valor no eixo \(x\) corresponde ao número de desvios padrão acima ou abaixo da média.

    Como a hipótese alternativa é \(H_A : \mu < 70\), o teste é unilateral.

    Usando a função t.test()

    t.test(x = pulsacao, alternative = 'less', mu = mizero)
    ## 
    ##  One Sample t-test
    ## 
    ## data:  pulsacao
    ## t = 3,9058, df = 146, p-value = 0,9999
    ## alternative hypothesis: true mean is less than 70
    ## 95 percent confidence interval:
    ##      -Inf 75,75341
    ## sample estimates:
    ## mean of x 
    ##  74,04082
  5. Compare e comente os resultados.

    Observe que

    • O desvio padrão populacional \(\sigma = 12{,}540\) é bem próximo do desvio padrão amostral \(s = 12{,}544\).

    • Com \(146\) graus de liberdade, a distribuição \(t\) é muito próxima da normal padrão:

    Estas semelhanças tornam os cálculos dos valores \(p\) bem parecidos, tanto no teste \(z\) quanto no teste \(t\).

5 PlayStations com bootstrapping

Em uma amostra \(A\) de \(200\) pessoas, \(124\) possuem um PlayStation.

O método de bootstrapping consiste em simular muitas amostras — com reposição — a partir dos elementos desta amostra original \(A\). A partir destas muitas amostras simuladas, você pode calcular intervalos de confiança como explicado abaixo:

  1. Armazene, em uma lista, \(10\) mil amostras, cada uma com \(200\) pessoas sorteadas com reposição a partir da amostra original \(A\) acima (com todas as \(200\) pessoas tendo a mesma probabilidade de sorteio).

    Poderíamos criar um vetor com os \(200\) elementos da amostra original para passar para a função sample:

    amostra_original <- rep(c(TRUE, FALSE), c(124, 76))

    Mas podemos pensar de outro modo: ao escolhermos um elemento da amostra original, a probabilidade de obtermos TRUE é igual a \(124/200\).

    Ou seja, sortear \(200\) pessoas desta amostra com reposição equivale a sortear \(200\) valores booleanos, com TRUE tendo probabilidade \(124/200\) de ser sorteado a cada vez:

    n_amostras <- 1e4
    n <- 200
    sucessos <- 124
    p <- sucessos / n
    
    sortear_amostra_bool <- function(n, p) {
    
      sample(c(TRUE, FALSE), n, replace = TRUE, prob = c(p, 1 - p))
    
    }

    Para construir a lista de \(10\) mil amostras:

    amostras <- replicate(
      n_amostras, 
      sortear_amostra_bool(n, p),
      simplify = FALSE
    )

    Vamos examinar a lista gerada:

    str(amostras)
    ## List of 10000
    ##  $ : logi [1:200] FALSE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] FALSE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE FALSE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE FALSE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE FALSE ...
    ##  $ : logi [1:200] FALSE FALSE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] FALSE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE TRUE ...
    ##  $ : logi [1:200] FALSE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE FALSE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE TRUE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] FALSE FALSE FALSE TRUE ...
    ##  $ : logi [1:200] FALSE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE FALSE ...
    ##  $ : logi [1:200] FALSE FALSE FALSE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE FALSE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] FALSE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] FALSE TRUE FALSE FALSE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE FALSE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE FALSE ...
    ##  $ : logi [1:200] FALSE TRUE FALSE FALSE ...
    ##  $ : logi [1:200] FALSE FALSE FALSE FALSE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE FALSE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] FALSE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] FALSE FALSE FALSE FALSE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE FALSE ...
    ##  $ : logi [1:200] FALSE TRUE FALSE FALSE ...
    ##  $ : logi [1:200] FALSE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] FALSE FALSE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE FALSE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] FALSE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE TRUE FALSE ...
    ##  $ : logi [1:200] TRUE TRUE FALSE TRUE ...
    ##  $ : logi [1:200] TRUE FALSE FALSE TRUE ...
    ##   [list output truncated]
  2. Armazene, em um vetor de \(10\) mil elementos, as proporções de possuidores de PlayStations nas amostras obtidas no item anterior.

    Lembre-se de que calcular a proporção de valores TRUE em um vetor booleano equivale a calcular a média (já que TRUE é visto como \(1\), e FALSE é visto como \(0\)).

    As funções da família map aplicam uma operação (aqui, a média) a cada elemento de um vetor, retornando uma lista. Veja ?purrr::map para mais detalhes sobre programação funcional em R.

    proporcoes <- amostras %>% 
      map_dbl(~mean(.))
    str(proporcoes)
    ##  num [1:10000] 0,615 0,68 0,59 0,615 0,635 0,61 0,575 0,63 ...
  3. Imprima os valores deste vetor que estão no quantil \(0{,}05\) e no quantil \(0{,}95\). Estes são os extremos do intervalo de confiança para a proporção de possuidores de PlayStations na população, com \(95\%\) de confiança, calculados via bootstrapping.

    Uma das vantagens do bootstrapping é não precisar de qualquer conhecimento sobre a população — sua distribuição, sua variância etc.

    ic_bs <- proporcoes %>% 
      quantile(c(.05, .95))
    
    ic_bs
    ##    5%   95% 
    ## 0,565 0,675
  4. Use a função prop.test() do R para construir um intervalo de confiança para a proporção de possuidores de PlayStations na população, com \(95\%\) de confiança — não é necessário fazer os cálculos passo a passo.

    ic_teste <- prop.test(sucessos, n, correct = FALSE)$conf.int
    ic_teste
    ## [1] 0,5510672 0,6844099
    ## attr(,"conf.level")
    ## [1] 0,95
  5. Compare com o resultado do bootstrapping.

    Os centros dos intervalos são

    • Bootstrap: \(0{,}620\)

    • Teste: \(0{,}618\)

    Os extremos de um intervalo são próximos dos extremos do outro intervalo.

    Como o bootstrapping consiste em sortear elementos da amostra original, os resultados podem ser diferentes a cada execução, mas os resultados costumam ser próximos aos dos testes paramétricos — como prop.test.

    Se tomarmos uma quantidade maior de amostras — aqui, foram \(10\) mil — a precisão melhorará mais ainda. Experimente.

6 Telefones celulares com bootstrapping

Uma amostra das quantidades de radiação emitidas por telefones celulares consiste dos seguintes valores:

radiacao <- c(38, 55, 86, 91, 99, 103, 145)

O método de bootstrapping consiste em simular muitas amostras — com reposição — a partir dos elementos desta amostra original. A partir destas muitas amostras simuladas, você pode calcular intervalos de confiança como explicado abaixo:

  1. Armazene, em uma lista, \(10\) mil amostras, cada uma com \(7\) elementos sorteados com reposição a partir do vetor radiacao (com todos os elementos tendo a mesma probabilidade de sorteio).

    n_amostras <- 1e4
    n <- length(radiacao)
    amostras <- replicate(
      n_amostras, 
      sample(radiacao, n, replace = TRUE),
      simplify = FALSE
    )

    Vamos examinar a lista gerada:

    str(amostras)
    ## List of 10000
    ##  $ : num [1:7] 91 103 86 99 86 99 55
    ##  $ : num [1:7] 145 55 99 38 86 38 86
    ##  $ : num [1:7] 86 86 99 55 99 145 38
    ##  $ : num [1:7] 103 55 86 38 86 145 38
    ##  $ : num [1:7] 55 145 86 86 99 91 145
    ##  $ : num [1:7] 145 55 103 145 55 145 145
    ##  $ : num [1:7] 86 99 55 99 99 86 99
    ##  $ : num [1:7] 99 55 99 91 86 91 103
    ##  $ : num [1:7] 91 38 99 86 103 99 145
    ##  $ : num [1:7] 86 55 91 38 91 91 86
    ##  $ : num [1:7] 38 145 99 55 103 99 55
    ##  $ : num [1:7] 99 86 145 55 103 99 91
    ##  $ : num [1:7] 38 103 99 86 99 38 145
    ##  $ : num [1:7] 38 55 103 86 86 86 99
    ##  $ : num [1:7] 38 86 91 103 38 86 103
    ##  $ : num [1:7] 145 38 103 38 145 103 38
    ##  $ : num [1:7] 86 91 103 55 103 86 55
    ##  $ : num [1:7] 55 55 55 91 103 86 38
    ##  $ : num [1:7] 86 86 38 145 86 38 86
    ##  $ : num [1:7] 99 99 145 91 86 55 103
    ##  $ : num [1:7] 86 38 91 91 38 145 86
    ##  $ : num [1:7] 99 38 55 38 91 103 103
    ##  $ : num [1:7] 38 145 55 91 103 38 99
    ##  $ : num [1:7] 91 38 86 91 99 55 38
    ##  $ : num [1:7] 38 38 145 55 86 145 91
    ##  $ : num [1:7] 145 91 145 103 103 91 55
    ##  $ : num [1:7] 86 103 86 99 86 99 55
    ##  $ : num [1:7] 145 38 103 55 86 38 99
    ##  $ : num [1:7] 103 103 86 86 103 91 91
    ##  $ : num [1:7] 103 103 38 86 91 103 38
    ##  $ : num [1:7] 91 38 38 38 145 145 99
    ##  $ : num [1:7] 86 55 55 38 99 145 91
    ##  $ : num [1:7] 86 55 91 91 91 86 38
    ##  $ : num [1:7] 103 86 86 91 145 103 86
    ##  $ : num [1:7] 145 55 145 103 55 86 99
    ##  $ : num [1:7] 86 91 38 145 55 145 38
    ##  $ : num [1:7] 99 55 99 99 86 103 99
    ##  $ : num [1:7] 55 145 103 103 86 99 86
    ##  $ : num [1:7] 145 145 145 99 91 99 99
    ##  $ : num [1:7] 91 145 55 145 145 91 91
    ##  $ : num [1:7] 103 99 38 91 38 86 91
    ##  $ : num [1:7] 145 91 103 86 38 55 145
    ##  $ : num [1:7] 91 38 55 103 99 38 91
    ##  $ : num [1:7] 55 38 103 38 145 55 145
    ##  $ : num [1:7] 91 38 103 103 86 55 55
    ##  $ : num [1:7] 55 99 145 99 38 103 91
    ##  $ : num [1:7] 38 103 86 103 38 99 145
    ##  $ : num [1:7] 103 145 38 91 86 38 103
    ##  $ : num [1:7] 38 86 99 86 38 103 86
    ##  $ : num [1:7] 145 103 91 91 99 99 38
    ##  $ : num [1:7] 86 103 145 86 86 86 55
    ##  $ : num [1:7] 91 103 55 99 99 103 91
    ##  $ : num [1:7] 86 145 91 55 145 38 38
    ##  $ : num [1:7] 99 91 86 91 145 99 145
    ##  $ : num [1:7] 55 103 99 99 145 86 145
    ##  $ : num [1:7] 99 103 91 55 55 91 103
    ##  $ : num [1:7] 145 91 55 38 91 55 55
    ##  $ : num [1:7] 38 99 99 86 38 91 99
    ##  $ : num [1:7] 91 38 38 91 55 55 86
    ##  $ : num [1:7] 55 145 86 99 99 86 91
    ##  $ : num [1:7] 86 38 86 86 55 99 103
    ##  $ : num [1:7] 86 145 91 91 91 99 55
    ##  $ : num [1:7] 103 38 86 145 38 91 91
    ##  $ : num [1:7] 86 145 55 86 103 55 99
    ##  $ : num [1:7] 99 86 55 38 38 38 99
    ##  $ : num [1:7] 145 91 91 91 99 86 103
    ##  $ : num [1:7] 55 145 91 38 145 145 99
    ##  $ : num [1:7] 55 91 38 38 38 55 103
    ##  $ : num [1:7] 38 145 99 145 145 99 55
    ##  $ : num [1:7] 55 55 55 86 103 55 86
    ##  $ : num [1:7] 103 145 145 86 91 145 91
    ##  $ : num [1:7] 99 86 55 103 38 86 55
    ##  $ : num [1:7] 145 99 38 145 55 38 86
    ##  $ : num [1:7] 55 91 91 99 99 91 86
    ##  $ : num [1:7] 55 145 86 99 145 103 86
    ##  $ : num [1:7] 86 99 91 86 145 103 55
    ##  $ : num [1:7] 86 145 103 145 103 38 86
    ##  $ : num [1:7] 145 99 55 145 103 103 86
    ##  $ : num [1:7] 103 55 99 145 103 103 86
    ##  $ : num [1:7] 55 103 91 55 99 38 145
    ##  $ : num [1:7] 99 145 38 55 99 145 38
    ##  $ : num [1:7] 91 86 91 55 86 99 145
    ##  $ : num [1:7] 38 55 91 55 145 145 55
    ##  $ : num [1:7] 55 55 91 91 99 55 99
    ##  $ : num [1:7] 55 145 99 91 145 103 103
    ##  $ : num [1:7] 55 99 145 91 38 55 91
    ##  $ : num [1:7] 99 145 99 38 145 91 99
    ##  $ : num [1:7] 103 55 145 55 86 103 103
    ##  $ : num [1:7] 103 99 91 86 99 99 86
    ##  $ : num [1:7] 55 38 55 38 103 86 86
    ##  $ : num [1:7] 99 91 38 55 55 91 86
    ##  $ : num [1:7] 103 145 145 38 91 99 91
    ##  $ : num [1:7] 99 38 103 91 145 38 103
    ##  $ : num [1:7] 91 145 55 91 55 91 55
    ##  $ : num [1:7] 103 145 55 38 55 91 103
    ##  $ : num [1:7] 91 86 145 55 145 91 99
    ##  $ : num [1:7] 103 91 91 86 145 86 38
    ##  $ : num [1:7] 86 38 86 55 103 91 38
    ##  $ : num [1:7] 38 91 145 91 38 86 86
    ##   [list output truncated]
  2. Armazene, em um vetor de \(10\) mil elementos, as médias das amostras obtidas no item anterior.

    As funções da família map aplicam uma operação (aqui, a média) a cada elemento de um vetor, retornando uma lista. Veja ?purrr::map para mais detalhes sobre programação funcional em R.

    medias <- amostras %>% 
      map_dbl(~mean(.))
    str(medias)
    ##  num [1:10000] 88,4 78,1 86,9 78,7 ...
  3. Imprima os valores deste vetor que estão no quantil \(0{,}05\) e no quantil \(0{,}95\). Estes são os extremos do intervalo de confiança para a radiação média na população, com \(95\%\) de confiança, calculados via bootstrapping.

    Uma das vantagens do bootstrapping é não precisar de qualquer conhecimento sobre a população — sua distribuição, sua variância etc.

    ic_bs <- medias %>% 
      quantile(c(.05, .95))
    
    ic_bs
    ##        5%       95% 
    ##  68,57143 108,57143
  4. Use a função t.test() do R para construir um intervalo de confiança para a radiação média, com \(95\%\) de confiança — não é necessário fazer os cálculos passo a passo.

    ic_teste <- t.test(radiacao)$conf.int
    ic_teste
    ## [1]  56,11225 120,17346
    ## attr(,"conf.level")
    ## [1] 0,95
  5. Compare com o resultado do bootstrapping.

    Os centros dos intervalos são

    • Bootstrap: \(88{,}571\)

    • Teste: \(88{,}143\)

    Os extremos de um intervalo são mais ou menos próximos dos extremos do outro intervalo. Neste exemplo, a amostra original era pequena; se fosse maior, os intervalos seriam mais parecidos.

    Como o bootstrapping consiste em sortear elementos da amostra original, os resultados podem ser diferentes a cada execução, mas os resultados costumam ser próximos aos dos testes paramétricos — como prop.test.

7 Sonhando em cores ou em preto e branco2

Dentre \(306\) pessoas com mais de \(55\) anos, \(68\) disseram que sonham em preto e branco.

Dentre \(298\) pessoas com menos de \(25\) anos, \(13\) disseram que sonham em preto e branco.

  1. Construa um intervalo de confiança de \(99\%\) para a diferença entre as duas proporções.

    Condições

    • A distribuição da população é normal e \(n \geq 10\)?

      Não sabemos se a distribuição da população é normal.

    • Caso a distribuição da população não seja conhecida, \(n \geq 30\)?

      Sim.

    • As amostras são aleatórias, representativas das populações?

      Supomos que sim.

    • Os valores da amostra são independentes entre si?

      Supomos que sim.

    • O tamanho da amostra é menos do que \(10\%\) da população?

      Sim.

    • Há pelo menos 10 fracassos e pelo menos 10 sucessos em cada amostra?

      Sim.

    • Os grupos são independentes?

      Supomos que sim (não são parentes nem de outra forma relacionados).

    Passo a passo

    n1 <- 306
    sucessos1 <- 68
    pchapeu1 <- sucessos1 / n1
    cat('\npchapeu1 =', pchapeu1)
    ## 
    ## pchapeu1 = 0,2222222
    
    n2 <- 298
    sucessos2 <- 13
    pchapeu2 <- sucessos2 / n2
    cat('\npchapeu2 =', pchapeu2)
    ## 
    ## pchapeu2 = 0,04362416
    
    dchapeu <- pchapeu1 - pchapeu2
    cat('\ndchapeu =', dchapeu)
    ## 
    ## dchapeu = 0,1785981
    
    nivel_confianca <- .99
    
    erro_padrao <- sqrt(
      (pchapeu1 * (1 - pchapeu1) / n1) +
      (pchapeu2 * (1 - pchapeu2) / n2)
    )
    cat('\nEP =', erro_padrao)
    ## 
    ## EP = 0,0265488
    
    valor_critico <- -qnorm((1 - nivel_confianca)/2)
    cat('\nValor crítico =', valor_critico)
    ## 
    ## Valor crítico = 2,575829
    
    margem_erro <- erro_padrao * valor_critico
    cat('\nME =', margem_erro)
    ## 
    ## ME = 0,06838517
    
    intervalo <- dchapeu + c(-1, 1) * margem_erro
    cat('\nIC = [', intervalo[1], ';', intervalo[2], ']')
    ## 
    ## IC = [ 0,1102129 ; 0,2469832 ]

    Graficamente, segundo esta amostra, a distribuição amostral de \(\hat d\) (a diferença estimada entre as proporções) é a normal abaixo, com média \(0{,}179\) e desvio padrão \(0{,}027\). A área preenchida corresponde a \(99\%\) de probabilidade:

    Usando a função prop.test

    prop.test(
      matrix(
        c(
          sucessos1, sucessos2,
          n1 - sucessos1, n2 - sucessos2
        ),
        ncol = 2
      ),
      conf.level = .99,
      correct = FALSE
    )
    ## 
    ##  2-sample test for equality of proportions without continuity correction
    ## 
    ## data:  matrix(c(sucessos1, sucessos2, n1 - sucessos1, n2 - sucessos2), ncol = 2)
    ## X-squared = 41,471, df = 1, p-value = 0,0000000001197
    ## alternative hypothesis: two.sided
    ## 99 percent confidence interval:
    ##  0,1102129 0,2469832
    ## sample estimates:
    ##     prop 1     prop 2 
    ## 0,22222222 0,04362416
  2. Teste a afirmação de que a proporção de pessoas com mais de \(55\) anos que sonham em preto e branco é maior do que a proporção de pessoas com menos de \(25\) anos que sonham em preto e branco. Use \(\alpha = 0{,}01\).

    Como o intervalo de confiança para a diferença entre as proporções, calculado no item anterior, não inclui o zero, e como \(\hat p_1 > \hat p _2\), já sabemos, antes de qualquer cálculo, que a hipótese de nulidade vai ser rejeitada.

    Neste nível de confiança, a amostra é evidência de que a proporção de pessoas com mais de \(55\) anos que sonham em preto e branco é maior do que a proporção de pessoas com menos de \(25\) anos que sonham em preto e branco.

    Condições

    Já foram verificadas no item anterior.

    Hipóteses

    \[ H_0 : p_1 - p_2 \leq 0 \]

    \[ H_A : p_1 - p_2 > 0 \]

    Passo a passo

    n1 <- 306
    sucessos1 <- 68
    pchapeu1 <- sucessos1 / n1
    cat('\npchapeu1 =', pchapeu1)
    ## 
    ## pchapeu1 = 0,2222222
    
    n2 <- 298
    sucessos2 <- 13
    pchapeu2 <- sucessos2 / n2
    cat('\npchapeu2 =', pchapeu2)
    ## 
    ## pchapeu2 = 0,04362416
    
    dchapeu <- pchapeu1 - pchapeu2
    cat('\ndchapeu =', dchapeu)
    ## 
    ## dchapeu = 0,1785981
    
    # Valor de d (diferença) na hipótese nula
    dzero <- 0
    
    # Supondo a hipótese nula
    pbarra <- (sucessos1 + sucessos2) / (n1 + n2)
    erro_padrao <- sqrt(
      (pbarra * (1 - pbarra) / n1) +
      (pbarra * (1 - pbarra) / n2)
    )
    cat('\nEP =', erro_padrao)
    ## 
    ## EP = 0,02773359
    
    # Valor p
    valor_p <- pnorm(
      dchapeu, 
      mean = dzero, 
      sd = erro_padrao,
      lower.tail = FALSE
    )
    cat('\nValor p =', valor_p)
    ## 
    ## Valor p = 0,00000000005982533

    Graficamente, o valor \(p\) corresponde à área em vermelho (praticamente invisível!) abaixo da seguinte distribuição normal, com média \(0\) e desvio padrão \(\approx 0{,}028\):

    Como o valor \(p\) \((\approx 0{,}00000000005983)\) é muito menor do que \(\alpha\) (\(0{,}01\)), temos evidência para rejeitar \(H_0\).

    Usando a função prop.test()

    prop.test(
      matrix(
        c(
          sucessos1, sucessos2,
          n1 - sucessos1, n2 - sucessos2
        ),
        ncol = 2
      ),
      alternative = 'greater',
      conf.level = .99,
      correct = FALSE
    )
    ## 
    ##  2-sample test for equality of proportions without continuity correction
    ## 
    ## data:  matrix(c(sucessos1, sucessos2, n1 - sucessos1, n2 - sucessos2), ncol = 2)
    ## X-squared = 41,471, df = 1, p-value = 0,00000000005983
    ## alternative hypothesis: greater
    ## 99 percent confidence interval:
    ##  0,1168363 1,0000000
    ## sample estimates:
    ##     prop 1     prop 2 
    ## 0,22222222 0,04362416

8 Professores \(\times\) professoras3

Professoras mulheres recebem avaliações melhores do que professores homens?

Em uma universidade, as professoras mulheres receberam as seguintes notas dos alunos:

mulheres <- c(
 4.3, 4.3, 4.4, 4.0, 3.4, 4.7, 2.9, 4.0, 4.3, 3.4, 3.4, 3.3
)

Na mesma universidade, os professores homens receberam as seguintes notas:

homens <- c(
 4.5, 3.7, 4.2, 3.9, 3.1, 4.0, 3.8, 3.4, 4.5, 3.8, 4.3, 4.4, 4.1, 4.2, 4.0
)

Nada é sabido sobre as variâncias das duas populações.

  1. Construa um intervalo de confiança de \(95\%\) para a diferença entre as médias.

    Condições

    • As amostras são aleatórias, representativas da população?

      Supomos que sim.

    • Os valores das amostras são independentes entre si?

      Supomos que sim.

    • As amostras são menos do que \(10\%\) da população?

      Sim.

    • As amostras vêm de populações aproximadamente normais?

      Podemos fazer testes de normalidade:

      mulheres %>% shapiro.test()
      ## 
      ##    Shapiro-Wilk normality test
      ## 
      ## data:  .
      ## W = 0,91737, p-value = 0,2648
      homens %>% shapiro.test()
      ## 
      ##    Shapiro-Wilk normality test
      ## 
      ## data:  .
      ## W = 0,94474, p-value = 0,4457

      Os valores \(p\) acima de \(0{,}05\) são evidência de que os dados seguem uma distribuição normal.

    Passo a passo

    n_1 = length(mulheres)
    cat('n_1 =', n_1)
    ## n_1 = 12
    
    xbarra_1 <- mean(mulheres)
    cat('\nMédia amostral 1 =', xbarra_1)
    ## 
    ## Média amostral 1 = 3,866667
    
    s_1 <- sd(mulheres)
    cat('\nDesvio padrão amostral 1 =', s_1)
    ## 
    ## Desvio padrão amostral 1 = 0,5630006
    
    n_2 = length(homens)
    cat('\nn_2 =', n_2)
    ## 
    ## n_2 = 15
    
    xbarra_2 <- mean(homens)
    cat('\nMédia amostral 2 =', xbarra_2)
    ## 
    ## Média amostral 2 = 3,993333
    
    s_2 <- sd(homens)
    cat('\nDesvio padrão amostral 2 =', s_1)
    ## 
    ## Desvio padrão amostral 2 = 0,5630006
    
    d <- xbarra_1 - xbarra_2
    cat('\nDiferença =', d)
    ## 
    ## Diferença = -0,1266667
    
    erro_padrao <- sqrt(s_1^2 / n_1 + s_2^2 / n_2)
    cat('\nEP =', erro_padrao)
    ## 
    ## EP = 0,1919363
    
    gl <- (s_1^2 / n_1 + s_2^2 / n_2)^2 / (
      (s_1^2 / n_1)^2 / (n_1 - 1) +
      (s_2^2 / n_2)^2 / (n_2 - 1)
    )
    cat('\nGraus de liberdade = ', gl)
    ## 
    ## Graus de liberdade =  19,06342
    
    nivel_confianca <- .95
    valor_critico <- -qt((1 - nivel_confianca)/2, df = gl)
    cat('\nValor crítico =', valor_critico)
    ## 
    ## Valor crítico = 2,092553
    
    margem_erro <- erro_padrao * valor_critico
    cat('\nME =', margem_erro)
    ## 
    ## ME = 0,4016368
    
    intervalo <- d + c(-1, 1) * margem_erro
    cat('\nIC = [', intervalo[1], ';', intervalo[2], ']')
    ## 
    ## IC = [ -0,5283035 ; 0,2749702 ]

    Graficamente, o intervalo de confiança corresponde à área em vermelho abaixo da seguinte distribuição \(t\), com \(19{,}063\) graus de liberdade:

    Observe que esta distribuição \(t\) corresponde à variável padronizada

    \[ \frac{x - (\bar x_1 - \bar x_2)}{\sqrt{s_1^2 / n_1 + s_2^2 / n_2}} \]

    Trabalhamos com esta variável padronizada porque a distribuição \(t\) sempre tem média zero.

    Aqui, cada valor no eixo \(x\) corresponde ao número de desvios padrão acima ou abaixo da média.

    De fato, o limite inferior da área preenchida corresponde a

    (intervalo[1] - (xbarra_1 - xbarra_2)) / erro_padrao
    ## [1] -2,092553

    e o limite superior da área preenchida corresponde a

    (intervalo[2] - (xbarra_1 - xbarra_2)) / erro_padrao
    ## [1] 2,092553

    Usando a função t.test()

    t.test(
      x = mulheres,
      y = homens
    )
    ## 
    ##  Welch Two Sample t-test
    ## 
    ## data:  mulheres and homens
    ## t = -0,65994, df = 19,063, p-value = 0,5172
    ## alternative hypothesis: true difference in means is not equal to 0
    ## 95 percent confidence interval:
    ##  -0,5283035  0,2749702
    ## sample estimates:
    ## mean of x mean of y 
    ##  3,866667  3,993333
  2. Teste a afirmação de que as médias são diferentes. Use \(\alpha = 0{,}05\).

    Como o intervalo de confiança para a diferença entre as médias, calculado no item anterior, inclui o zero, já sabemos, antes de qualquer cálculo, que a hipótese de nulidade não vai ser rejeitada; isto é, as amostras são evidência de que as médias são iguais.

    Condições

    Já foram verificadas no item anterior.

    Hipóteses

    \[ H_0 : \mu_1 - \mu_2 = 0 \]

    \[ H_A : \mu_1 - \mu_2 \neq 0 \]

    Passo a passo

    n_1 = length(mulheres)
    cat('n_1 =', n_1)
    ## n_1 = 12
    
    xbarra_1 <- mean(mulheres)
    cat('\nMédia amostral 1 =', xbarra_1)
    ## 
    ## Média amostral 1 = 3,866667
    
    s_1 <- sd(mulheres)
    cat('\nDesvio padrão amostral 1 =', s_1)
    ## 
    ## Desvio padrão amostral 1 = 0,5630006
    
    n_2 = length(homens)
    cat('\nn_2 =', n_2)
    ## 
    ## n_2 = 15
    
    xbarra_2 <- mean(homens)
    cat('\nMédia amostral 2 =', xbarra_2)
    ## 
    ## Média amostral 2 = 3,993333
    
    s_2 <- sd(homens)
    cat('\nDesvio padrão amostral 2 =', s_1)
    ## 
    ## Desvio padrão amostral 2 = 0,5630006
    
    erro_padrao <- sqrt(s_1^2 / n_1 + s_2^2 / n_2)
    cat('\nEP =', erro_padrao)
    ## 
    ## EP = 0,1919363
    
    d <- xbarra_1 - xbarra_2
    cat('\nDiferença =', d)
    ## 
    ## Diferença = -0,1266667
    
    # Vamos padronizar esta diferença
    tx <- (d - 0) / erro_padrao
    cat('\nDiferença padronizada =', tx)
    ## 
    ## Diferença padronizada = -0,6599412
    
    gl <- (s_1^2 / n_1 + s_2^2 / n_2)^2 / (
      (s_1^2 / n_1)^2 / (n_1 - 1) +
      (s_2^2 / n_2)^2 / (n_2 - 1)
    )
    cat('\nGraus de liberdade =', gl)
    ## 
    ## Graus de liberdade = 19,06342
    
    valor_p <- 2 * pt(
      tx, 
      df = gl
    )
    cat('\nValor p =', valor_p)      
    ## 
    ## Valor p = 0,5171864

    Como o valor \(p\) \((\approx 0{,}517)\) é maior do que \(\alpha\) (\(0{,}05\)), não temos evidência para rejeitar \(H_0\).

    Graficamente, o valor \(p\) corresponde à área em vermelho abaixo da seguinte distribuição \(t\), com \(19{,}063\) graus de liberdade, que corresponde à variável padronizada

    \[ \frac{x - (\bar x_1 - \bar x_2)}{\sqrt{s_1^2 / n_1 + s_2^2 / n_2}} \]

    Como a hipótese alternativa é \(H_A : \mu_1 - \mu_2 \neq 0\), o teste é bilateral.

    Usando a função t.test()

    t.test(
      x = mulheres,
      y = homens
    )
    ## 
    ##  Welch Two Sample t-test
    ## 
    ## data:  mulheres and homens
    ## t = -0,65994, df = 19,063, p-value = 0,5172
    ## alternative hypothesis: true difference in means is not equal to 0
    ## 95 percent confidence interval:
    ##  -0,5283035  0,2749702
    ## sample estimates:
    ## mean of x mean of y 
    ##  3,866667  3,993333

9 Mulheres \(\times\) maridos4

A tabela abaixo mostra as quantidades de palavras faladas em um dia pelos maridos e mulheres em \(8\) casais:

casal marido mulher
1 15.684 24.625
2 26.429 13.397
3 1.411 18.338
4 7.771 17.791
5 18.876 12.964
6 15.477 16.937
7 14.069 16.255
8 25.835 18.667
  1. Construa um intervalo de confiança de \(95\%\) para a diferença média entre as quantidades de palavras faladas pelos dois cônjuges de um casal.

    Condições

    • As amostras são aleatórias, representativas da população?

      Supomos que sim.

    • Os pares são independentes entre si?

      Supomos que sim. O comportamento de um casal não afeta o comportamento dos outros.

    • As amostras são menos do que \(10\%\) da população?

      Sim.

    • A amostra vem de uma população aproximadamente normal?

      Podemos fazer um teste de normalidade sobre as diferenças:

      (df$marido - df$mulher) %>% shapiro.test()
      ## 
      ##    Shapiro-Wilk normality test
      ## 
      ## data:  .
      ## W = 0,97075, p-value = 0,9038

      O valor \(p\) acima de \(0{,}05\) é evidência de que os dados seguem uma distribuição normal.

    Passo a passo

    n = nrow(df)
    cat('\nn =', n)
    ## 
    ## n = 8
    
    dbarra <- mean(df$marido - df$mulher)
    cat('\nMédia amostral das diferenças =', dbarra)
    ## 
    ## Média amostral das diferenças = -1677,75
    
    s <- sd(df$marido - df$mulher)
    cat('\nDesvio padrão amostral das diferenças =', s)
    ## 
    ## Desvio padrão amostral das diferenças = 10052,87
    
    erro_padrao <- s / sqrt(n)
    cat('\nEP =', erro_padrao)
    ## 
    ## EP = 3554,227
    
    gl <- n - 1
    cat('\nGraus de liberdade = ', gl)
    ## 
    ## Graus de liberdade =  7
    
    nivel_confianca <- .95
    valor_critico <- -qt((1 - nivel_confianca)/2, df = gl)
    cat('\nValor crítico =', valor_critico)
    ## 
    ## Valor crítico = 2,364624
    
    margem_erro <- erro_padrao * valor_critico
    cat('\nME =', margem_erro)
    ## 
    ## ME = 8404,411
    
    intervalo <- dbarra + c(-1, 1) * margem_erro
    cat('\nIC = [', intervalo[1], ';', intervalo[2], ']')
    ## 
    ## IC = [ -10082,16 ; 6726,661 ]

    Graficamente, o intervalo de confiança corresponde à área em vermelho abaixo da seguinte distribuição \(t\), com \(7\) graus de liberdade:

    Observe que esta distribuição \(t\) corresponde à variável padronizada

    \[ \frac{x - \overline{(x_1 - x_2)}}{s / \sqrt{n}} \]

    Trabalhamos com esta variável padronizada porque a distribuição \(t\) sempre tem média zero.

    Aqui, cada valor no eixo \(x\) corresponde ao número de desvios padrão acima ou abaixo da média.

    De fato, o limite inferior da área preenchida corresponde a

    (intervalo[1] - dbarra) / erro_padrao
    ## [1] -2,364624

    e o limite superior da área preenchida corresponde a

    (intervalo[2] - dbarra) / erro_padrao
    ## [1] 2,364624

    Usando a função t.test()

    t.test(
      x = df$marido,
      y = df$mulher,
      paired = TRUE
    )
    ## 
    ##  Paired t-test
    ## 
    ## data:  df$marido and df$mulher
    ## t = -0,47204, df = 7, p-value = 0,6513
    ## alternative hypothesis: true difference in means is not equal to 0
    ## 95 percent confidence interval:
    ##  -10082,161   6726,661
    ## sample estimates:
    ## mean of the differences 
    ##                -1677,75
  2. Teste a afirmação de que, em casais em geral, a mulher fala mais do que o homem. Use \(\alpha = 0{,}05\).

    Como o intervalo de confiança para a média das diferenças, calculado no item anterior, inclui o zero, já sabemos, antes de qualquer cálculo, que a hipótese de nulidade não vai ser rejeitada; isto é, a amostra não é evidência de que as mulheres falam mais.

    Condições

    Já foram verificadas no item anterior.

    Hipóteses

    Chamando de \(\mu_d\) a média das diferenças \[\text{palavras}_\text{marido} - \text{palavras}_\text{mulher}\] temos

    \[ H_0 : \mu_d \geq 0 \]

    \[ H_A : \mu_d < 0 \]

    Passo a passo

    n = nrow(df)
    cat('\nn =', n)
    ## 
    ## n = 8
    
    dbarra <- mean(df$marido - df$mulher)
    cat('\nMédia amostral das diferenças =', dbarra)
    ## 
    ## Média amostral das diferenças = -1677,75
    
    s <- sd(df$marido - df$mulher)
    cat('\nDesvio padrão amostral das diferenças =', s)
    ## 
    ## Desvio padrão amostral das diferenças = 10052,87
    
    erro_padrao <- s / sqrt(n)
    cat('\nEP =', erro_padrao)
    ## 
    ## EP = 3554,227
    
    gl <- n - 1
    cat('\nGraus de liberdade = ', gl)
    ## 
    ## Graus de liberdade =  7
    
    # Vamos padronizar esta diferença
    tx <- (dbarra - 0) / erro_padrao
    cat('\nDiferença padronizada =', tx)
    ## 
    ## Diferença padronizada = -0,4720436
    
    valor_p <- pt(
      tx, 
      df = gl
    )
    cat('\nValor p =', valor_p)      
    ## 
    ## Valor p = 0,3256283

    Como o valor \(p\) \((\approx 0{,}326)\) é maior do que \(\alpha\) (\(0{,}05\)), não temos evidência para rejeitar \(H_0\).

    Graficamente, o valor \(p\) corresponde à área em vermelho abaixo da seguinte distribuição \(t\), com \(7\) graus de liberdade, que corresponde à variável padronizada

    \[ \frac{x - \overline{(x_1 - x_2)}}{s / \sqrt{n}} \]

    Como a hipótese alternativa é \(H_A : \mu_d < 0\), o teste é unilateral à esquerda.

    Usando a função t.test()

    t.test(
      x = df$marido,
      y = df$mulher,
      alternative = 'less',
      paired = TRUE
    )    
    ## 
    ##  Paired t-test
    ## 
    ## data:  df$marido and df$mulher
    ## t = -0,47204, df = 7, p-value = 0,3256
    ## alternative hypothesis: true difference in means is less than 0
    ## 95 percent confidence interval:
    ##      -Inf 5056,012
    ## sample estimates:
    ## mean of the differences 
    ##                -1677,75

10 Temperatura corporal com bootstrapping

A tabela abaixo mostra as temperatura corporais (em graus Celsius) de \(32\) pessoas, medidas de manhã e de tarde:

pessoa manhã tarde
1 36,7 36,7
2 37,0 37,1
3 36,3 36,7
4 36,8 37,1
5 36,8 37,1
6 36,8 36,4
7 35,9 37,0
8 36,3 37,0
9 36,3 37,1
10 36,8 36,7
11 36,3 36,8
12 36,6 36,7
13 36,9 36,7
14 36,4 36,1
15 35,7 36,2
16 36,7 36,8
17 37,1 37,1
18 37,4 37,4
19 37,1 36,6
20 36,5 36,9
21 37,2 36,5
22 36,7 36,8
23 37,1 36,5
24 36,4 36,2
25 37,2 36,9
26 36,9 37,0
27 36,2 36,3
28 37,1 35,9
29 36,3 36,1
30 37,1 36,9
31 37,2 36,8
32 37,3 37,0

O método de bootstrapping consiste em simular muitas amostras — com reposição — a partir dos elementos desta amostra original. A partir destas muitas amostras simuladas, você pode calcular intervalos de confiança como explicado abaixo:

  1. Calcule a diferença entre a temperatura matinal e a temperatura vespertina para cada pessoa, armazenando os resultados em um vetor diferencas, com \(32\) valores.

    diferencas <- df$manhã - df$tarde
    diferencas
    ##  [1]  0,0 -0,1 -0,4 -0,3 -0,3  0,4 -1,1 -0,7 -0,8  0,1 -0,5 -0,1  0,2  0,3 -0,5 -0,1
    ## [17]  0,0  0,0  0,5 -0,4  0,7 -0,1  0,6  0,2  0,3 -0,1 -0,1  1,2  0,2  0,2  0,4  0,3
  2. Armazene, em uma lista, \(10\) mil amostras, cada uma com \(32\) elementos sorteados com reposição a partir do vetor diferencas (com todos os elementos tendo a mesma probabilidade de sorteio).

    n_amostras <- 1e4
    n <- length(diferencas)
    amostras <- replicate(
      n_amostras, 
      sample(diferencas, n, replace = TRUE),
      simplify = FALSE
    )

    Vamos examinar a lista gerada:

    str(amostras)
    ## List of 10000
    ##  $ : num [1:32] 0 0,3 -0,3 0,4 ...
    ##  $ : num [1:32] 0,7 0,6 0,2 -0,1 ...
    ##  $ : num [1:32] -0,1 0 0,2 -0,1 ...
    ##  $ : num [1:32] 0 -0,3 0,7 -0,3 ...
    ##  $ : num [1:32] 0,6 0 0 0 ...
    ##  $ : num [1:32] 0,6 -0,4 0 -0,4 ...
    ##  $ : num [1:32] 0,6 1,2 0,2 -0,4 ...
    ##  $ : num [1:32] -1,1 -0,5 0,3 0,3 ...
    ##  $ : num [1:32] 0,3 1,2 0,2 -0,3 ...
    ##  $ : num [1:32] -0,4 -0,1 -0,1 0 ...
    ##  $ : num [1:32] -0,1 -0,1 0,2 0,4 ...
    ##  $ : num [1:32] 0,3 1,2 0,4 0,2 ...
    ##  $ : num [1:32] -0,1 0,4 0,1 -0,5 ...
    ##  $ : num [1:32] -0,1 -0,1 0,2 0 ...
    ##  $ : num [1:32] 0,4 -0,1 0,2 -0,1 ...
    ##  $ : num [1:32] 0,1 0,3 -0,1 -0,8 ...
    ##  $ : num [1:32] 0,7 -0,5 -0,7 0 ...
    ##  $ : num [1:32] -0,8 -0,1 -0,1 1,2 ...
    ##  $ : num [1:32] 0,7 -0,1 0,4 1,2 ...
    ##  $ : num [1:32] -0,1 -0,4 -0,1 -0,4 ...
    ##  $ : num [1:32] -1,1 0,2 -0,1 0,4 ...
    ##  $ : num [1:32] -1,1 -0,3 -0,1 0,7 ...
    ##  $ : num [1:32] 0 -0,7 0,2 -0,4 ...
    ##  $ : num [1:32] 0,3 -0,5 -0,1 -0,4 ...
    ##  $ : num [1:32] -0,3 0,4 0,5 0 ...
    ##  $ : num [1:32] -0,1 -0,7 0,1 -0,1 ...
    ##  $ : num [1:32] 0,3 -0,3 0,3 -0,1 ...
    ##  $ : num [1:32] 0 0,3 -0,1 -0,1 ...
    ##  $ : num [1:32] 1,2 -0,1 1,2 -0,5 ...
    ##  $ : num [1:32] 0,4 -0,4 -0,3 -0,3 ...
    ##  $ : num [1:32] 0,2 1,2 0,1 -0,1 ...
    ##  $ : num [1:32] 0,4 0,2 -0,1 -0,5 ...
    ##  $ : num [1:32] -0,1 -0,1 -0,1 0,1 ...
    ##  $ : num [1:32] -0,1 0 -0,8 0 ...
    ##  $ : num [1:32] 0,1 0,3 1,2 0,3 ...
    ##  $ : num [1:32] 0 -0,7 0,6 0,2 ...
    ##  $ : num [1:32] -0,4 -0,8 0,3 -0,4 ...
    ##  $ : num [1:32] 0 0,1 -0,5 -0,7 ...
    ##  $ : num [1:32] 0 -1,1 0,2 0,3 ...
    ##  $ : num [1:32] 0,2 -1,1 0,3 -0,1 ...
    ##  $ : num [1:32] 0,3 -0,1 0,2 -0,4 ...
    ##  $ : num [1:32] -0,5 -0,8 0 0,6 ...
    ##  $ : num [1:32] 0,4 0 -0,1 0 ...
    ##  $ : num [1:32] 0 -0,1 -1,1 0,5 ...
    ##  $ : num [1:32] -0,1 0,4 0 -0,4 ...
    ##  $ : num [1:32] -0,1 0,7 0,6 0,1 ...
    ##  $ : num [1:32] 0,5 0,3 -0,4 0,3 ...
    ##  $ : num [1:32] -0,5 0,3 0,5 -0,3 ...
    ##  $ : num [1:32] 0,2 0 -0,1 0,3 ...
    ##  $ : num [1:32] 0,6 -0,1 0,4 -0,7 ...
    ##  $ : num [1:32] -1,1 0,5 0,7 -0,1 ...
    ##  $ : num [1:32] 0,2 0,2 0 -0,1 ...
    ##  $ : num [1:32] 0,6 -0,1 -0,5 0,4 ...
    ##  $ : num [1:32] 1,2 0,4 0,4 -0,1 ...
    ##  $ : num [1:32] 0,1 -0,1 0 -0,5 ...
    ##  $ : num [1:32] -0,8 -0,1 0,5 -0,3 ...
    ##  $ : num [1:32] 0,1 0,3 -0,3 0,7 ...
    ##  $ : num [1:32] 0,2 0 -1,1 -0,1 ...
    ##  $ : num [1:32] -0,5 -0,1 0,5 0,4 ...
    ##  $ : num [1:32] 1,2 -0,4 -0,3 0,2 ...
    ##  $ : num [1:32] -0,5 0 -0,4 1,2 ...
    ##  $ : num [1:32] 0,4 0 -0,1 0 ...
    ##  $ : num [1:32] -0,1 0,6 0,3 -0,5 ...
    ##  $ : num [1:32] -0,1 0,3 -1,1 -0,1 ...
    ##  $ : num [1:32] -0,4 -0,3 -0,3 0,6 ...
    ##  $ : num [1:32] 1,2 -0,1 0 0,4 ...
    ##  $ : num [1:32] 0,1 -0,3 0,5 -0,8 ...
    ##  $ : num [1:32] -0,1 -0,1 0,2 0,4 ...
    ##  $ : num [1:32] 0,2 0,6 -1,1 0,2 ...
    ##  $ : num [1:32] 0,7 0,6 -0,5 0,2 ...
    ##  $ : num [1:32] 0,3 -0,1 -0,8 0,6 ...
    ##  $ : num [1:32] 0,2 1,2 -0,4 0 ...
    ##  $ : num [1:32] -0,3 0,7 -1,1 0,2 ...
    ##  $ : num [1:32] -1,1 0,2 -0,1 -0,1 ...
    ##  $ : num [1:32] -0,5 0,3 0,1 -0,1 ...
    ##  $ : num [1:32] -0,8 1,2 -0,1 0,3 ...
    ##  $ : num [1:32] -0,3 0 0 0,7 ...
    ##  $ : num [1:32] -0,3 0,6 -0,1 0,2 ...
    ##  $ : num [1:32] -0,5 0,7 -0,1 0 ...
    ##  $ : num [1:32] -0,1 0,2 0,3 -0,5 ...
    ##  $ : num [1:32] 0 0,5 0 -0,1 ...
    ##  $ : num [1:32] 0 0,2 0,2 -0,1 ...
    ##  $ : num [1:32] 1,2 0,5 0,7 0 ...
    ##  $ : num [1:32] 0 -0,1 -0,1 0,2 ...
    ##  $ : num [1:32] 0,5 -0,4 -0,4 -0,1 ...
    ##  $ : num [1:32] -0,1 0,6 -0,4 -0,8 ...
    ##  $ : num [1:32] -0,1 1,2 0,4 0,6 ...
    ##  $ : num [1:32] 0,2 0,2 -0,1 -0,1 ...
    ##  $ : num [1:32] -0,4 0,3 0,4 0,1 ...
    ##  $ : num [1:32] 0,7 -0,1 0 0,3 ...
    ##  $ : num [1:32] 0,2 -0,1 -1,1 0,4 ...
    ##  $ : num [1:32] -0,5 0,3 -0,4 0,4 ...
    ##  $ : num [1:32] -0,7 -0,7 0,2 0,2 ...
    ##  $ : num [1:32] -0,7 -0,1 0 -0,7 ...
    ##  $ : num [1:32] 0,2 0,2 -0,5 0 ...
    ##  $ : num [1:32] 0,1 0,3 0,3 0,4 ...
    ##  $ : num [1:32] 0,3 0,4 0,3 -0,1 ...
    ##  $ : num [1:32] 0 0,3 -0,5 0,6 ...
    ##  $ : num [1:32] 0,3 0,3 0 1,2 ...
    ##   [list output truncated]
  3. Armazene, em um vetor de \(10\) mil elementos, as médias das amostras obtidas no item anterior.

    As funções da família map aplicam uma operação (aqui, a média) a cada elemento de um vetor, retornando uma lista. Veja ?purrr::map para mais detalhes sobre programação funcional em R.

    medias <- amostras %>% 
      map_dbl(~mean(.))
    str(medias)
    ##  num [1:10000] 0,03125 -0,00625 0,03125 0,00625 ...
  4. Imprima os valores deste vetor que estão no quantil \(0{,}05\) e no quantil \(0{,}95\). Estes são os extremos do intervalo de confiança para a diferença média de temperatura na população, com \(95\%\) de confiança, calculados via bootstrapping.

    Uma das vantagens do bootstrapping é não precisar de qualquer conhecimento sobre a população — sua distribuição, sua variância etc.

    ic_bs <- medias %>% 
      quantile(c(.05, .95))
    
    ic_bs
    ##        5%       95% 
    ## -0,134375  0,134375
  5. Use a função t.test() do R para construir um intervalo de confiança para a diferença média de temperatura na população, com \(95\%\) de confiança — não é necessário fazer os cálculos passo a passo.

    ic_teste <- t.test(df$manhã, df$tarde, paired = TRUE)$conf.int
    ic_teste
    ## [1] -0,1676132  0,1676132
    ## attr(,"conf.level")
    ## [1] 0,95
  6. Compare com o resultado do bootstrapping.

    Os centros dos intervalos são

    • Bootstrap: \(-0{,}00000000000000077716\)

    • Teste: \(-0{,}00000000000000044409\)

    Os extremos de um intervalo são mais ou menos próximos dos extremos do outro intervalo.

    Como o bootstrapping consiste em sortear elementos da amostra original, os resultados podem ser diferentes a cada execução, mas os resultados costumam ser próximos aos dos testes paramétricos — como prop.test.

    Se tomarmos uma quantidade maior de amostras — aqui, foram \(10\) mil — a precisão melhorará mais ainda. Experimente.

Notas


  1. Baseado em https://web.archive.org/web/20101008192855/http://www.lifeslittlemysteries.com/how-is-crowd-size-estimated--1074/↩︎

  2. Baseado em Murzyn, E. (2008). “Do we only dream in colour? a comparison of reported dream colour in younger and older adults with different experiences of black and white media.” Consciousness and Cognition, 17(4), 1228–1237. http://dx.doi.org/10.1016/j.concog.2008.09.002↩︎

  3. Baseado em Andrew Gelman e Jennifer Hill (2009), “Replication Data for Data Analysis Using Regression Multilevel Hierarchical Models”, http://hdl.handle.net/1902.1/10285↩︎

  4. Baseado em Mehl, M. R., Vazire, S., Nairán Ramírez-Esparza, Slatcher, R. B., & Pennebaker, J. W. (2007). “Are Women Really More Talkative Than Men?”, Science, 317(5834), 82. http://dx.doi.org/10.1126/science.1139940↩︎

LS0tCnRpdGxlOiAnTGlzdGEgYXZhbGlhdGl2YTogSUMgZSBUSCcKc3VidGl0bGU6ICdQcm9iYWJpbGlkYWRlIGUgRXN0YXTDrXN0aWNhIC0tIDIwMjEuMicKYXV0aG9yOiAnZm5hdWZlbCcKZW1haWw6ICdodHRwczovL2ZuYXVmZWwuZ2l0aHViLmlvLycKZGF0ZTogJzE3LzAxLzIwMjIgKHYuIGByIGZvcm1hdChTeXMuRGF0ZSgpLCAiJWQvJW0vJVkiKWApJwpsYW5nOiAncHQtYnInCm91dHB1dDogCiAgIyBUbyBpbnN0YWxsIHRoZXNlIG91dHB1dCBmb3JtYXRzLCBlbnRlcgogICMgICBpbnN0YWxsLnBhY2thZ2VzKCJkZXZ0b29scyIpCiAgIyAgIGRldnRvb2xzOjppbnN0YWxsX2dpdGh1YigiZm5hdWZlbC9mbmF1ZmVsUm1kIikKICBmbmF1ZmVsUm1kOjpodG1sX3JlcG9ydDoKICAgIFtdCiAgZm5hdWZlbFJtZDo6cGRmX3JlcG9ydDoKICAgIGRvY3VtZW50Y2xhc3M6IGFydGljbGUKICAgIHBhcGVyc2l6ZTogYTQKICAgIGZvbnRzaXplOiAxMnB0CiAgICBsaW5rcy1hcy1ub3RlczogdHJ1ZQogICAgZ2VvbWV0cnk6CiAgICAtIHRvcD0zMG1tCiAgICAtIGxlZnQ9MjBtbQogICAgIyBGb3IgbW9yZSBwZGYgb3B0aW9ucywgc2VlCiAgICAjIGh0dHBzOi8vcGFuZG9jLm9yZy9NQU5VQUwuaHRtbCN2YXJpYWJsZXMtZm9yLWxhdGV4Ci0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CiMgVGhlIG5leHQgY29tbWFuZCBjb25maWd1cmVzIE1BTlkgdGhpbmdzIGFuZCBsb2FkcyBxdWl0ZSBhIGZldyBwYWNrYWdlcy4KIyAKIyBJZiB5b3Ugd2FudCB0byBzZWUgd2hhdCdzIGJlaW5nIGRvbmUsIGV4ZWN1dGUgCiMgCiMgICBjYXQoCiMgICAgIHN5c3RlbS5maWxlKAojICAgICAgICJybWFya2Rvd24vcmVzb3VyY2VzL1IvX2NvbW1vbl9yZXBvcnQuUiIsIAojICAgICAgIHBhY2thZ2UgPSAiZm5hdWZlbFJtZCIKIyAgICAgKQojICAgKQojIAojIHRvIGZpbmQgb3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZS4gVGhlbiBvcGVuIHRoZSBmaWxlLgojIAojIElmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiwgY29weSB0aGUgZmlsZSwgZWRpdCBpdCwgYW5kCiMgc291cmNlIGl0IGluc3RlYWQgb2YgdGhlIHBhY2thZ2UgZmlsZS4gCiMgCiMgT3Igc2ltcGx5IHdyaXRlIHlvdXIgY29tbWFuZHMgaGVyZSBpbiB0aGlzIGNvZGUgY2h1bmsuCgpzb3VyY2UoCiAgc3lzdGVtLmZpbGUoCiAgICAicm1hcmtkb3duL3Jlc291cmNlcy9SL19jb21tb25fcmVwb3J0LlIiLAogICAgcGFja2FnZSA9ICJmbmF1ZmVsUm1kIgogICkKKQoKIyAzIGNhc2FzIGRlY2ltYWlzIGVtIG7Dum1lcm9zIG5vIHRleHRvCm9wdGlvbnMoZm1kaWdpdHMgPSAzKQoKIyBQbG90cyBkZSBkaXN0cmlidWnDp8O1ZXMgYW1vc3RyYWlzCnNvdXJjZSgncGxvdF9zaGFkZWQuUicpCgpzZXQuc2VlZCgxMjM0NTYpCgpnYWJhcml0byA8LSBGQUxTRQpnYWJhcml0byA8LSBUUlVFCmBgYAoKCmBgYHtyIGVjaG89RkFMU0UsIHJlc3VsdHM9J2FzaXMnfQppZiAoZ2FiYXJpdG8pIHsKICBjYXQoCic6Ojogey5ybWRub3RlIGxhdGV4PTF9CioqR0FCQVJJVE8qKgo6OjonCiAgKQp9CmBgYAoKCiMgSW5zdHJ1w6fDtWVzIHstfQoKKiBWZWphIG5hIHRhYmVsYSBhYmFpeG8gbyBuw7ptZXJvIGRhIHF1ZXN0w6NvIHF1ZSBmb2kgc29ydGVhZGEgcGFyYSB2b2PDqi4gW1NlIHNldSBuw7ptZXJvIGRlIG1hdHLDrWN1bGEgbsOjbyBlc3RpdmVyIG5hIHRhYmVsYSwgZW50cmUgZW0gY29udGF0byBjb21pZ28gcGVsbyBUZWxlZ3JhbS5dey5obH0KCiAgICBgYGB7ciBlY2hvPUZBTFNFfQogICAgdGliYmxlOjp0cmliYmxlKAogICAgICAgfm1hdHJpY3VsYSwgfnF1ZXN0YW8sCiAgICAgICIxMTkwNjAwMDciLCAgICAgICAxTCwKICAgICAgIjExOTA2MDAyNSIsICAgICAgIDNMLAogICAgICAiMTE5MDYwMDM4IiwgICAgICAgOEwsCiAgICAgICIxMTkwNjAwNDMiLCAgICAgICA5TCwKICAgICAgIjEyMDA2MDAxMCIsICAgICAgIDRMLAogICAgICAiMTIwMDYwMDE0IiwgICAgICAgNkwsCiAgICAgICIxMjAwNjAwMjkiLCAgICAgICA3TCwKICAgICAgIjEyMDA2MDAzNCIsICAgICAgMTBMLAogICAgICAiMjE2MDYwMDU1IiwgICAgICAgNUwsCiAgICAgICIyMTkwNjAwNTMiLCAgICAgICAyTAogICAgICApICU+JSAKICAgICAga2JsKAogICAgICAgIGRpZ2l0cyA9IDksIAogICAgICAgIGFsaWduID0gJ3InLCAKICAgICAgICBmb3JtYXQuYXJncyA9IGxpc3QoYmlnLm1hcmsgPSAnLicpCiAgICAgICkgJT4lIAogICAgICBrYWJsZV9wYXBlcigKICAgICAgICBjKCdzdHJpcGVkJywgJ2hvdmVyJyksCiAgICAgICAgZnVsbF93aWR0aCA9IEZBTFNFCiAgICAgICkKICAgIGBgYAoKCiogQ2xpcXVlIG8gYm90w6NvIGBDb2RlYCwgbm8gaW7DrWNpbyBkZXN0YSBww6FnaW5hLCBwYXJhIGJhaXhhciBvIGFycXVpdm8gUm1kIGRlc3RlIGRvY3VtZW50by4KCiogQ2VydGlmaXF1ZS1zZSBkZSBxdWUgbyBwYWNvdGUgYGZuYXVmZWxSbWRgIGVzdMOhIGluc3RhbGFkby4gVXNlIG9zIGNvbWFuZG9zCgogICAgYGBge3IgZXZhbD1GQUxTRX0KICAgIGluc3RhbGwucGFja2FnZXMoImRldnRvb2xzIikKICAgIGRldnRvb2xzOjppbnN0YWxsX2dpdGh1YigiZm5hdWZlbC9mbmF1ZmVsUm1kIikKICAgIGBgYAogIAoqIEVkaXRlIG8gYXJxdWl2byBSbWQgcGFyYSByZXNvbHZlciBhIHN1YSBxdWVzdMOjby4gCgoqIENhZGEgaXRlbSBxdWUgcGVkZSBwYXJhIHZvY8OqIGNvbnN0cnVpciB1bSBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYSBvdSBwYXJhIHZvY8OqIGZhemVyIHVtIHRlc3RlIGRlIGhpcMOzdGVzZXMgW2RldmUgc2VyIHJlc29sdmlkbyBkZSBkdWFzIG1hbmVpcmFzXXsuaGx9IChleGNldG8gcXVhbmRvIGhvdXZlciBpbnN0cnXDp8OjbyBkaXplbmRvIG8gY29udHLDoXJpbyk6CgogIDEuIEZhemVuZG8gb3MgY8OhbGN1bG9zIHBhc3NvIGEgcGFzc28sIGNvbW8gbm9zIHbDrWRlb3MgZG8gY3Vyc28sIGUKICAKICAxLiBVc2FuZG8gYXMgZnVuw6fDtWVzIHByb250YXMgZG8gUiBwYXJhIElDIGUgdGVzdGVzIGRlIGhpcMOzdGVzZSBxdWUgZm9yYW0gdXNhZGFzIG5vcyB2w61kZW9zIGRvIGN1cnNvLgoKKiBFc2NyZXZhIG8gbcOheGltbyBwb3Nzw612ZWwgc29icmUgbyBzZXUgcmFjaW9jw61uaW8uIEp1c3RpZmlxdWUgc3VhcyByZXNwb3N0YXMuCgoqIFRlc3RlIHN1YXMgcmVzcG9zdGFzLiBUdWRvIGRldmUgZXN0YXIgZXhlY3V0YW5kbyBzZW0gZXJyb3MuCgoqIFtFbnZpZSBubyBNb29kbGU6IF17LmhsfQoKICAxLiBPIGFycXVpdm8gUm1kIGNvbSBhcyBzdWFzIHJlc29sdcOnw7VlcyBlCiAgCiAgMS4gVW0gdsOtZGVvIGRlIGF0w6kgJDUkIG1pbnV0b3MgZXhwbGljYW5kbyBhcyBzdWFzIHJlc29sdcOnw7Vlcy4KCiogQm9tIHRyYWJhbGhvLgoKCiMgRnVtYW50ZXMKCjEuIFVtYSBhbW9zdHJhIGFsZWF0w7NyaWEgZGUgJDg2JCBwZXNzb2FzIGluY2x1aSAkNDEkIGZ1bWFudGVzLgoKICAgYS4gQ29uc3RydWEgdW0gaW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EgZGUgJDk1XCUkIHBhcmEgbyBwZXJjZW50dWFsIGRlIGZ1bWFudGVzIG5hIHBvcHVsYcOnw6NvIGRlIG9uZGUgZm9pIGNvbGV0YWRhIGEgYW1vc3RyYS4gCiAgIAogICAgICBgYGB7ciBjaGlsZD0nZnVtYW50ZXMxLlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAgIAogICAgICBgYGAKICAgCiAgIGEuIEZhw6dhIHVtIHRlc3RlIGRlIGhpcMOzdGVzZXMgcGFyYSBhdmFsaWFyIGEgYWZpcm1hw6fDo28gZGUgcXVlIG8gcGVyY2VudHVhbCBkZSBmdW1hbnRlcyBuYSBwb3B1bGHDp8OjbyDDqSBbZGlmZXJlbnRlIGRlICQ1MFwlJF17LmhsfS4gVXNlICRcYWxwaGEgPSAweyx9MDUkLgogICAKICAgICAgYGBge3IgY2hpbGQ9J2Z1bWFudGVzMi5SbWQnLCBldmFsPWdhYmFyaXRvfQogICAgICAKICAgICAgYGBgCgoKIyBHcmFkdWHDp8OjbyBlbSAkNCQgYW5vcwoKMS4gUXVhbCBvIHRhbWFuaG8gbcOtbmltbyBkYSBhbW9zdHJhIG5lY2Vzc8OhcmlhIHBhcmEgZXN0aW1hciwgY29tIHVtIG7DrXZlbCBkZSBjb25maWFuw6dhIGRlICQ5NVwlJCBlIHVtYSBtYXJnZW0gZGUgZXJybyBkZSAkMHssfTA1JCAoJDUkIHBvbnRvcyBwZXJjZW50dWFpcyksIGEgcHJvcG9yw6fDo28gZGUgYWx1bm9zIHVuaXZlcnNpdMOhcmlvcyBxdWUgY29tcGxldGFtIGEgZ3JhZHVhw6fDo28gZW0gJDQkIGFub3Mgb3UgbWVub3M/IE5hZGEgbWFpcyDDqSBzYWJpZG8gc29icmUgYSBwb3B1bGHDp8Ojby4gCgogICBbRXhwbGlxdWUgcG9yIHF1ZSB2b2PDqiBlc2NvbGhldSBvIHZhbG9yIGRlICRcaGF0IHAkIHF1ZSB2b2PDqiBlc2NvbGhldS5dey5obH0KCiAgIGBgYHtyIGNoaWxkPSdncmFkdWFjYW8xLlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAKICAgYGBgCgoxLiBFbSB1bWEgYW1vc3RyYSBkZSAkNDAwJCBhbHVub3MgdW5pdmVyc2l0w6FyaW9zLCAkMTUwJCBjb21wbGV0YXJhbSBhIGdyYWR1YcOnw6NvIGVtICQ0JCBhbm9zIG91IG1lbm9zLiBUZXN0ZSBhIGFmaXJtYcOnw6NvIGRlIHF1ZSwgbmEgcG9wdWxhw6fDo28sIFttZW5vcyBkZSAkNDBcJSRdey5obH0gZG9zIGFsdW5vcyB1bml2ZXJzaXTDoXJpb3MgY29tcGxldGFtIGEgZ3JhZHVhw6fDo28gbmVzdGUgdGVtcG8uCgogICBgYGB7ciBjaGlsZD0nZ3JhZHVhY2FvMi5SbWQnLCBldmFsPWdhYmFyaXRvfQogICAgCiAgIGBgYAoKCiMgRXN0aW1hdGl2YSBkbyB0YW1hbmhvIGRlIHVtYSBtdWx0aWTDo29eW0Jhc2VhZG8gZW0gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAxMDA4MTkyODU1L2h0dHA6Ly93d3cubGlmZXNsaXR0bGVteXN0ZXJpZXMuY29tL2hvdy1pcy1jcm93ZC1zaXplLWVzdGltYXRlZC0tMTA3NC9dIHsgI211bHRpZGFvIH0KCk9ic2VydmUgYSBmb3RvIGFiYWl4bywgcXVlIG1vc3RyYSBbcGFydGVdey5obH0gZGUgdW1hIG11bHRpZMOjby4gQSBxdWFudGlkYWRlIGRlIHBlc3NvYXMgZW0gY2FkYSBzZXRvciBxdWFkcmFkbyBmb2kgZXN0aW1hZGEgcG9yIHVtIGFsZ29yaXRtby4KCmBgYHtyIGVjaG89RkFMU0UsIG91dC53aWR0aD0nODAlJ30Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoJ2Nyb3dkLWNvdW50aW5nLTAyLmpwZycpCmBgYAoKT3MgdmFsb3JlcyBvYnRpZG9zIHBhcmEgb3Mgc2V0b3JlcyBkYSBmb3RvIGZvcmFtCgpgYGB7cn0Kc2V0b3JlcyA8LSBjKAogIDIwMCwgNDAwLCA4MDAsIDEwMDAsIDQwMCwgODAwLCA3MDAsIDEwMDAsIDQwMCwgMjAwLCA3MDAsIDkwMCwgNDAwLCA0MDAsIDcwMCwgOTAwLCAgCiAgNjAwLCA3MDAsIDkwMCwgNjUwLCA2NzIsIDcwMCwgOTAwLCA0NTAsIDU2NiwgNzAwLCA5MDAKKQpgYGAKCgoxLiBDb25zdHJ1YSB1bSBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYSBkZSAkOTVcJSQgcGFyYSBhIHF1YW50aWRhZGUgbcOpZGlhIGRlIHBlc3NvYXMgcG9yIHNldG9yIG5hIG11bHRpZMOjbyBbaW50ZWlyYV17LmhsfSAoaW5jbHVzaXZlIGFzIHBhcnRlcyBxdWUgbsOjbyBhcGFyZWNlbSBuYSBmb3RvKS4KCiAgIGBgYHtyIGNoaWxkPSdtdWx0aWRhbzEuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCjEuIFVzYW5kbyBvIHJlc3VsdGFkbyBkbyBpdGVtIGFudGVyaW9yIGUgY29uc2lkZXJhbmRvIHF1ZSBhIG11bHRpZMOjbyBbaW50ZWlyYV17LmhsfSBjb2JyZSAkNTAkIHNldG9yZXMsIGNvbnN0cnVhIHVtIGludGVydmFsbyBkZSBjb25maWFuw6dhIHBhcmEgbyB0b3RhbCBkZSBwZXNzb2FzIG5hIG11bHRpZMOjby4KCiAgIGBgYHtyIGNoaWxkPSdtdWx0aWRhbzIuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCjEuIEZhw6dhIHVtIHRlc3RlIGRlIGhpcMOzdGVzZXMgcGFyYSBhdmFsaWFyIGEgYWZpcm1hw6fDo28gZGUgcXVlIGEgbXVsdGlkw6NvIFtpbnRlaXJhXXsuaGx9IGNvbnNpc3RlIGRlIFttYWlzIGRlICQzNSQgbWlsIHBlc3NvYXNdey5obH0uIFVzZSAkXGFscGhhID0gMHssfTA1JC4KCiAgIGBgYHtyIGNoaWxkPSdtdWx0aWRhbzMuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCgojIFB1bHNhw6fDo28gbcOpZGlhIGRlIG11bGhlcmVzCgoxLiBRdWFsIG8gdGFtYW5obyBtw61uaW1vIGRhIGFtb3N0cmEgbmVjZXNzw6FyaWEgcGFyYSBlc3RpbWFyLCBjb20gdW0gbsOtdmVsIGRlIGNvbmZpYW7Dp2EgZGUgJDk1XCUkIGUgdW1hIG1hcmdlbSBkZSBlcnJvIGRlICQyJCBiYXRpbWVudG9zIHBvciBtaW51dG8gKGJwbSksIGEgcHVsc2HDp8OjbyBtw6lkaWEgZGUgbXVsaGVyZXMgYWR1bHRhcz8gRGUgZXN0dWRvcyBhbnRlcmlvcmVzLCBwb2RlbW9zIHVzYXIgYSBpbmZvcm1hw6fDo28gZGUgcXVlIG8gZGVzdmlvIHBhZHLDo28gZGEgcG9wdWxhw6fDo28gw6kgJFxzaWdtYSA9IDEyeyx9NTQkIGJwbS4gCgogICBgYGB7ciBjaGlsZD0ncHVsc28xLlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAKICAgYGBgCgoxLiBPIHZldG9yIGBwdWxzYWNhb2AgY29udMOpbSBvcyB2YWxvcmVzIGRhcyBwdWxzYcOnw7VlcyAoZW0gYnBtKSBkZSBkaXZlcnNhcyBtdWxoZXJlcy4gCgogICAgYGBge3J9CiAgICBwdWxzYWNhbyA8LSBjKAogICAgICA4MCwgOTQsIDU4LCA2NiwgNTYsIDgyLCA3OCwgODYsIDg4LCA1NiwgMzYsIDY2LCA4NCwgNzYsIDc4LCA2NCwgNjYsIAogICAgICA3OCwgNjAsIDY0LCA4NCwgODIsIDcwLCA3NCwgODYsIDkwLCA4OCwgOTAsIDkwLCA5NCwgNjgsIDkwLCA4MiwgODAsIDc0LCAKICAgICAgNTYsIDEwMCwgNzQsIDc2LCA3NiwgODYsIDc0LCA2NiwgNjIsIDc4LCA2OCwgNjIsIDYyLCA3NCwgMTA0LCA1NCwgNzQsIAogICAgICA3NCwgODQsIDYwLCA1MiwgODQsIDY2LCA1NiwgNjYsIDg0LCA2NCwgNjQsIDc4LCAxMDQsIDg0LCA4NCwgNjIsIDgyLCA2NCwgCiAgICAgIDc4LCA3NiwgODYsIDcyLCA4MiwgODIsIDY2LCA1OCwgNjIsIDgwLCA1OCwgODIsIDc2LCA3MCwgODgsIDQ0LCA1OCwgNjQsIAogICAgICA2OCwgNzAsIDU4LCA3MiwgODAsIDcwLCA3NCwgNzIsIDY2LCA4MiwgOTgsIDc0LCA4MCwgODIsIDU2LCA3OCwgMTAwLCA1NiwgCiAgICAgIDY4LCA3MiwgNjQsIDk0LCA3MiwgNTYsIDgwLCA3NiwgNTYsIDU2LCA1NCwgNzIsIDcwLCA4MCwgNzIsIDYyLCA5NiwgNzIsIAogICAgICA2MCwgOTgsIDcyLCA4MCwgODQsIDY4LCA4NiwgNzIsIDgwLCA2NCwgODIsIDgwLCA2MiwgNzQsIDk2LCA3MiwgOTYsIDY0LCAKICAgICAgNjIsIDgyLCA3NiwgOTQsIDc0CiAgICApCiAgICBgYGAKCjEuIFRlc3RlIGEgYWZpcm1hw6fDo28gZGUgcXVlIGEgcHVsc2HDp8OjbyBtw6lkaWEgZGUgbXVsaGVyZXMgYWR1bHRhcyDDqSBbbWVub3IgZG8gcXVlICQ3MCQgYnBtXXsuaGx9LiBVc2UgJFxhbHBoYSA9IDB7LH0wNSQuIFVzZSBvIGZhdG8gZGUgcXVlICRcc2lnbWEgPSAxMnssfTU0JCBicG0uCgogICBgYGB7ciBjaGlsZD0ncHVsc28zLlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAKICAgYGBgCgoxLiBSZWZhw6dhIG8gaXRlbSBhbnRlcmlvciBbc2VtIHVzYXIgbyBmYXRvIGRlIHF1ZSAkXHNpZ21hID0gMTJ7LH01NCQgYnBtLl17LmhsfQoKICAgYGBge3IgY2hpbGQ9J3B1bHNvNC5SbWQnLCBldmFsPWdhYmFyaXRvfQogICAgCiAgIGBgYAoKMS4gQ29tcGFyZSBlIGNvbWVudGUgb3MgcmVzdWx0YWRvcy4KCiAgIGBgYHtyIGNoaWxkPSdwdWxzbzUuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCgojIFBsYXlTdGF0aW9ucyBjb20gKmJvb3RzdHJhcHBpbmcqCgpFbSB1bWEgYW1vc3RyYSAkQSQgZGUgJDIwMCQgcGVzc29hcywgJDEyNCQgcG9zc3VlbSB1bSBQbGF5U3RhdGlvbi4KCk8gbcOpdG9kbyBkZSAqYm9vdHN0cmFwcGluZyogY29uc2lzdGUgZW0gc2ltdWxhciBtdWl0YXMgYW1vc3RyYXMgLS0tIFtjb20gcmVwb3Npw6fDo29dey5obH0gLS0tIGEgcGFydGlyIGRvcyBlbGVtZW50b3MgZGVzdGEgYW1vc3RyYSBvcmlnaW5hbCAkQSQuIEEgcGFydGlyIGRlc3RhcyBtdWl0YXMgYW1vc3RyYXMgc2ltdWxhZGFzLCB2b2PDqiBwb2RlIGNhbGN1bGFyIGludGVydmFsb3MgZGUgY29uZmlhbsOnYSBjb21vIGV4cGxpY2FkbyBhYmFpeG86CgoxLiBBcm1hemVuZSwgZW0gdW1hIGxpc3RhLCAkMTAkIG1pbCBhbW9zdHJhcywgY2FkYSB1bWEgY29tICQyMDAkIHBlc3NvYXMgc29ydGVhZGFzIFtjb20gcmVwb3Npw6fDo29dey5obH0gYSBwYXJ0aXIgZGEgYW1vc3RyYSBvcmlnaW5hbCAkQSQgYWNpbWEgKGNvbSB0b2RhcyBhcyAkMjAwJCBwZXNzb2FzIHRlbmRvIGEgbWVzbWEgcHJvYmFiaWxpZGFkZSBkZSBzb3J0ZWlvKS4KCiAgIGBgYHtyIGNoaWxkPSdwczEuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCjEuIEFybWF6ZW5lLCBlbSB1bSB2ZXRvciBkZSAkMTAkIG1pbCBlbGVtZW50b3MsIGFzIHByb3BvcsOnw7VlcyBkZSBwb3NzdWlkb3JlcyBkZSBQbGF5U3RhdGlvbnMgbmFzIGFtb3N0cmFzIG9idGlkYXMgbm8gaXRlbSBhbnRlcmlvci4KCiAgIGBgYHtyIGNoaWxkPSdwczIuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCjEuIEltcHJpbWEgb3MgdmFsb3JlcyBkZXN0ZSB2ZXRvciBxdWUgZXN0w6NvIG5vIHF1YW50aWwgJDB7LH0wNSQgZSBubyBxdWFudGlsICQweyx9OTUkLiBFc3RlcyBzw6NvIG9zIGV4dHJlbW9zIGRvIGludGVydmFsbyBkZSBjb25maWFuw6dhIHBhcmEgYSBwcm9wb3LDp8OjbyBkZSBwb3NzdWlkb3JlcyBkZSBQbGF5U3RhdGlvbnMgbmEgcG9wdWxhw6fDo28sIGNvbSAkOTVcJSQgZGUgY29uZmlhbsOnYSwgY2FsY3VsYWRvcyB2aWEgKmJvb3RzdHJhcHBpbmcqLgoKICAgW1VtYSBkYXMgdmFudGFnZW5zIGRvICpib290c3RyYXBwaW5nKiDDqSBuw6NvIHByZWNpc2FyIGRlIHF1YWxxdWVyIGNvbmhlY2ltZW50byBzb2JyZSBhIHBvcHVsYcOnw6NvIC0tLSBzdWEgZGlzdHJpYnVpw6fDo28sIHN1YSB2YXJpw6JuY2lhIGV0Yy5dey5obH0KICAgCiAgIGBgYHtyIGNoaWxkPSdwczMuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCjEuIFVzZSBhIGZ1bsOnw6NvIGBwcm9wLnRlc3QoKWAgZG8gUiBwYXJhIGNvbnN0cnVpciB1bSBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYSBwYXJhIGEgcHJvcG9yw6fDo28gZGUgcG9zc3VpZG9yZXMgZGUgUGxheVN0YXRpb25zIG5hIHBvcHVsYcOnw6NvLCBjb20gJDk1XCUkIGRlIGNvbmZpYW7Dp2EgLS0tIFtuw6NvIMOpIG5lY2Vzc8OhcmlvIGZhemVyIG9zIGPDoWxjdWxvcyBwYXNzbyBhIHBhc3NvLl17LmhsfSAKCiAgIGBgYHtyIGNoaWxkPSdwczQuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCjEuIENvbXBhcmUgY29tIG8gcmVzdWx0YWRvIGRvICpib290c3RyYXBwaW5nKi4KCiAgIGBgYHtyIGNoaWxkPSdwczUuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCgojIFRlbGVmb25lcyBjZWx1bGFyZXMgY29tICpib290c3RyYXBwaW5nKgoKVW1hIGFtb3N0cmEgZGFzIHF1YW50aWRhZGVzIGRlIHJhZGlhw6fDo28gZW1pdGlkYXMgcG9yIHRlbGVmb25lcyBjZWx1bGFyZXMgY29uc2lzdGUgZG9zIHNlZ3VpbnRlcyB2YWxvcmVzOgoKYGBge3J9CnJhZGlhY2FvIDwtIGMoMzgsIDU1LCA4NiwgOTEsIDk5LCAxMDMsIDE0NSkKYGBgCgpPIG3DqXRvZG8gZGUgKmJvb3RzdHJhcHBpbmcqIGNvbnNpc3RlIGVtIHNpbXVsYXIgbXVpdGFzIGFtb3N0cmFzIC0tLSBbY29tIHJlcG9zacOnw6NvXXsuaGx9IC0tLSBhIHBhcnRpciBkb3MgZWxlbWVudG9zIGRlc3RhIGFtb3N0cmEgb3JpZ2luYWwuIEEgcGFydGlyIGRlc3RhcyBtdWl0YXMgYW1vc3RyYXMgc2ltdWxhZGFzLCB2b2PDqiBwb2RlIGNhbGN1bGFyIGludGVydmFsb3MgZGUgY29uZmlhbsOnYSBjb21vIGV4cGxpY2FkbyBhYmFpeG86CgoxLiBBcm1hemVuZSwgZW0gdW1hIGxpc3RhLCAkMTAkIG1pbCBhbW9zdHJhcywgY2FkYSB1bWEgY29tICRgciBsZW5ndGgocmFkaWFjYW8pYCQgZWxlbWVudG9zIHNvcnRlYWRvcyBbY29tIHJlcG9zacOnw6NvXXsuaGx9IGEgcGFydGlyIGRvIHZldG9yIGByYWRpYWNhb2AgKGNvbSB0b2RvcyBvcyBlbGVtZW50b3MgdGVuZG8gYSBtZXNtYSBwcm9iYWJpbGlkYWRlIGRlIHNvcnRlaW8pLgoKICAgYGBge3IgY2hpbGQ9J3RlbDEuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCjEuIEFybWF6ZW5lLCBlbSB1bSB2ZXRvciBkZSAkMTAkIG1pbCBlbGVtZW50b3MsIGFzIG3DqWRpYXMgZGFzIGFtb3N0cmFzIG9idGlkYXMgbm8gaXRlbSBhbnRlcmlvci4KCiAgIGBgYHtyIGNoaWxkPSd0ZWwyLlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAKICAgYGBgCgoxLiBJbXByaW1hIG9zIHZhbG9yZXMgZGVzdGUgdmV0b3IgcXVlIGVzdMOjbyBubyBxdWFudGlsICQweyx9MDUkIGUgbm8gcXVhbnRpbCAkMHssfTk1JC4gRXN0ZXMgc8OjbyBvcyBleHRyZW1vcyBkbyBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYSBwYXJhIGEgcmFkaWHDp8OjbyBtw6lkaWEgbmEgcG9wdWxhw6fDo28sIGNvbSAkOTVcJSQgZGUgY29uZmlhbsOnYSwgY2FsY3VsYWRvcyB2aWEgKmJvb3RzdHJhcHBpbmcqLgoKICAgW1VtYSBkYXMgdmFudGFnZW5zIGRvICpib290c3RyYXBwaW5nKiDDqSBuw6NvIHByZWNpc2FyIGRlIHF1YWxxdWVyIGNvbmhlY2ltZW50byBzb2JyZSBhIHBvcHVsYcOnw6NvIC0tLSBzdWEgZGlzdHJpYnVpw6fDo28sIHN1YSB2YXJpw6JuY2lhIGV0Yy5dey5obH0KICAgCiAgIGBgYHtyIGNoaWxkPSd0ZWwzLlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAKICAgYGBgCiAgIAoxLiBVc2UgYSBmdW7Dp8OjbyBgdC50ZXN0KClgIGRvIFIgcGFyYSBjb25zdHJ1aXIgdW0gaW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EgcGFyYSBhIHJhZGlhw6fDo28gbcOpZGlhLCBjb20gJDk1XCUkIGRlIGNvbmZpYW7Dp2EgLS0tIFtuw6NvIMOpIG5lY2Vzc8OhcmlvIGZhemVyIG9zIGPDoWxjdWxvcyBwYXNzbyBhIHBhc3NvLl17LmhsfSAKCiAgIGBgYHtyIGNoaWxkPSd0ZWw0LlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAKICAgYGBgCgoxLiBDb21wYXJlIGNvbSBvIHJlc3VsdGFkbyBkbyAqYm9vdHN0cmFwcGluZyouCgogICBgYGB7ciBjaGlsZD0ndGVsNS5SbWQnLCBldmFsPWdhYmFyaXRvfQogICAgCiAgIGBgYAoKCiMgU29uaGFuZG8gZW0gY29yZXMgb3UgZW0gcHJldG8gZSBicmFuY29eW0Jhc2VhZG8gZW0gTXVyenluLCBFLiAoMjAwOCkuICJEbyB3ZSBvbmx5IGRyZWFtIGluIGNvbG91cj8gYSBjb21wYXJpc29uIG9mIHJlcG9ydGVkIGRyZWFtIGNvbG91ciBpbiB5b3VuZ2VyIGFuZCBvbGRlciBhZHVsdHMgd2l0aCBkaWZmZXJlbnQgZXhwZXJpZW5jZXMgb2YgYmxhY2sgYW5kIHdoaXRlIG1lZGlhLiIgKkNvbnNjaW91c25lc3MgYW5kIENvZ25pdGlvbiosIDE3KDQpLCAxMjI44oCTMTIzNy4gaHR0cDovL2R4LmRvaS5vcmcvMTAuMTAxNi9qLmNvbmNvZy4yMDA4LjA5LjAwMl0KCkRlbnRyZSAkMzA2JCBwZXNzb2FzIFtjb20gbWFpcyBkZSAkNTUkIGFub3Ndey5obH0sICQ2OCQgZGlzc2VyYW0gcXVlIHNvbmhhbSBlbSBwcmV0byBlIGJyYW5jby4KCkRlbnRyZSAkMjk4JCBwZXNzb2FzIFtjb20gbWVub3MgZGUgJDI1JCBhbm9zXXsuaGx9LCAkMTMkIGRpc3NlcmFtIHF1ZSBzb25oYW0gZW0gcHJldG8gZSBicmFuY28uCgoxLiBDb25zdHJ1YSB1bSBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYSBkZSAkOTlcJSQgcGFyYSBhIGRpZmVyZW7Dp2EgZW50cmUgYXMgZHVhcyBwcm9wb3LDp8O1ZXMuCgogICBgYGB7ciBjaGlsZD0nc29uaG8xLlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAKICAgYGBgCgoxLiBUZXN0ZSBhIGFmaXJtYcOnw6NvIGRlIHF1ZSBhIHByb3BvcsOnw6NvIGRlIHBlc3NvYXMgW2NvbSBtYWlzIGRlICQ1NSQgYW5vc117LmhsfSBxdWUgc29uaGFtIGVtIHByZXRvIGUgYnJhbmNvIMOpIFttYWlvciBkbyBxdWVdey5obH0gYSBwcm9wb3LDp8OjbyBkZSBwZXNzb2FzIFtjb20gbWVub3MgZGUgJDI1JCBhbm9zXXsuaGx9IHF1ZSBzb25oYW0gZW0gcHJldG8gZSBicmFuY28uIFVzZSAkXGFscGhhID0gMHssfTAxJC4KCiAgIGBgYHtyIGNoaWxkPSdzb25obzIuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCgojIFByb2Zlc3NvcmVzICRcdGltZXMkIHByb2Zlc3NvcmFzXltCYXNlYWRvIGVtIEFuZHJldyBHZWxtYW4gZSBKZW5uaWZlciBIaWxsICgyMDA5KSwgIlJlcGxpY2F0aW9uIERhdGEgZm9yIERhdGEgQW5hbHlzaXMgVXNpbmcgUmVncmVzc2lvbiBNdWx0aWxldmVsIEhpZXJhcmNoaWNhbCBNb2RlbHMiLCBodHRwOi8vaGRsLmhhbmRsZS5uZXQvMTkwMi4xLzEwMjg1Cl0KClByb2Zlc3NvcmFzIG11bGhlcmVzIHJlY2ViZW0gYXZhbGlhw6fDtWVzIG1lbGhvcmVzIGRvIHF1ZSBwcm9mZXNzb3JlcyBob21lbnM/CgpFbSB1bWEgdW5pdmVyc2lkYWRlLCBhcyBwcm9mZXNzb3JhcyBtdWxoZXJlcyByZWNlYmVyYW0gYXMgc2VndWludGVzIG5vdGFzIGRvcyBhbHVub3M6CgpgYGB7cn0KbXVsaGVyZXMgPC0gYygKIDQuMywgNC4zLCA0LjQsIDQuMCwgMy40LCA0LjcsIDIuOSwgNC4wLCA0LjMsIDMuNCwgMy40LCAzLjMKKQpgYGAKCk5hIG1lc21hIHVuaXZlcnNpZGFkZSwgb3MgcHJvZmVzc29yZXMgaG9tZW5zIHJlY2ViZXJhbSBhcyBzZWd1aW50ZXMgbm90YXM6CgpgYGB7cn0KaG9tZW5zIDwtIGMoCiA0LjUsIDMuNywgNC4yLCAzLjksIDMuMSwgNC4wLCAzLjgsIDMuNCwgNC41LCAzLjgsIDQuMywgNC40LCA0LjEsIDQuMiwgNC4wCikKYGBgCgpOYWRhIMOpIHNhYmlkbyBzb2JyZSBhcyB2YXJpw6JuY2lhcyBkYXMgZHVhcyBwb3B1bGHDp8O1ZXMuCgoxLiBDb25zdHJ1YSB1bSBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYSBkZSAkOTVcJSQgcGFyYSBhIGRpZmVyZW7Dp2EgZW50cmUgYXMgbcOpZGlhcy4KCiAgIGBgYHtyIGNoaWxkPSdwcm9mMS5SbWQnLCBldmFsPWdhYmFyaXRvfQogICAgCiAgIGBgYAoKMS4gVGVzdGUgYSBhZmlybWHDp8OjbyBkZSBxdWUgYXMgbcOpZGlhcyBzw6NvIGRpZmVyZW50ZXMuIFVzZSAkXGFscGhhID0gMHssfTA1JC4KCiAgIGBgYHtyIGNoaWxkPSdwcm9mMi5SbWQnLCBldmFsPWdhYmFyaXRvfQogICAgCiAgIGBgYAoKCiMgTXVsaGVyZXMgJFx0aW1lcyQgbWFyaWRvc15bQmFzZWFkbyBlbSBNZWhsLCBNLiBSLiwgVmF6aXJlLCBTLiwgTmFpcsOhbiBSYW3DrXJlei1Fc3BhcnphLCBTbGF0Y2hlciwgUi4gQi4sICYgUGVubmViYWtlciwgSi4gVy4gKDIwMDcpLiAiQXJlIFdvbWVuIFJlYWxseSBNb3JlIFRhbGthdGl2ZSBUaGFuIE1lbj8iLCAqU2NpZW5jZSosIDMxNyg1ODM0KSwgODIuIGh0dHA6Ly9keC5kb2kub3JnLzEwLjExMjYvc2NpZW5jZS4xMTM5OTQwXQoKQSB0YWJlbGEgYWJhaXhvIG1vc3RyYSBhcyBxdWFudGlkYWRlcyBkZSBwYWxhdnJhcyBmYWxhZGFzIGVtIHVtIGRpYSBwZWxvcyBtYXJpZG9zIGUgbXVsaGVyZXMgZW0gJDgkIGNhc2FpczoKCmBgYHtyIGVjaG89RkFMU0V9CmRmIDwtIHRpYmJsZSgKICBjYXNhbCA9IDE6OCwKICBtYXJpZG8gPSBjKAogICAgMTU2ODQsCiAgICAyNjQyOSwKICAgICAxNDExLAogICAgIDc3NzEsCiAgICAxODg3NiwKICAgIDE1NDc3LAogICAgMTQwNjksCiAgICAyNTgzNQogICksCiAgbXVsaGVyID0gYygKICAgIDI0NjI1LAogICAgMTMzOTcsCiAgICAxODMzOCwKICAgIDE3NzkxLAogICAgMTI5NjQsCiAgICAxNjkzNywKICAgIDE2MjU1LAogICAgMTg2NjcKICApCikKCmRmICU+JSBrYmwoCiAgZGlnaXRzID0gOSwgCiAgYWxpZ24gPSAncicsIAogIGZvcm1hdC5hcmdzID0gbGlzdChiaWcubWFyayA9ICcuJykKKSAlPiUgCmthYmxlX3BhcGVyKAogIGMoJ3N0cmlwZWQnLCAnaG92ZXInKSwKICBmdWxsX3dpZHRoID0gRkFMU0UKKQpgYGAKCjEuIENvbnN0cnVhIHVtIGludGVydmFsbyBkZSBjb25maWFuw6dhIGRlICQ5NVwlJCBwYXJhIGEgZGlmZXJlbsOnYSBtw6lkaWEgZW50cmUgYXMgcXVhbnRpZGFkZXMgZGUgcGFsYXZyYXMgZmFsYWRhcyBwZWxvcyBkb2lzIGPDtG5qdWdlcyBkZSB1bSBjYXNhbC4KCiAgIGBgYHtyIGNoaWxkPSdjYXNhaXMxLlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAKICAgYGBgCgoxLiBUZXN0ZSBhIGFmaXJtYcOnw6NvIGRlIHF1ZSwgZW0gY2FzYWlzIGVtIGdlcmFsLCBhIG11bGhlciBmYWxhIG1haXMgZG8gcXVlIG8gaG9tZW0uIFVzZSAkXGFscGhhID0gMHssfTA1JC4KCiAgIGBgYHtyIGNoaWxkPSdjYXNhaXMyLlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAKICAgYGBgCgojIFRlbXBlcmF0dXJhIGNvcnBvcmFsIGNvbSAqYm9vdHN0cmFwcGluZyoKCkEgdGFiZWxhIGFiYWl4byBtb3N0cmEgYXMgdGVtcGVyYXR1cmEgY29ycG9yYWlzIChlbSBncmF1cyBDZWxzaXVzKSBkZSAkMzIkIHBlc3NvYXMsIG1lZGlkYXMgZGUgbWFuaMOjIGUgZGUgdGFyZGU6CgpgYGB7ciBlY2hvPUZBTFNFfQpkZiA8LSB0aWJibGUoCiAgcGVzc29hID0gMTozMiwKICBtYW5ow6MgPSBjKAogICAgMzYuNywgMzcsIDM2LjMsIDM2LjgsIDM2LjgsIDM2LjgsIDM1LjksIDM2LjMsIDM2LjMsIDM2LjgsIDM2LjMsIDM2LjYsCiAgICAzNi45LCAzNi40LCAzNS43LCAzNi43LCAzNy4xLCAzNy40LCAzNy4xLCAzNi41LCAzNy4yLCAzNi43LCAzNy4xLCAzNi40LAogICAgMzcuMiwgMzYuOSwgMzYuMiwgMzcuMSwgMzYuMywgMzcuMSwgMzcuMiwgMzcuMwogICksCiAgdGFyZGUgPSBjKAogICAgMzYuNywgMzcuMSwgMzYuNywgMzcuMSwgMzcuMSwgMzYuNCwgMzcsIDM3LCAzNy4xLCAzNi43LCAzNi44LCAzNi43LAogICAgMzYuNywgMzYuMSwgMzYuMiwgMzYuOCwgMzcuMSwgMzcuNCwgMzYuNiwgMzYuOSwgMzYuNSwgMzYuOCwgMzYuNSwgMzYuMiwKICAgIDM2LjksIDM3LCAzNi4zLCAzNS45LCAzNi4xLCAzNi45LCAzNi44LCAzNwogICkKKQoKZGYgJT4lIGtibCgKICBkaWdpdHMgPSA5LCAKICBhbGlnbiA9ICdyJywgCiAgZm9ybWF0LmFyZ3MgPSBsaXN0KGJpZy5tYXJrID0gJy4nKQopICU+JSAKa2FibGVfcGFwZXIoCiAgYygnc3RyaXBlZCcsICdob3ZlcicpLAogIGZ1bGxfd2lkdGggPSBGQUxTRQopCmBgYAoKTyBtw6l0b2RvIGRlICpib290c3RyYXBwaW5nKiBjb25zaXN0ZSBlbSBzaW11bGFyIG11aXRhcyBhbW9zdHJhcyAtLS0gW2NvbSByZXBvc2nDp8Ojb117LmhsfSAtLS0gYSBwYXJ0aXIgZG9zIGVsZW1lbnRvcyBkZXN0YSBhbW9zdHJhIG9yaWdpbmFsLiBBIHBhcnRpciBkZXN0YXMgbXVpdGFzIGFtb3N0cmFzIHNpbXVsYWRhcywgdm9jw6ogcG9kZSBjYWxjdWxhciBpbnRlcnZhbG9zIGRlIGNvbmZpYW7Dp2EgY29tbyBleHBsaWNhZG8gYWJhaXhvOgoKMS4gQ2FsY3VsZSBhIGRpZmVyZW7Dp2EgZW50cmUgYSB0ZW1wZXJhdHVyYSBtYXRpbmFsIGUgYSB0ZW1wZXJhdHVyYSB2ZXNwZXJ0aW5hIHBhcmEgY2FkYSBwZXNzb2EsIGFybWF6ZW5hbmRvIG9zIHJlc3VsdGFkb3MgZW0gdW0gdmV0b3IgYGRpZmVyZW5jYXNgLCBjb20gJDMyJCB2YWxvcmVzLgoKICAgYGBge3IgY2hpbGQ9J3RlbXAxLlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAKICAgYGBgCgoxLiBBcm1hemVuZSwgZW0gdW1hIGxpc3RhLCAkMTAkIG1pbCBhbW9zdHJhcywgY2FkYSB1bWEgY29tICQzMiQgZWxlbWVudG9zIHNvcnRlYWRvcyBbY29tIHJlcG9zacOnw6NvXXsuaGx9IGEgcGFydGlyIGRvIHZldG9yIGBkaWZlcmVuY2FzYCAoY29tIHRvZG9zIG9zIGVsZW1lbnRvcyB0ZW5kbyBhIG1lc21hIHByb2JhYmlsaWRhZGUgZGUgc29ydGVpbykuCgogICBgYGB7ciBjaGlsZD0ndGVtcDIuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCjEuIEFybWF6ZW5lLCBlbSB1bSB2ZXRvciBkZSAkMTAkIG1pbCBlbGVtZW50b3MsIGFzIG3DqWRpYXMgZGFzIGFtb3N0cmFzIG9idGlkYXMgbm8gaXRlbSBhbnRlcmlvci4KCiAgIGBgYHtyIGNoaWxkPSd0ZW1wMy5SbWQnLCBldmFsPWdhYmFyaXRvfQogICAgCiAgIGBgYAoKMS4gSW1wcmltYSBvcyB2YWxvcmVzIGRlc3RlIHZldG9yIHF1ZSBlc3TDo28gbm8gcXVhbnRpbCAkMHssfTA1JCBlIG5vIHF1YW50aWwgJDB7LH05NSQuIEVzdGVzIHPDo28gb3MgZXh0cmVtb3MgZG8gaW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EgcGFyYSBhIGRpZmVyZW7Dp2EgbcOpZGlhIGRlIHRlbXBlcmF0dXJhIG5hIHBvcHVsYcOnw6NvLCBjb20gJDk1XCUkIGRlIGNvbmZpYW7Dp2EsIGNhbGN1bGFkb3MgdmlhICpib290c3RyYXBwaW5nKi4KCiAgIFtVbWEgZGFzIHZhbnRhZ2VucyBkbyAqYm9vdHN0cmFwcGluZyogw6kgbsOjbyBwcmVjaXNhciBkZSBxdWFscXVlciBjb25oZWNpbWVudG8gc29icmUgYSBwb3B1bGHDp8OjbyAtLS0gc3VhIGRpc3RyaWJ1acOnw6NvLCBzdWEgdmFyacOibmNpYSBldGMuXXsuaGx9CiAgIAogICBgYGB7ciBjaGlsZD0ndGVtcDQuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCjEuIFVzZSBhIGZ1bsOnw6NvIGB0LnRlc3QoKWAgZG8gUiBwYXJhIGNvbnN0cnVpciB1bSBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYSBwYXJhIGEgZGlmZXJlbsOnYSBtw6lkaWEgZGUgdGVtcGVyYXR1cmEgbmEgcG9wdWxhw6fDo28sIGNvbSAkOTVcJSQgZGUgY29uZmlhbsOnYSAtLS0gW27Do28gw6kgbmVjZXNzw6FyaW8gZmF6ZXIgb3MgY8OhbGN1bG9zIHBhc3NvIGEgcGFzc28uXXsuaGx9IAoKICAgYGBge3IgY2hpbGQ9J3RlbXA1LlJtZCcsIGV2YWw9Z2FiYXJpdG99CiAgICAKICAgYGBgCgoxLiBDb21wYXJlIGNvbSBvIHJlc3VsdGFkbyBkbyAqYm9vdHN0cmFwcGluZyouCgogICBgYGB7ciBjaGlsZD0ndGVtcDYuUm1kJywgZXZhbD1nYWJhcml0b30KICAgIAogICBgYGAKCgo8ZGl2IHN0eWxlPSdoZWlnaHQ6IDUwcHgnPjwvZGl2PgoKIyBOb3RhcyB7LX0KCg==