github twitter mastodon linkedin instagram 500px email
Teste de Hipótese
Aug 7, 2017
6 minutes read

Preâmbulo

Esta análise, realizada no contexto da disciplina Análise de Dados 1 (Computação @ UFCG), tem por objetivo avaliar a popularidade de linguagens de programação no período entre 2016 e 2017 segundo dados registrados no GitHub. Essa análise serve de mote para trabalharmos conceitos de inferência, teste de hipótese, p-valor, entre outros.

Nesta análise, iremos responder a uma pergunta já desenvolvida na análise anterior. Mas agora iremos utilizar teste de hipótese e não intervalo de confiança para respondê-la.

A amostra contém informações sobre quantos usuários fizeram atividade no GitHub usando uma determinada linguagem de programação. É importante ressaltar que não temos dados de todos os repositórios nem de todos os usuários. Temos apenas uma amostra. Iremos usar técnicas de inferência para podermos fazer afirmações sobre toda a população a partir dos dados da amostra.

Pergunta

Iremos usar a seguinte pergunta:

  • Qual trimestre do ano com a maior movimentação no github?

Lendo os dados:

Apenas para ter uma ideia da amostra:

head(dados)
##   file_extension month_day the_month the_year users full_date week_day
## 1             md        18         2     2016 10279 18-2-2016   quinta
## 2             md        17         2     2016 10208 17-2-2016   quarta
## 3             md        27         1     2016 10118 27-1-2016   quarta
## 4             md        16         2     2016 10045 16-2-2016    terça
## 5             md        26         1     2016 10020 26-1-2016    terça
## 6             md        21         3     2017 10015 21-3-2017    terça

Reveja o checkpoint anterior para ver mais detalhes da distribuição dos dado.

Na análise anterior, haviamos chegado à conclusão de que o primeito trismestre do ano era o de maior movimentação no Github. Iremos, então, nesta análise, comparar o primeiro trismetre com os três restantes, a fim de verificar se nele a movimentação é maior do que nos outros.

Teste de Hipótese

A técnica para inferência que aqui será utilizada é conhecida como Teste de Hipótese e é bastante conhecida no mundo acadêmico / científico.

Para relembrar, na inferência nós fazemos suposições sobre o que não conhecemos e quantificamos o grau de certeza desta suposição. No fim das contas, tentamos concluir algo sobre uma população a partir de uma amostra desta população. No nosso caso, utilizamos os dados do GitHub (plataforma muito usada por programadores para controlar versões de seus projetos) de 2016 para concluir algo sobre o comportamento dos programadores no GitHub no geral (as pessoas programas mais no primeiro trimestre do ano).

No teste de Hipótese, uma técnica de inferência (outra que já conhecemos é a Intervalo de Confiança), nós definimos uma hipótese de interesse com a qual queremos concluimr algo sobre a população a partir da amostra. A partir dessa hipótese, definimos uma hipótese nula, que é a negativa de nossa hipótese de interesse.

  • Hipótese nula (H0): o teste avalia evidência contra nossa hipótese (o termo ‘nulo’ carrega o sentido de ‘não há diferença’).
  • Hipótese alternativa (H1): no que acreditamos e queremos confirmar.

Realizamos um experimento repetidas vezes num mundo aleatório (dados aleatórios de nossa amostra). O objetivo disso é tentar gerar uma situação em que não há associações entre as amostras de cada experimento repetido. Então calculamos quantas vezes há associações no mundo aleatório, para representar quantas vezes estas associações são mais fortes do que o efeito no mundo não aleatório, em que há associação.
Recapitulando, queremos provar a associação, a nossa hipótese alternativa (H1). Então realizamos experimentos em um mundo aleatório e verificamos quantas vezes ocorre associações nesse mundo aleatório.
Como produto do Teste de Hipótese, temos o P-valor. Quando realizamos o teste (repetir o experimento várias vezes), uma estatística é calculada. O p-valor é a probabilidade de obter esse valor para a estatística ou valores mais extremos. Em outras palavras, o p-valor é a probabilidade da estatística computada no teste ser obtida assumindo que a hipótese nula é verdadeira. Se frequentemente são gerados efeitos maiores no mundo aleatório, então a hipótese nula é provavelmente verdadeira.
Se a probabilidade de obter esse valor para a estatística é muito baixo (menor que o nível de significância do teste), é uma evidência que a hipótese nula deve ser rejeitada. Ou seja, quanto menor o p-valor, maior a evidência contra a hipótese nula. A hipótese nula é improvável quando o efeito do mundo aleatório não repete o mundo em que há associação. Noutras palavras, quanto menor p valor, maior a probabilidade do experimento que eu quero confirmar acontecer.

