O que realmente um teste de hipóteses quer nos dizer?

Marcelo Randolfo
Data Hackers
Published in
18 min readMay 15, 2020

Sempre que utilizamos uma amostra de dados, calculamos uma estatística (como média, mediana, desvio padrão e outras) e generalizamos esse valor para todo uma população, estamos fazendo uma inferência estatística.

Mas essa generalização pode realmente ser feita? Pois, será que nossa amostra é uma boa representação da população? Como provar isso estatísticamente? Simples, usando teste de hipóteses!

O teste de hipóteses é um ótima ferramenta para validar as nossas inferências, mas mesmo sendo ótima, muitas vezes ela é utilizada de forma errada ou simplesmente é esquecido o que realmente o teste representa.

Neste artigo procuro destacar as principais características de um teste de hipóteses, e como exemplo prático, descobrir qual o salário médio de um Cientista de Dados! (Spoiler alert: não é 20 mil reais)

Photo by João Silas on Unsplash

Teorema Central do Limite

Antes de apresentar as características de um teste de hipótese, é importante entendermos o que é o Teorema Central do Limite, pois ele é o principal conceito por trás da inferência estatística.

Basicamente, esse teorema nos diz que conforme aumentamos o tamanho de uma amostra, a distribuição amostral da sua média aproxima-se cada vez mais de uma distribuição normal, independentemente da distribuição da população.

Distribuição normal: simétrica e com média μ.

Mas o que isso quer dizer?

Digamos que você está fazendo um estudo sobre o salário médio dos brasileiros. Pela definição de média, você precisaria somar o salário de todos os brasileiros e dividir pelo tamanho da população do Brasil. E bem, isso é um pouco inviável de ser feito.

Nesse caso, como não é possível ter informações da população toda, você deve utilizar amostras. Com isso, você decide perguntar o salário de 10 pessoas que você encontrou aleatoriamente na rua (vamos ignorar o fato de que praticamente ninguém responderia a uma pergunta dessa) e retira a média desses 10 salários. Você vai encontrar um valor X₁.

Depois disso você vai perguntar o salário de mais 10 pessoas e obter mais uma média, X₂. Você repete esse processo com mais 10 pessoas e obtém outra média, X₃. Suponhamos que você repita esse processo até obter mil médias amostrais, (X₁, X₂, … X₁₀₀₀).

Pelo Teorema Central do Limite, a distribuição dessas mil médias tende a ser uma normal. Se ao invés de você perguntar a 10 pessoas, você perguntasse a 30, a distribuição dessas médias obtidas por meio de amostras de 30 pessoas, se aproximaria mais ainda de uma normal! Conforme você aumentasse o número de pessoas questionadas sobre o seu salário, mais a distribuição dessas médias se aproximaria de uma normal.

E o melhor, a média dessa distribuição normal é uma ótima aproximação da média dos salários de toda a população. Com isso você tem uma estimativa, ou seja, você obtém uma inferência da média dos salários de toda a população brasileira sem precisar perguntar isso para cada pessoa que vive no país.

Perceba também que em nenhum momento há a definição de que os salários são normalmente distribuídos. Pelo TCL essa característica não é necessária. A distribuição das médias amostrais dos salários seguirão uma normal, mesmo que os salários sigam qualquer outra distribuição.

Por exemplo, digamos que eu tenha a suposição que os salários seguem uma distribuição normal. Muitas pessoas recebem um salário médio e o número de pessoas que recebem um salário menor que a média é o mesmo número de pessoas que recebem um salário maior que a média.

Distribuição exponencial.

Você, por outro lado, acredita que o salário das pessoas segue uma distribuição exponencial. Muitas pessoas recebem um salário mais baixo, enquanto poucas pessoas recebem um salário mais alto.

Distribuição uniforme.

Uma terceira pessoa acredita que vivemos em uma sociedade muito igualitária, onde os salários seguem uma distribuição uniforme, ou seja, as pessoas recebem salários parecidos.

Na figura abaixo estão as distribuições de probabilidade dessas três suposições sobre o salário da população brasileira. As distribuições foram construídas a partir de 100.000 valores aleatórios que seguem, respectivamente, uma distribuição normal, exponencial e uniforme. O valor médio das três distribuições é aproxidamente 2.000, ou seja, a suposição é que o salário médio da população é R$2.000. Os códigos, em Python, para a construção das distribuições podem ser visualizados aqui.

