alt text

GET00130 - Métodos Computacionais para Estatística II

Jony Arrais Pinto Junior

Conteúdo da aula

  • Teste de normalidade.
  • Teste de hipóteses para a média.

1 - Verificando normalidade nos dados

Vários dos procedimentos estudados requerem a suposição de normalidade dos dados. Até então, estávamos adotando a prática de assumir que essa suposição era razoável. Entretanto, algumas dessas técnicas aprendidas, nos permitirá checar se essa suposição parece razoável ou não. Estamos falando dos testes de hipóteses.

Entretanto, antes de realizarmos um teste de hipóteses seria interessante fazer algum tipo de inspeção visual. Um dos gráfico mais recomendados nesse sentido, é o gráfico QQ-plot.

O QQ-plot é um gráfico que compara os quantis teóricos de uma distribuição de probabilidade com os quantis amostrais. Quando os quantis amostrais se comportam de forma similar com os quantis teóricos, temos um indicativo de que é razoável supor que a amostra é proveniente da distribuição de probabilidade verificada.

Suponha que queiramos verificar se os dados da altura são proveniente de uma normal. Inicialmente vamos analisar o comportamento do QQ-plot.

Mas para isso, precisamos pensar qual distribuição normal seria a mais razoável de se supor nesse caso. Para definir a distribuição normal, é preciso especificar os parâmetros \(\mu\) e \(\sigma^2\).

Neste caso, usualmente, utilizamos como média e variância da distribuição a estimativa da média e da variância amostral, respectivamente.

#Carregando pacote
library(tidyverse)

#Importando os dados
base = read_rds("Medidas.rds")

#Criando um qq-plot com o ggplot2
ggplot(data = base, 
       mapping = aes(sample = altura)) +
  stat_qq(distribution = qnorm,
          dparams = list(mean = mean(base$altura,
                                     na.rm = TRUE),
                         sd = sd(base$altura,
                                 na.rm = TRUE))) +
  stat_qq_line(distribution = qnorm,
          dparams = list(mean = mean(base$altura,
                                     na.rm = TRUE),
                         sd = sd(base$altura,
                                 na.rm = TRUE)))

A ideia do gráfico é comparar se os pontos se encontram próximos a reta. Percebam que no gráfico criado, informamos no stat_qq qual a distribuição de probabilidade que estamos interessados em comparar os quantis teóricos com os quantis amostrais. E ainda, informamos no stat_qq_line a distribuição com seus respectivos parâmetros, pois se não o fizermos, ele plotara a função para o caso N(0,1).

Avaliando o gráfico, parece não haver grandes desvios entre os quantis (teóricos e amostrais).

Uma outra forma de obter o mesmo gráfico é usar a função ggqqplot do pacote ggpubr.

#Carregando pacote
library(ggpubr)

#Criando um qq-plot com o ggpubr
ggqqplot(data = base$altura)

Esta função plota os quantis teóricos e amostrais, a reta de comparação e uma banda de confiança (que seria o equivalente a um intervalo de confiança) onde os a grande maioria dos pontos deveriam cair. O gráfio parece mais informativo que o anterior. Existe alguma desvantagem? Se você estivesse interessado em verificar graficamente se a amostra é proveniente de uma normal com média 2 e variância 1, você precisaria usar o ggplot2, pois a função ggqqplot usa como valores para a média e a variância da Normal as estimativas obtidas a partir da amostra.

Entretanto, esta é uma análise exploratória. Não podemos fazer afirmações. Para tal, iremos discutir uma outra ferramenta estatística, o teste de hipóteses.

O teste de hipóteses é uma regra de decisão que nos permite rejeitar ou não uma hipótese estatística por meio da evidência fornecida pela amostra.

Sendo assim, existem diversos testes de hipóteses (para média, proporção, variância), incluindo testes apropriados para testar a hipótese de normalidade dos dados. Entre as diversas opções existentes na literatura, aqui iremos discutir os testes de Kolmogorov-Smirnov e Shapiro-Wilk.

1.1 - Teste de Kolmogorov-Smirnov