Resumidamente, o teste de hipótese envolve:

  • Formulamos hipóteses nula e alternativa.
  • Realizamos experimentos.
  • Escolhemos um teste estatístico e definimos um nível de significância.
  • Computamos a estatística e identificamos o p-valor.
  • Comparamos o p-valor com o nível de significância.

O teste de hipótese só pode ou rejeitar a hipótese nula ou não rejeitá-la. Nesse segundo caso, contudo, não estamos provando que a hipótese nula é verdadeira. Apenas não encontramos evidência suficientes para rejeitá-la.

No nosso caso: H0: não há diferença de movimentação entre o primeito trismetre e o i-trimestre (i variando de 2 a 4). H1: há diferença considerável de movimentação entre o primeito trismetre e o i-trimestre (i variando de 2 a 4).

O primeiro trimestre do ano é aquele com maior movimentação no github?

Vamos usar os dados entre os anos apenas do ano 2016.

dados.2016 = dados %>% filter(the_year == 2016)

trimestre = function(p) {
  anw = ifelse(p <= 3, 1, 
               ifelse(p > 3 & p <= 6, 2,
                      ifelse(p > 6 & p <= 9, 3, 4)
               )
        )
  return(anw)
}

dados.2016$trimestre = trimestre(dados.2016$the_month)

dados.2016.trim_1 = dados.2016 %>% filter(trimestre == 1)
dados.2016.trim_2 = dados.2016 %>% filter(trimestre == 2)
dados.2016.trim_3 = dados.2016 %>% filter(trimestre == 3)
dados.2016.trim_4 = dados.2016 %>% filter(trimestre == 4)

Realizando os testes de hióteses para:

  • O primeiro trimestre tem maior movimentação que o segundo?
  • O primeiro trimestre tem maior movimentação que o terceiro?
  • O primeiro trimestre tem maior movimentação que o quarto?
experiment1_2 = permutationTest2(data=dados.2016.trim_1, statistic=median(users), data2=dados.2016.trim_2)
experiment1_3 = permutationTest2(data=dados.2016.trim_1, statistic=median(users), data2=dados.2016.trim_3)
experiment1_4 = permutationTest2(data=dados.2016.trim_1, statistic=median(users), data2=dados.2016.trim_4)

Vamos ver o P-VALOR para cada um dos experimentos:

experiment1_2$stats %>% t()
##             median(users): dados.2016.trim_1-dados.2016.trim_2
## Observed    "128.5"                                           
## Mean        "0.05280528"                                      
## Alternative "two.sided"                                       
## PValue      "0.0032"

P-VALOR: 0.0042

experiment1_3$stats %>% t()
##             median(users): dados.2016.trim_1-dados.2016.trim_3
## Observed    "182.5"                                           
## Mean        "0.7684768"                                       
## Alternative "two.sided"                                       
## PValue      "4e-04"

P-VALOR: 0.0004

experiment1_4$stats %>% t()
##             median(users): dados.2016.trim_1-dados.2016.trim_4
## Observed    "184.5"                                           
## Mean        "0.2388739"                                       
## Alternative "two.sided"                                       
## PValue      "6e-04"

P-VALOR: 0.0006

Como p-valor deu baixo (< 0.05) em todas as três situações, então no meu mundo aleatório {0.42, 0.04 e 0.06} % das vezes não ocorre o que eu quero atestar com a hipótese nula. Como esse valor é menor que o grau de confiança (< 0.05), eu rejeito a hipótese nula. Nesse sentido, não temos evidências suficientes para dizer que a não há diferência muito grante entre a movimentação do primeiro trimestre e alguns dos outros trê (relembre nossa hipóteses H0 e H1). Nesse sentido, é provável (ou é estatisticamente considerável) que a diferença entre o primeiro trimestre do ano e o outros seja alta/significativa.
Esse resultado é compatível com a pergunta 2 da nossa última análise, feita com Intervalos de Confiança, em que nos questionamos sobre qual era o trimestre com maior movimentação no github e descobrimos que era o primeiro!


Back to posts


comments powered by Disqus