Vamos considerar que essas três distribuições de salários são representações exatas de três populações diferentes. Se retirarmos 1.000 amostras compostas cada uma de 10 pessoas, e de cada amostra tirarmos a média, teremos mil médias amostrais, (X₁, X₂, … X₁₀₀₀).

Pelo TCL, a distribuição dessas mil médias tenderá a uma normal, e conforme aumentarmos o número de indivíduos que compõem cada uma das mil amostras, mais a distribuição das médias se aproximará de uma normal.

Na figura abaixo, temos as distribuições das 1.000 médias amostrais retiradas das três populações. As distribuições das médias estão divididas por amostras compostas por 10, 30 e 50 pessoas.

Pela figura acima, temos a confirmação do Teorema Central do Limite. Quando a população já tem uma distribuição que segue uma normal, a distribuição das médias amostrais segue uma normal até quando as amostras são menores.

Mas independente da distribuição da população, a distribuição das médias amostrais segue uma normal. (Nesse exemplo eu só utilizei distribuições contínuas, mas o TCL também é valido para distribuições discretas como a binomial ou Poisson.)

Pela figura, podemos perceber também que o valor médio das distribuições das médias amostrais é uma ótima aproximação do valor médio da população.

Essas duas características, normalidade e valor médio da distribuição das médias amostrais como parâmetro para o valor médio da população, são essenciais para os testes de hipóteses.

Construção das Hipóteses

Ok, você já entendeu o que é o Teorema Central do Limite. Mas o que isso tem a ver com os testes de hipóteses?

Ou, melhor. O que realmente é um teste de hipóteses?

O teste de hipóteses é um método que nos permite verificar se certos dados amostrais trazem evidências que confirmam ou refutam uma hipótese já formulada.

Mas o que isso quer dizer?

Na construção das três populações vistas na seção anterior, eu deliberadamente defini que as médias seriam aproximadamente 2.000. Então qualquer amostra que eu retirar dessa população iria confirmar a hipótese de que a média é igual a 2.000.

Mas isso não ocorre com dados reais. Nós não sabemos qual é a média populacional de uma variável, nós temos uma hipótese de qual seria esse valor, geralmente baseada em outras estimativas.

Por exemplo, digamos que você tenha interesse de conseguir um emprego na área de ciência de dados (a profissão mais sexy do século 21, segundo a Harvard Business Review). Você faz algumas pesquisas sobre o mercado de trabalho e encontra matérias que dizem o seguinte sobre o salário:

Fonte.

É um ótimo salário, não? Em um primeiro momento você fica animado com a perspectiva de receber esse salário. Mas depois você se pergunta: (como cientista de dados, sempre questione!) “será que o salário de um cientista de dados é realmente esse?”.

Como descobrir a resposta para essa pergunta? Teste de hipóteses! O salário de um cientista de dados é R$19.900 (valor médio dos dois valores exibidos acima) ou não?

No caso, a hipótese já formulada afirma que o salário de um profissonal da ciência de dados é R$19.900, segundo as informações obtidas. Essa hipótese já formulada é o que no teste de hipótese chamamos de Hipótese Nula, H₀.

Por sua vez, a hipótese que não confirma essa informação é chamada de Hipótese Alternativa, H₁. Então temos:

Perceba que as hipóteses são opostas, não há forma das duas serem verdade ao mesmo tempo.

Com suas hipóteses definidas, para realizar o teste de hipóteses você vai precisar de uma amostra dos salários de profissionais da área de ciência de dados, para observar se há evidências que confirmam ou não a hipótese já estabelecida, H₀.

Recentemente, o Data Hackers disponibilizou um dataset com diversas informações sobre o mercado de Data Science no Brasil. Inclusive, com informações dos salários das pessoas que trabalham na área.

Essa é uma ótima amostra para utilizarmos no nosso teste de hipóteses. Não entrarei em detalhes aqui no artigo sobre o tratamento dos dados, mas caso você se interesse, os códigos podem ser visualizados aqui.

De acordo com o dataset do Data Hackers, a média salarial dos profissionais que são cientista de dados é aproximadamente R$6.986,16.

