20  Teste de hipóteses para duas variâncias

Nesta seção iniciaremos a discussão do problema de se comparar duas populações. Nosso objetivo é verificar afirmações feitas sob dois parâmetros populacionais.

Vamos discutir o problema de se comparar duas variâncias de populações normais. O intuito de fazermos esta comparação, reflete diretamente na estatística de teste que será usada no teste de comparação de médias.

O dono de uma fábrica, possui duas máquinas empacotando um determinado produto K. O dono da fábrica coletou a informação do peso de 25 pacotes produzidos pela máquina A e 20 pacotes produzidos pela máquina B. O produtor quer saber se as máquinas estão produzindo da mesma forma, ou seja, se as médias dos pesos dos pacotes produzidos pelas máquinas são iguais. Só que para respondermos esta pergunta, precisamos inicialmente verificar se a variância do peso dos pacotes produzidos pelas máquinas são iguais ou diferentes.

Suponha que queremos verificar se as variâncias dos pesos dos pacotes nas duas populações (máquina A e máquina B) são diferentes. Deste modo, estamos interessado em verificar

\[H_0: \sigma^2_A = \sigma^2_B \qquad \times \qquad H_1: \sigma^2_A \neq \sigma^2_B.\]

Isto equivale a testar se:

\[H_0: \frac{\sigma^2_A}{\sigma^2_B} = 1 \qquad \times \qquad H_1: \frac{\sigma^2_A}{\sigma^2_B} \neq 1.\]

Para verificarmos as hipóteses acima, utilizaremos um teste de hipóteses que possui um pré-requisito, isto é, o teste assume que as variâncias que serão comparadas são parâmetros de variáveis aleatórias com distribuição normal independentes.

Sob a suposição de igualdade das variâncias, a estatística de teste dada por:

\[W = \frac{S_1^2}{S_2^2} \sim F(n-1,m-1),\] em que \(S_i^2\) é a variância amostral da \(i\)-ésima população, \(i\) = 1,2, \(n\) é o tamanho da população 1 e \(m\) é o tamanho da população 2.

A independência é fácil de ser assumida, uma vez que as máquinas produzem pacotes de café separadamente. Com relação a normalidade, devemos verificar se a variável peso do pacote produzido pela Máquina A possui distribuição normal e também devemos verificar se a variável peso do pacote produzido pela máquina B possui distribuição normal.

Atividade 1: Importem o arquivo Maquinas.txt e armazenem em um objeto chamado base.

#Visualizando o objeto
base
# A tibble: 45 × 3
   Maquina  Peso Defeito
   <chr>   <dbl>   <dbl>
 1 A       107.        0
 2 B       144.        0
 3 A        97.8       1
 4 B       137.        0
 5 A       101.        0
 6 A        94.5       0
 7 B       134.        1
 8 A        99.9       0
 9 A        94.4       0
10 B       141.        1
# ℹ 35 more rows

Vamos utilizar as ferramentas previamente discutidas para checar a normalidade em cada uma das populações.

#Carregando pacote
library(ggpubr)
Loading required package: ggplot2
#Criando um tibble somente com as informações da máquina A
pesoA = base |> 
   filter(Maquina == "A")

#Criando um tibble somente com as informações da máquina B
pesoB = base |> 
   filter(Maquina == "B")

#Criando um qq-plot com o ggpubr para a população 1
qq1 = ggqqplot(pesoA$Peso)

#Criando um qq-plot com o ggpubr para a população 2
qq2 = ggqqplot(pesoB$Peso)

#Carregando pacote
library(patchwork)

#Plotando os qqplots
qq1 + qq2

#Teste de normalidade para a população 1
ks.test(x = pesoA$Peso, 
        "pnorm", 
        mean = mean(pesoA$Peso, na.rm = TRUE), 
        sd = sd(pesoA$Peso, na.rm = TRUE))
