alt text

GET00130 - Métodos Computacionais para Estatística II

Jony Arrais Pinto Junior

Conteúdo da aula

  • Teste de aderência.
  • Teste de homogeneidade.
  • Teste de independência.

1 - Testes de aderência.

O objetivo dos testes de aderência é testar a adequabilidade de um modelo probabilístico a um conjunto de dados observados.

De forma geral, consideramos uma tabela de distribuição de frequências com \(k\) categorias (\(k \geq 2\)). Considere \(p_i\) a probabilidade especificada a categoria \(i\) de acordo com o modelo que desejamos verificar, \(i = 1, \ldots, k\).

As hipóteses associadas ao teste são

\[H_0: p_1 = p_{01}, \ldots, p_k = p_{0k}\] \[\times\] \[H_1: \mbox{Existe pelo menos uma diferente}.\]

Vamos discutir o teste em cima do seguinte problema: um guarda de trânsito desconfia que as probabilidades de acidentes de trânsito no quarto trimestre é maior do que nos anteriores. Ele alega que as probabilidades são de 2/10 para os três primeiros trimestres e 4/10 para o quarto, indicando, segundo ele, que existe o dobro de chance de se ter acidentes no último trimestre do ano.

Suponha que queremos verificar a afirmação do guarda de trânsito. Possuímos 4 categorias (4 trimestres) e de acordo com o modelo a ser testado, estamos interessado em verificar

\[H_0:p_1 = 2/10, p_2 = 2/10, p_3 = 2/10, p_4 = 4/10\] \[\times\] \[H_1: \mbox{Existe pelo menos uma diferente}.\]

Antes de testarmos estas hipóteses, podemos explorar um pouco os dados.

#Carregando pacote
library(tidyverse)

#Importando os dados
base = read_csv2("Base acidentes.csv")

#Ativando o pacote expss
library(expss)

#Tabela de distribuição de frequência para uma variável
base |> 
  select(trim_acidentes) |> 
  fre()
select(base, trim_acidentes)  Count   Valid percent   Percent   Responses, %   Cumulative responses, % 
 Trim1  7 17.5 17.5 17.5 17.5
 Trim2  8 20.0 20.0 20.0 37.5
 Trim3  7 17.5 17.5 17.5 55.0
 Trim4  18 45.0 45.0 45.0 100.0
 #Total  40 100 100 100
 <NA>  0 0.0

Analisando a tabela acima, percebemos que de fato, parece haver uma maior quantidade de acidentes no último trimestre do ano, como o guarda desconfiava. Será que elas ocorrem com as probabilidades indicadas pelo guarda? Para respondermos este questionamento precisamos testar as hipóteses levantadas.

Para executarmos o teste de aderência, usaremos a função chisq.test do pacote stats.

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

  - x - uma tabela com as frequências absolutas;

  - p - um vetor com as probabilidades do modelo teórico para cada categoria,

  - correct - um operador lógico indicando se será aplicado ou não a correção de continuidade (default - TRUE).

#Realizando o teste de aderência
chisq.test(x = table(base$trim_acidentes), 
           p = c(2/10,2/10,2/10,4/10),
           correct = FALSE)

    Chi-squared test for given probabilities

data:  table(base$trim_acidentes)
X-squared = 0.5, df = 3, p-value = 0.9189

A saída do teste contém várias informações: o valor da estatística do teste X-squared, o número de graus de liberdade da estatística de teste df e o p-valor associado as hipóteses especificadas.

Com base em um nível de significância de 5%, não rejeitamos \(H_0\) (p-valor = 0.9189 > 0,05 = \(\alpha\)), ou seja, não encontramos evidências nos dados para desacreditar no modelo do guarda.

2 - Teste de homogeneidade

Suponha que possuímos \(r\) populações \(S_1, \ldots, S_r\). De cada subpopulação é extraída uma amostra de \(n_i\) elementos, \(i = 1, \ldots, r.\) Em seguida, é registrado a qual categoria da variável \(A\) cada elemento pertence (\(A_1, \ldots, A_c\)). O objetivo deste teste é verificar se a distribuição de probabilidade de \(A\) em cada subpopulação é a mesma.

As hipóteses associadas ao teste são