Esse valor é diferente dos 19.900 da nossa hipótese nula, certo?

Certo.

Então nossa hipótese nula está refutada?

Não! Não está.

É possível que tenhamos tido “azar” e coletado uma amostra composta somente por cientistas de dados que ganham menos. Talvez quem recebe um salário bem mais alto não tenha respondido a pesquisa do Data Hackers.

Mas como podemos saber se tivemos esse “azar”?

Sabemos se tivemos azar na nossa amostra calculando a probabilidade de obter uma amostra com média salarial igual a R$6.986,16.

E como calculamos essa probabilidade?

Pelo famoso, e muitas vezes utilizado de forma errada, p-valor.

Calculando e interpretando o p-valor

Por definição o p-valor é a probabilidade de observarmos na população um valor no mínimo tão extremo quanto o obtido na amostra, considerando que a hipótese nula é verdadeira.

Ok. Essa não é uma definição simples de entender. Para melhorar o nosso entendimento sobre o p-valor vamos juntar os dois pontos já discutidos neste artigo: TCL e construção das hipóteses de um teste.

Como já vimos anteriormente, o TCL nos garante que a distribuição das médias amostrais de uma população segue uma normal. A distribuição normal possui uma característica muito importante no teste de hipóteses, conhecida como regra 68–95–99.

Observe a distribuição de probabilidade de uma normal com média
μ e desvio padrão σ.

Fonte.

A regra 68–95–99 afirma que em uma distribuição normal:

  • 68% de todos os valores que compõem a distribuição estão dentro do intervalo: [μ-σ , μ+σ].
  • 95% de todos os valores que compõem a distribuição estão dentro do intervalo: [μ-(2σ) , μ+(2σ)].
  • 99,7% de todos os valores que compõem a distribuição estão dentro do intervalo: [μ-(3σ) , μ+(3σ)].

Ok. Mas como isso é relacionado com o nosso teste de hipóteses?

Porque pelo TCL, podemos concluir que as médias amostrais de salários de cientistas de dados segue uma distribuição normal. Já no teste de hipóteses, nossa hipótese nula é de que o salário médio populacional de um cientista de dados é R$19.900.

Com essas informações, vamos então considerar um cenário em que a hipótese nula é verdadeira. Nesse caso, temos que o valor médio da distribuição das médias dos salários, μ , é igual a 19.900.

Nesse caso, pela regra 68–95–97 sabemos que se obtermos 1.000 amostras de salários de profissionais de cientista de dados, e retirarmos a média de cada uma dessas amostras, em 680 dessas 1.000 amostras, o valor encontrado para a média estará no intervalo entre [19.900-σ , 19.900+σ].

Além disso, em 950 das 1000 amostras, as médias encontradas estarão dentro do intervalo [19.900-(2σ) , 19.900+(2σ)]. E em 997 das 1000 amostras, as médias encontradas estarão dentro do intervalo [19.900-(3σ) , 19.900+(3σ)].

Resumindo, quanto mais a média de uma amostra se distancia em desvios padrão da média populacional da distribuição, mais ”incomum” é a amostra que gerou essa média.

No nosso teste de hipóteses, temos uma amostra que tem a média igual a 6.986,16. Antes de calcular o p-valor, temos que saber o quão distante, em desvios padrão, essa média está do valor da hipótese nula, 19.900.

Essa distância é também chamada de estatística de teste (T), que pode ser calculada pela fórmula:

Onde X₁ é a nossa média amostral, 6.986,16 , μ é a média populacional que está sendo testada, 19.900, s é o desvio padrão da nossa amostra, que vimos anteriormente ser aproximadamente 5.062,87, e n é o tamanho da nossa amostra, que no caso é 795.

Bom, aqui cabe um parêntese. Essa estatística de teste é uma aproximação da distância. Se você observar na figura da distribuição normal, o correto seria usar o desvio padrão da distribuição de probabilidade, mas nós não temos como obter esse valor já que não conhecemos exatamente a distribuição. Por isso utilizamos esse valor aproximado.

O uso dessa aproximação é um tópico extenso, que eu pretendo abordar em outro artigo para que este aqui não fique muito extenso. Mas caso você queira entender um pouco mais sobre essa aproximação antes de continuar a leitura, recomendo este vídeo da Khan Academy.