É um teste de aderência a distribuições de probabilidade, incluindo a normal. Com este teste é possível checar a hipótese de que os dados são provenientes de uma determinada distribuição de probabilidade. Este teste baseia-se na função de distribuição empírica, isto é, o teste compara a função de distribuição empírica com a função de distribuição acumulada de uma determinada distribuição de probabilidade.

Hipóteses do teste:

\(H_0\): \(F(x) = F_0(x) \forall x\),

\(H_1\): \(F(x) \neq F_0(x) \mbox{ para algum } x\).

Ou poderíamos reescrever as hipóteses do teste como:

\(H_0\): os dados são provenientes de uma determinada distribuição de probabilidade,

\(H_1\): os dados não são provenientes de uma determinada distribuição de probabilidade.

Em particular, quando \(F_0(x)\) for a função de distribuição acumulada da normal, estaremos fazendo um teste de normalidade.

A estatística do teste de Kolmogorov-Smirnov é baseada na maior diferença absoluta entre a função de distribuição empírica \(F(x)\) e a função de distribuição acumulada da variável a ser testada \(F_0(x)\).

No R, realizamos o teste de Kolmogorov-Smirnov por meio da função ks.test. É preciso informar um vetor com os dados, indicar a função que calcula a função de distribuição acumulada (no caso da normal é a pnorm) e indicar os parâmteros da distribuição \(\mu\) e \(\sigma\). Neste caso, iremos utilizar as estimativas amostrais.

#Obtendo media e desvio padrao
media = mean(base$altura, 
             na.rm = TRUE)
desvio = sd(base$altura, 
            na.rm = TRUE)

#Visualizando as estimativas
media
[1] 1.6888
desvio
[1] 0.1203232
ks.test(x = base$altura, "pnorm", mean = media , sd = desvio)

    One-sample Kolmogorov-Smirnov test

data:  base$altura
D = 0.10551, p-value = 0.9436
alternative hypothesis: two-sided

Com base no p-valor observado (p = 0,9436), se adotarmos um nível de significância de 0,01, não rejeitamos \(H_0\), ou seja, não existem evidências nos dados para irmos contra a hipótese que assume normalidade \(N(1.6888,(0.1203232)^2)\) para os dados de altura, confirmando as impressões fornecidas pelo QQ-plot.

1.1 - Teste de Shapiro-Wilk

É um teste específico de normalidade, diferente do Kolmogorov-Smirnov. Este teste baseia-se na comparação de duas medidas de variação.

Hipóteses do teste:

\(H_0\): os dados são provenientes de uma distribuição normal,

\(H_1\): os dados não são provenientes de uma distribuição normal.

shapiro.test(x = base$altura)

    Shapiro-Wilk normality test

data:  base$altura
W = 0.97916, p-value = 0.868

Se analisarmos a saída do teste, com base em um nível de significância de 1%, não rejeitamos \(H_0\), ou seja, não existe evidências para desconfiarmos que a amostra não seja proveniente de uma distribuição normal.

Existem diversos trabalhos na literatura que discutem a eficácia destes testes e de muitos outros. É sabido que o tamanho da amostra pode influenciar no erro tipo I dos testes. Usualmente, recomenda-se o uso do teste de Shapiro-Wilk em cenários com tamanhos de amostra pequeno. Para uma discussão mais detalhada leiam o texto Avaliação da normalidade dos dados em estudos clínicos e experimentais e o Comparação dos testes de aderência à normalidade Kolmogorov-Smirnov, Anderson-Darling, Cramer-Von Mises e Shapiro-Wilk por simulação.

2 - Teste de hipóteses para a média de uma população normal com variância desconhecida

Agora vamos discutir o problema de se testar uma afirmação sobre a média de uma população normal com variância desconhecida.

Suponha que desejamos testar se a altura média é superior de 1,67m. Como verificar essa afirmação?

Neste momento, vocês estão estudando testes de hipóteses, no qual a hipótese nula é uma hipótese simples (um único valor para o parâmetro) e a hipótese alternativa é composta (vários valores para o parâmetro).