\[H_0: P_1(A_1) = \ldots = P_r(A_1), \ldots, P_1(A_c) = \ldots = P_r(A_c)\] \[\times\] \[H_1: \mbox{Existe pelo menos uma diferente}.\] em que \(P_i(A_j)\) é a probabilidade de um elemento da subpopulação \(i\) ser classificado na categoria \(A_j\), \(i = 1, \ldots, r\) e \(j = 1, \ldots, c\).

Vamos discutir o teste em cima do seguinte problema: um dono de uma fábrica que empacota cafés possui três máquinas (A, B e C) enchendo os pacotes. Os pacotes podem ser classificados no final como normais ou defeituosos. O dono da fábrica coletou uma amostra de 20 cafés da máquina A, 30 cafés da máquina B e 25 cafés da máquina C. Ele gostaria de saber se as máquinas produzem de forma semelhante. Como responder a este questionamento?

Notem que no nosso problema, cada máquina representa uma população, nesse caso, \(r = 3\) e a variável que está sendo observada é a classificação do café com duas possíveis categorias (normal ou defeituoso) \(c = 2\). Este cenário se aplica ao teste de homogeneidade, pois foi sorteado uma amostra fixada para cada subpopulação e então verificada a qual categoria (defeituoso ou não) cada elemento pertencia. Podemos traduzir o problema nas seguinte hipóteses

Hipótese: \[H_0: P_A(D) = P_B(D) = P_C(D), P_A(ND) = P_B(ND) = P_C(ND)\] \[\times\] \[H_1: \mbox{Existe pelo menos uma diferente}.\] Antes de testarmos estas hipóteses, podemos explorar um pouco os dados.

#Importando os dados
base_def = read_rds("Base defeito.rds")

#Tabela de contingência frequência absoluta
base_def |> 
  calc_cro_cases(defeito,maquina)
 maquina 
 A   B   C 
 defeito 
   D  2 15 2
   ND  18 15 23
   #Total cases  20 30 25
#Tabela de contingência percentual por coluna
base_def |> 
  calc_cro_cpct(defeito,maquina)
 maquina 
 A   B   C 
 defeito 
   D  10 50 8
   ND  90 50 92
   #Total cases  20 30 25
#Gráfico de barras empilhadas
base_def |> 
  ggplot(aes(x = maquina, fill = defeito)) + 
  geom_bar(position = "fill") +
  labs(x = "Máquina", y = "%",fill = "Classificação") +
     scale_y_continuous(labels = scales::percent_format()) 

Notem que se analisarmos a tabela de contingência com as frequências absolutas não consegumos comparar bem as frequências observadas já que as subpopulações (máquinas) tem amostras de tamanhos diferentes, o que faz ser necessário trabalharmos com as porcentagens. Quando avaliamos as %, o comportamento das máquinas A e C parecem bastante semelhante, isto é, as proporções de defeituosos nas duas máquinas são parecidas, bem como a proporção de não defeituosos. O mesmo não se pode falar da máquina C, que apresentou proporções das categorias bem diferente das outras máquinas. Porém para respondermos o questionamento feito precisamos testar as hipóteses levantadas.

Para executarmos o teste de homogeneidade, também usaremos a função chisq.test do pacote stats.

A seguir, vamos apresentar os principais argumentos da função chisq.test para o teste de homogeneidade:

  - x - uma tabela de contingência (dupla entrada) com as frequências absolutas;

  - correct - um operador lógico indicando se será aplicado ou não a correção de continuidade (default - TRUE).

#Realizando o teste de homogeneidade
chisq.test(x = table(base_def$maquina, base_def$defeito), 
           correct = FALSE)

    Pearson's Chi-squared test

data:  table(base_def$maquina, base_def$defeito)
X-squared = 16.107, df = 2, p-value = 0.000318

A saída do teste contém várias informações: o valor da estatística do teste X-squared, o número de graus de liberdade da estatística de teste df e o p-valor associado as hipóteses especificadas.

Com base em um nível de significância de 5%, rejeitamos \(H_0\) (p-valor = 0.000318 < 0,05 = \(\alpha\)), ou seja, encontramos evidências nos dados para acreditar que a distribuição de defeituosos e não defeituosos não é homogênea, isto é, existe pelo menos uma máquina com distribuição de probabilidade dos itens defeituoso diferente. Avaliando a tabela de contingência, vê-se claramente que a máquina B possui um comportamento diferente das demais.

3 - Teste de independência