Fechado o parêntese, como já temos todas as informações que precisamos, basta calcular a estatística de teste e o p-valor. O p-valor, conforme sua definição, é a probabilidade de obter um valor no mínimo tão extremo quanto o observado na amostra, dado que a hipótese nula é verdadeira.

Como nossa média amostral é menor que a média populacional que está sendo testada, a estatística do teste fica à esquerda na curva normal. O p-valor é toda a área destacada no gráfico.

No caso, a estatística de teste define uma espécie de fronteira, onde tudo que está a sua esquerda são valores de médias amostrais que são mais extremas que o encontrado na nossa amostra, e os valores a direita são os valores de médias amostrais que são menos extremas que o encontrado na nossa amostra.

É possível calcular o p-valor a partir da estatística do teste. Mas é mais prático utilizar uma função já implementada no Python, que é a função ttest_1samp do SciPy, que nos retorna tanto a estatística do teste quanto o p-valor.

import scipy.stats as sctstat, p = sct.ttest_1samp(df['salario'], popmean=19900)
print('Estatística de teste: {}'.format(stat.round(2)))
print('p-valor: {}'.format(p.round(2)))
Output >> Estatística de teste: -71.92
p-valor: 0.0

O resultado da estatística de teste é, aproximadamente, -71 (valor é negativo pelo fato da média amostral ser menor que a populacional testada), enquanto o p-valor é igual a zero.

Como interpretar esses valores? O que significa o p-valor ser igual a zero?

Pela definição do p-valor, a probabilidade de encontrar na população um valor no mínimo tão extremo quanto a média amostral, dado que a hipótese nula é verdadeidera, é igual a zero (não zero absoluto, é bem próximo de zero na verdade).

Isso quer dizer que se a média salarial dos cientistas de dados fosse realmente R$19.900, a chance de nós encontrarmos uma amostra de salários com média igual a R$6.986,16 é praticamente zero. Isso quer dizer que nossa amostra é tão incomum que ela não pode ser real em um cenário que o salário médio de um cientista de dados é R$19.900.

Então quer dizer que a hipótese nula é falsa?

Exatamente. Nossa amostra fornece evidências de que a hipótese nula não é verdadeira, nesse caso podemos rejeitá-la.

Então a média salarial de um cientista de dados é na verdade R$6.986,16?

Não. Esse é somente o valor da nossa média amostral. No teste de hipóteses, esse valor nos dá evidências de que é extremamente improvável que a média salarial de um cientista de dados é R$19.900. Mas isso não quer dizer que seja R$6.986,16.

Antes de finalizar esta seção, cabe aqui mais um parêntese. Conforme dito anteriormente, o cálculo da estatística do teste é uma aproximação da real distância, em desvios padrão, entre a média amostral e a média populacional testada. Existem duas formas principais de realizar essa aproximação e obter a estatística do teste: com o z-score e t-score.

O z-score é utilizado quando você tem o desvio padrão populacional da distribuição ou em situações que a amostra é grande. Por sua vez, o t-score é indicado em situações que a amostra é pequena.

Como dito anteriormente, no nosso exemplo de salários de cientista de dados nós não tínhamos informações sobre o desvio padrão da distribuição. Essa informação só é possível em exemplos de simulação, igual foi feito na seção do TCL, ou em ambientes muito controlados. Em exemplos reais como o nosso, você não vai ter a informação do desvio padrão da distribuição das médias.

Então no nosso exemplo, o uso do z-score ou t-score depende do tamanho da amostra. Mas se você observar, mesmo com uma amostra grande, 795 observações, eu utilizei um teste t (ttest_1samp ). A razão disso é simples: para grandes amostras a estatística de teste aproximada pelo t-score é muito próxima de uma estatística de teste aproximada pelo z-score.

Por exemplo, se tivéssemos utilizado a função z-test do pacote statsmodels, teríamos obtido o seguinte resultado:

from statsmodels.stats.weightstats import zteststat_, p = ztest(df['salario'], value=19900)
print('Estatística de teste: {}'.format(stat.round(2)))
print('p-valor: {}'.format(p.round(2)))
Output >> Estatística de teste: -71.92
p-valor: 0.0