Warning in ks.test.default(x = pesoA$Peso, "pnorm", mean = mean(pesoA$Peso, :
ties should not be present for the Kolmogorov-Smirnov test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  pesoA$Peso
D = 0.096908, p-value = 0.973
alternative hypothesis: two-sided
#Teste de normalidade para a população 2
ks.test(x = pesoB$Peso, 
        "pnorm", 
        mean = mean(pesoB$Peso, na.rm = TRUE), 
        sd = sd(pesoB$Peso, na.rm = TRUE))
Warning in ks.test.default(x = pesoB$Peso, "pnorm", mean = mean(pesoB$Peso, :
ties should not be present for the Kolmogorov-Smirnov test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  pesoB$Peso
D = 0.17019, p-value = 0.6085
alternative hypothesis: two-sided

Para verificar, inicialmente plotamos um qq-plot do peso do pacote em cada máquina, com suas respectivas bandas de confiança. Se analisarmos os dois gráficos, eles parecem indicar que a suposição de normalidade da variável peso do pacote em ambas as populações é razoável. Para confirmar esta hipótese, realizamos o teste de Kolmogorov-Smirnov em cada população e com base em um nível de significância (\(\alpha\)) de 5%, como o p-valor = 0,973 (Máquina A) e o p-valor = 0,6085 (Máquina B) é maior do que \(\alpha\), 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.

Deste modo, podemos partir para o testar a afirmação sobre igualdade das variâncias.

Antes de executarmos o teste de hipóteses, podemos realizar algumas análises descritivas.

#Calculando medidas descritivas
base |> 
  group_by(Maquina) |> 
  summarise(variancia = var(Peso, na.rm = TRUE),
            n = n())
# A tibble: 2 × 3
  Maquina variancia     n
  <chr>       <dbl> <int>
1 A            9.65    25
2 B           12.7     20

As variâncias parecem iguais?

Para executarmos o teste de comparação de variâncias, usaremos a função VarTest do pacote DescTools.

A seguir, vamos apresentar os principais argumentos da função VarTest:

  - x - o vetor com a amostra da população 1;

  - y - o vetor com a amostra da população 1;

  - ratio - o valor da razão dos dois parâmetros de variância que definem as hipóteses (default = 1);

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

  - conf.level - argumento que define o nível de confiança para o intervalo de confiança da razão das duas variâncias.

#Carregando o pacote
library(DescTools)

#Realizando o teste de comparação das variâncias
VarTest(x = pesoA$Peso, 
        y = pesoB$Peso, 
        alternative = "two.sided", 
        ratio = 1, 
        conf.level = 0.95)

    F test to compare two variances

data:  x and y
F = 0.75696, num df = 24, denom df = 19, p-value = 0.5137
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.3086696 1.7751803
sample estimates:
ratio of variances 
         0.7569569 

A saída do teste contém várias informações: o valor da estatística do teste F, o número de graus de liberdade do numerador e do denominador da estatística de teste num df e denom df e o p-valor associado as hipóteses especificadas. Ele deixa explícito qual a hipótese alternativa “true ratio of variances is not equal to 1” que significa “a razão das variâncias é diferente de 1” o que equivale a dizer que as variâncias são diferentes. Fornece também uma estimativa pontual e intervalar para a razão das variâncias.

Note que, a estimativa da razão das variâncias parece inferior a 1 (0,75), indicando que os pesos dos pacotes produzidos pela Máquina B possuem uma variância maior do que aquelas produzidos pela máquina A. Porém, com base em um nível de significância de 5%, não rejeitamos \(H_0\) (p-valor = 0.5137 > 0,05 = \(\alpha\)), ou seja, não encontramos evidências nos dados para acreditar que a variância dos pesos dos pacotes das duas máquinas são diferentes.

20.1 Desafio

Utilize a base Dados socio.txt para responder as perguntas de 1 a 3.

  1. Com base em um nível de significância de 5%, você diria que as variâncias das idades de homens e mulheres são diferentes?

  2. Com base em um nível de significância de 1%, você diria que as variâncias dos pesos de homens e mulheres são iguais?

  3. Com base em um nível de significância de 5%, você diria que a variância da satisfação dos homens é maior do que a variância da satisfação das mulheres?

  4. Crie uma rotina computacional que calcula o intervalo de confiança para a razão de duas variâncias de populações normais.