Suponha que selecionamos aleatoriamente \(n\) indivíduos de uma população. Vamos observar a qual categoria de duas variáveis cada indivíduo pertence. Suponha que a variável \(A\) possui \(c\) categorias e \(B\) possui \(r\) categorias. O objetivo deste teste é verificar se \(A\) e \(B\) são independentes.

As hipóteses associadas ao teste são

\[H_0: P(A_i \mbox{ e } B_j) = P(A_i)P(B_j) \qquad\] \[\times\] \[H_1: \mbox{Existe pelo menos uma diferente}.\] em que \(P(A_i)\) é a probabilidade de um elemento da população possuir característica \(A_i\) e \(P(B_j)\) é a probabilidade de um elemento da população possuir característica \(B_j\), \(i = 1, \ldots, c\) e \(j = 1, \ldots, r\).

Vamos discutir o teste em cima do seguinte problema: um pesquisador está interessado em saber se existe relação entre sexo e hábito de fuma. O pesquisador selecinou uma amostra de 70 indivíduos de uma específica cidade. Após isso, ele coletou informações do gênero e hábito de fumar das pessoas Ele gostaria de saber se existe relação entre o gênero e hábito de fumar. Como responder a este questionamento?

Se avaliarmos de forma superficial o problema acima, se assemelha com o problema discutido na secão anterior. Entretanto, temos uma diferença dundamental. Diferença entre os testes de homogeneidade e independência:

  • Teste de homogeneidade: selecionamos uma amostra de elementos de cada uma das \(r\) subpopulacões e distribuímos os elementos de cada uma dessas amostras segundo \(c\) categorias, ou seja, no início do experimento já está especificado o tamanho da amostra a ser coletado em cada subpopulação.

  • Teste de independência: distribuímos uma amostra de n elementos de “uma” população segundo as categorias da variável A e as categorias da variável B, ou seja, é coletado uma amostra da população e avaliado duas variáveis.

Notem que no nosso problema, a amostra foi coleta de uma única população (moradores da cidade) e foram observadas as categorias de duas variáveis: (masculino e feminino) gênero e (fumante e não fumante) hábito de fumar. Podemos traduzir o problema nas seguinte hipóteses

Hipótese: \[H_0: P(A_i \mbox{ e } B_j) = P(A_i)P(B_j), i = \{M,F\} \mbox{ e } j = \{F,NF\}\] \[\times\] \[H_1: \mbox{Existe pelo menos uma diferente}.\]

Antes de testarmos estas hipóteses, podemos explorar um pouco os dados.

#Importando os dados
base_fumo = read_table2("base fumo.txt")

#Tabela de contingência frequência absoluta
base_fumo |> 
  calc_cro_cases(fumante,sexo)
 sexo 
 F   M 
 fumante 
   F  13 32
   NF  17 8
   #Total cases  30 40
#Tabela de contingência percentual por coluna
base_fumo |> 
  calc_cro_cpct(fumante,sexo)
 sexo 
 F   M 
 fumante 
   F  43.3 80
   NF  56.7 20
   #Total cases  30 40
#Gráfico de barras empilhadas
base_fumo |> 
  ggplot(aes(x = sexo, fill = fumante)) + 
  geom_bar(position = "fill") +
  labs(x = "Sexo", fill = "Fumante", y = "%") +
     scale_y_continuous(labels = scales::percent_format())

Para executarmos o teste de independência, também usaremos a função chisq.test do pacote stats.

A seguir, vamos apresentar os principais argumentos da função chisq.test para o teste de homogeneidade:

  - x - uma tabela de contingência (dupla entrada) com as frequências absolutas;

  - correct - um operador lógico indicando se será aplicado ou não a correção de continuidade (default - TRUE).

#Realizando o teste de independência
chisq.test(x = table(base_fumo$fumante, base_fumo$sexo), 
           correct = FALSE)

    Pearson's Chi-squared test

data:  table(base_fumo$fumante, base_fumo$sexo)
X-squared = 10.039, df = 1, p-value = 0.001533

A saída do teste contém várias informações: o valor da estatística do teste X-squared, o número de graus de liberdade da estatística de teste df e o p-valor associado as hipóteses especificadas.

Com base em um nível de significância de 5%, rejeitamos \(H_0\) (p-valor = 0.001533 < 0,05 = \(\alpha\)), ou seja, encontramos evidências nos dados para acreditar que existe dependência entre as variáveis sexo e hábito de fumar.