No problema levantado queremos testar as seguintes hipóteses

\(H_0\): a idade média é igual a 1,67 metros (\(\mu = 1,67\)),

\(H_1\): a idade média é superior a 1,67 metros (\(\mu > 1,67\)).

Para executarmos o teste acima, usaremos a função t.test.

A seguir, vamos apresentar os principais argumentos da função t.test:

  - x - o vetor com a amostra;

  - mu - o valor do parâmetro que definem as hipóteses (default = 0);

  - alternative - argumento que define se o teste é bilateral ou unilateral a esquerda e a direita (default = bilateral - two.sided).

#Realizando o teste de hipóteses
t.test(x = base$altura,
       mu = 1.67,
       alternative = "greater")

    One Sample t-test

data:  base$altura
t = 0.78123, df = 24, p-value = 0.2212
alternative hypothesis: true mean is greater than 1.67
95 percent confidence interval:
 1.647628      Inf
sample estimates:
mean of x 
   1.6888 

A saída do teste contém várias informações: o valor da estatística do teste \(t\), o número de graus de liberdade da estatística de teste \(df\) e o p-valor associado as hipóteses especificadas. Ele deixa explícito qual a hipótese alternativa “true mean is greater than 1.73” que significa “a verdadeira média é maior que 1.73”. Fornece também um intervalo de confiança unilateral (que não tem muita utilizada a menos que fosse um teste bilateral) e o valor de uma estimativa pontual.

Note que, mesmo com uma estimativa pontual superior a 1,67 (aproximadamente 1,69), com base em um nível de significância de 5%, não rejeitamos \(H_0\), não encontramos evidências para acreditar que a altura média seja superior a 1,67m.

Suponha que desejamos investigar se o peso é inferior a 70 Kg. Realize a análise mais completa possível para investigar essa afirmação.

#Verificando normalidade dos dados
ggqqplot(data = base$peso)

#Testando normalidade
shapiro.test(x = base$peso)

    Shapiro-Wilk normality test

data:  base$peso
W = 0.97305, p-value = 0.7228
#Avaliando o comportamento dos valores da variável peso
ggplot(data = base, 
       mapping = aes(y = peso)) +
  geom_boxplot() +
  theme_minimal() +
  labs(y = "Peso (em Kg)")

#Obtendo uma estimativa pontual e uma intervalar
library(Publish)
ci.mean(x = base$peso,
        alpha = 0.05)
 mean  CI-95%       
 69.00 [67.00;71.00]
#Realizando o teste de hipóteses
t.test(x = base$peso,
       mu = 70,
       alternative = "less")

    One Sample t-test

data:  base$peso
t = -1.0296, df = 24, p-value = 0.1567
alternative hypothesis: true mean is less than 70
95 percent confidence interval:
    -Inf 70.6617
sample estimates:
mean of x 
       69 

Comentários de cada passo da análise:

  • Analisando o boxplot, percebemos um comportamento simétrico da variável, com valores oscilando entre 60 Kg e 82 Kg. A mediana é inferior a 70 Kg.

  • O QQ-plot, junto com a banda de confiança, indica que os quantis amostrais não se distanciam muitos dos quantis de uma distribuição normal, indicando que parece razoável assumir normalidade dos dados.

  • Com base em um nível de significância de 1%, não rejeitamos \(H_0\), assumindo normalidade dos dados, conforme indicava o QQ-plot.

  • A estimativa pontual nos mostra que o peso médio é de 69 Kg e a região de 67 Kg a 71 Kg possui alta probabilidade de conter o verdadeiro valor do peso médio.

  • Com base em um nível de significância de 5%, não rejeitamos \(H_0\), indicando que não possuímos evidências suficiente para acreditar que a média seja inferiror a 70 Kg.

Atividade 1: Teste se o comprimento médio da cintura é diferente de 81 cm.

Atividade 2: Teste se a idade média é superior a 45 anos.

Atividade 3: Crie uma função que calcula o p-valor para o teste de hipóteses da média de uma distribuição normal com variância populacional conhecida.