Então se o t-score é indicado para pequenas amostras, e em grandes amostras ele obtém o mesmo resultado que o z-score, porque não usar sempre o t-score? Inclusive, em vários testes estatíscos, o t-score é utilizado como padrão.

Fechado mais esse parêntese, vamos observar o que ocorre se mudarmos nossa hipótese nula.

Significância estatística

Vamos supor que quando você procurou sobre o salário de um cientista de dados, ao invés de ter encontrado aquela matéria sobre o salário ser entre R$13.100 e R$26.700, você encontrou a seguinte notícia:

Fonte.

Bom, esses valores são menores que os observados na primeira matéria, mas será que a nossa amostra oferece evidências que confirmem esse valor? Pra saber a resposta dessa pergunta, vamos para o teste de hipóteses.

Assim como feito no primeiro exemplo, vamos usar como hipótese formulada o valor médio da faixa salarial apresentada acima (ignorando os cargos de nível sênior), que é R$6.750,00. Nesse caso teremos as seguintes hipóteses nula e alternativa:

Já sabendo como calcular a estatística do teste e o p-valor, temos o seguinte resultado para o teste de hipóteses:

stat, p = sct.ttest_1samp(df['salario'], popmean=6750)
print('Estatística de teste: {}'.format(stat.round(2)))
print('p-valor: {}'.format(p.round(2)))
Output >> Estatística de teste: 1.32
p-valor: 0.19

Agora nossa probabilidade de obter na população, um valor tão extremo quanto o encontrado na nossa amostra, considerando a hipótese nula como verdadeira, é de 19%.

Isso quer dizer que se a média populacional dos salários dos cientistas de dados no Brasil for de R$ 6.750, e retirarmos 1.000 amostras dessa população, em 190 amostras a média amostral será um valor tão extremo quanto o encontrado na nossa amostra.

Ok. Mas isso quer dizer que nossa amostra é ou não incomum?

Esse é um ponto bem importante, o que faz ou não nossa amostra ser tão incomum ao ponto de invalidar nossa hipótese nula. Para isso precisamos de um valor de comparação, conhecido como nível de significância, representado pela letra grega α.

O nível de significância é uma medida de comparação do quão forte devem ser as evidências da sua amostra, para que a hipótese nula seja rejeitada. Se caso nós rejeitarmos uma hipótese nula, quando na verdade ela é verdadeira, estamos cometendo um falso positivo, ou Erro Tipo I. No caso, o nível de significância é a probabilidade de cometer um falso positivo.

Ok. Mas como calcula o nível de significância?

Bom, o valor de α não é calculado ele é definido pela pessoa que realiza o teste de hipótese. Então no nosso caso, nós vamos escolher o nível de significância.

Mas se o nível de significância define a probabilidade de um erro. Então é só escolher um valor muito baixo. Assim não vamos cometer nenhum erro!

Isso é verdade. Quanto menor for o nível de significância, menor é a probabilidade de cometer um falso positivo. Mas isso é realmente bom?

Por exemplo, se eu definir um nível de significância muito baixo, eu estou aumentando o meu nível de exigência para rejeitar a hipótese nula. Nesse caso, a minha amostra deve me dar uma evidência muito forte para eu rejeitar a hipótese nula.

E isso é ruim pelo seguinte motivo, se eu for muito exigente com a minha amostra, eu nunca vou rejeitar a hipótese nula. Então é fácil você não cometer o erro de rejeitar uma hipótese nula quando ela é verdadeira, quando você simplesmente nunca rejeita uma hipótese.

Então temos que escolher um valor para α que seja o menor possível, para diminuir as chances de cometer um falso positivo, mas que permita também que evidências válidas de que a hipótese nula é falsa sejam consideradas, e não somente amostras com evidências muito fortes (como no nosso primeiro teste de hipóteses).

E qual seria esse valor?

Depende da sua situação. Por exemplo, digamos que você está usando um teste de hipóteses para observar se um remédio é ou não eficaz. Nesse caso, você quer que a taxa de falso positivo seja a menor possível! Mesmo que pra isso você “deixe” passar vários remédios que poderiam também ser eficazes, mas você prefere não correr o risco de indicar um remédio que é um falso positivo. Nesse caso, o remédio que for considerado eficaz deve apresentar evidências muito fortes para isso.

Então a escolha do nível de significância passa pela pergunta: “o quão ruim é cometer um falso positivo?”.

No caso do remédio é indicar um remédio ruim para uma pessoa doente. Isso é pessímo, então o nível de significância deve ser o menor possível.

No nosso exemplo, cometer um falso positivo não é algo tão ruim. Simplesmente vamos errar o salário médio de um cientista de dados. Em casos assim, que cometer um falso positivo não é tão sério, normalmente é utilizado valores para α de 0.05 e 0.01.

Entendi. Já definimos o nível de significância, como aplicamos isso no teste de hipóteses?

Aplicando uma regra de bolso:

  • Se p-valor < α: nossa amostra possui evidências suficientes para rejeitar a hipótese nula.
  • Se p-valor > α: nossa amostra não possui evidências suficientes para rejeitar a hipótese nula.

Então no nosso segundo exemplo, onde a hipótese nula é de que o salário médio de um cientista de dados é de R$6.750, nós não temos evidências suficientes para rejeitar a hipótese nula aos níveis de significância de 5% e 1%, dado que o p-valor é de 19%.

Então a hipótese nula é verdadeira?

Não! Dizer que a hipótese nula é verdadeira implica em afirmar que o salário médio é de R$6.750, o que pode não ser verdade. Simplesmente estamos concluindo que não temos evidências suficientes para refutar essa hipótese.

Pontos importantes que você deve saber

Apesar deste artigo ter ficado extenso, o teste de hipóteses não é algo difícil de entender. O problema é que muitas vezes as análises dos testes de hipóteses se baseiam somente na regra de bolso do p-valor e do nível de significância, isso acaba gerando interpretações erradas, que não fazem muito sentido ou até mesmo geram más práticas. Por exemplo:

  1. O p-valor não é a probabilidade de cometer o erro do tipo 1. Como o resultado do teste é obtido ao comparar o p-valor com α, é comum observar análises que consideram os dois valores como sendo a mesma coisa, e como a definição de p-valor não é tão simples de entender sem saber o que é o TCL, ela acaba sendo esquecida.
  2. Hipóteses nula ou alternativa devem ser possíveis. No nosso primeiro exemplo, nossa hipótese nula era de que o salário médio de um cientista de dados era quase 20 mil reais. Esse valor é muito alto para um salário médio! Por isso nosso p-valor foi tão baixo, a hipótese não era factível. Sim, nós retiramos esse valor de uma reportagem, mas esse valor de salário é claramente de um profissional sênior. Essa informação só não está clara na matéria (recomendo o livro “Como mentir com estatística”, que aborda outras questões como essa).
  3. O nível de significância deve ser definido antes de realizarmos o teste. Se esperarmos o resultado do teste para definir qual será o valor de α, podemos correr o risco, intencional ou não, de p-hacking. Se estamos realizando um experimento que procura rejeitar a hipótese nula, e nosso p-valor for igual a 0.03, é tentador definir que α é 0.05 e não 0.01. Então antecipe seu alpha antes do teste!
  4. Nunca se baseie em somente uma amostra. Os resultados encontrados neste artigo usaram os dados da pesquisa feita pelo Data Hackers, mas é muito importante utilizar outras amostras para comparar os resultados. Então se você tem acesso a uma outra base de dados de salários de cientista de dados, tente replicar os resultados observados aqui. Quanto mais estudos, mais análises e mais testes, mais perto chegamos de um valor médio populacional adequado.

Neste artigo procurei trazer a idéia que está por trás de um teste de hipótese. Como exemplo, utilizei um teste de médias, mas existem testes de variâncias, de proporção, diferença de médias, de significância estatística, comparação de médias para duas amostras, e vários outros tipos. Cada um tem suas particularidades, mas todos tem a mesma intuição que foi apresentada aqui.

Espero que na próxima vez que você se deparar com um teste de hipótese e um p-valor, lembre tudo o que está por trás dessa medida e não use somente uma regra de bolso! (espero também que você não tenha ficado decepcionado em descobrir que o salário médio de um cientista de dados não é R$19.900)

Qualquer dúvida, opinião, sugestão ou correção, entre em contato comigo no LinkedIn!

--

--