Primeiras aulas do curso Estatística com Python parte 3: Testes de hipóteses

Estatística com Python parte 3: Testes de hipóteses

Teste de normalidade e as etapas de um teste - Introdução

Oi, pessoal. Bem-vindos a mais um treinamento da Alura. Meu nome é Rodrigo e eu vou ser seu instrutor nesse curso de Estatística parte três.

E é parte três porque a gente vem de dois outros. No primeiro, a gente falou de estatísticas descritivas e coisas mais básicas, para introduzir o assunto.

No segundo, a gente já falou de distribuições de probabilidade, cálculo de probabilidade, estimação, amostragem.

Nesse aqui, a gente vai focar em teste de hipóteses porque a gente tem bagagem dos cursos anteriores para poder introduzir esse assunto, que é um assunto com um pouco mais de detalhe, sem ficar muito perdido. Legal?

Nesse curso, a gente vai, inicialmente, já realizar um teste de hipóteses, um teste de normalidade, para a gente entender como isso funciona.

Depois, a gente vai com calma, passo a passo, vendo as etapas de um teste, a formulação das hipóteses, a forma de separar as áreas de rejeição e de aceitação das hipóteses do modelo

O cálculo das estatísticas de comparação e todos esses detalhes que envolvem um teste de hipóteses.

A gente vai seguir esse nosso Notebook que está como material de estudo aí para você – como eu venho deixando nos outros treinamentos.

Ele é um Notebook muito cheio de figura para facilitar o entendimento, com os textinhos certinhos para a gente entender cada etapa de um teste.

E, quando a gente estiver realizando os testes, a gente vai fazer ele, passo a passo, como se a gente estivesse fazendo ele manualmente, e depois, lógico, de uma forma mais simples usando o ferramental que a linguagem Python oferece para a gente.

Utilizando Scipy, Statsmodel e outras ferramentas. A gente vai falar de testes paramétricos, testes não paramétricos, mais ou menos três testes em cada de grupo destes testes.

E a gente já vai entender exatamente o que significa paramétrico e não paramétrico. Beleza?

Eu espero que esse treinamento ajude você nos seus estudos, que você consiga entender e fluir bem com ele, e, no próximo vídeo, a gente vai fazer uma visualização dos dados e a configuração do ambiente, e depois a gente já manda a ver nos testes, beleza? Até lá.

Teste de normalidade e as etapas de um teste - Ambiente e conhecendo o dataset

Pessoal, maravilha. Antes de começar o nosso treinamento, vamos dar uma olhada no ambiente que a gente vai utilizar para codificar e também nos dados que a gente vai estar utilizando. Legal?

Eu vou utilizar, como fiz nos outros cursos, o Colab. Digitando aqui no Google "Colaboratoy". A primeira opção é ele, então você clica aqui.

O objetivo aqui é a gente verificar as versões que eu estou utilizando agora, quando eu estou gravando, para você quando estiver fazendo o curso aí no futuro.

Se tiver algum probleminha na execução de algum código, você dá uma olhada na versão que você está usando; se for diferente da minha, pode ser esse problema - você pode voltar uma versão ou duas, sem menor problema.

No Curso Um, no vídeo de apresentação eu mostro como fazer essa volta de versão. Legal?

Então vou dar um Esc aqui porque ele já abriu uma janela. Eu deixei dois arquivos para você fazer download, dois Notebooks. Um é o do nosso curso, que a gente vai executar o curso, e o outro é para a gente verificar as versões.

Vamos lá. File. Dou Upload no Notebook, ele vai vir aqui na aba Upload direto, e escolher arquivo. Versão Bibliotecas, abre esse carinha aqui. Ele já vem com um macetinho aqui para a gente verificar as bibliotecas que a gente está utilizando.

Vou rodar aqui, é só clicar Shift + Enter. Ele vai rodar de novo, o meu já tinha rodado. Nós vamos fazer novamente. Está executando, demora um pouquinho. Ok.

Versão do Pandas, essas são as bibliotecas que eu vou utilizar. Pandas 0.24.2. Numpy 1.16.3. Scipy 1.2.1. Statsmodels 0.9.0.

As bibliotecas últimas aqui, de visualização de gráficos, a gente vai ver uma coisinha ou outra, é pouca coisa. O Seaborn 0.9.0 e o Matplotlib 3.0.3. Perfeito?

Executa aí, vê qual é a versão que você está usando e qualquer coisa você volta uma versão.

Fechando aqui, eu já deixei aberto o Notebook que a gente vai começar a trabalhar. Ele já está todo organizadinho, a gente já vai começar a falar de teste de hipótese aqui nesse curso, legal.

Mas a primeira coisa que eu quero mostrar é o dado que a gente vai vez ou outra utilizar no nosso treinamento. Tá bom? E depois, no final, tem sempre um Notebook lá, com os exercícios, utilizar esse Dataset para ficar um projeto bem legal.

Então, vamos lá. Abrindo aqui, conhecendo os dados, o Dataset é o mesmo que a gente vem utilizando nos outros cursos. É um dataset que eu obtive da pesquisa nacional por amostra de homicídios do IBGE, no ano de 2015. Ele tem as seguintes variáveis: renda; idade; altura foi uma variável que eu fiz, eu elaborei ela a partir de uma variável aleatória normal para fins didáticos.

Para a gente poder fazer uns exemplinhos, entender o funcionamento de algumas coisas; UF, que é unidade da federação; sexo; anos de estudo; e cor, que é a raça. Todas no Dataset estão codificadas, estão em número. Se você quiser transformar na descrição é só executar um procedimentozinho simples.

Observações importantes. É bom a gente isso sempre que a gente estiver trabalhando com Dataset. Eu fiz alguns tratamentos, estão aqui. Foram eliminados registro de renda quando eram inválidos, quando era missing.

Eu só assumi as pessoas de referência do domicílio, ou seja, eu só estou pegando as pessoas de referência. Talvez sejam os chefes do domicílio, eu estou chamando de chefes do domicílio. Perfeito.

Vamos abrir agora esse nosso Dataset. Primeira coisa, importar as bibliotecas que a gente vai utilizar. Eu vou usar o sistema de ir importando bibliotecas conforme a gente for precisando. Mas, inicialmente a gente já vai precisar do Pandas pelo menos.

import pandas as pd

Para economizar, a gente vai utilizar o Numpy em alguns pontos do nosso treinamento, então eu já vou importar o Numpy também, as NP. Com esses dois apelidos que são comuns na comunidade. Panda as PD, Numpy as NP. Ok?

import numpy as np

Shift + Enter. Rodou, Ok. Vamos agora criar um Dataframe. Os dados, eu esqueci de mostrar. Eu vou mostrar aqui. Abrindo aba lateral do nosso notebook, vindo aqui em Files - nos outros cursos a gente fez isso e o meu já está aberto aqui, por isso que eu esqueci.

Eu posso vir aqui em Upload. Os dados já estão aí para você fazer download. Aqui, Dados, você clica nele. Ele vai subir o arquivo que você vai poder utilizar ele.

Lembrando também que você precisa estar logado no Colab para poder fazer esse Upload, para poder executar o nosso curso numa boa.

Então, eu estou logado - aqui uma mascarazinha de mergulho. Ok. Fechar aqui para aumentar a nossa tela. E vamos lá. Criar uma variável Dados e vou chamar o Pandas.

A função read.csv(), para ler o arquivo CSV e colocar ele dentro de um Dataframe, e vou passar aqui dados.csv, que é o arquivo que a gente fez o Upload lá.

dados = pd.read_csv('dados.csv')

Tudo certinho. Shift + Enter. Rodou. Vou dar uma visualizada nos cinco primeiros registro com dados.head e Shift + Enter. Está aqui, o Dataset já está carregado com UF, sexo, idade, cor, estudo, renda e altura.

UFSexoIdadeCorAnos de EstudoRendaAltura
0110238128001.603808
11112321211501.739790
2111358158801.760444
3110462635001.783154
411147891501.1690631

Aqui algumas, como eu disse, estão codificadas em número. Por exemplo, sexo: 0 e 1. A gente só precisa vir aqui em cima e ver o que significa o 0 e 1. Aqui. O 0 é masculino, o 1 feminino. Perfeito?

Então pessoal, esse primeiro vídeo é isso. No próximo a gente já começa colocando a mão na massa de verdade - a gente vai fazer um teste de hipóteses de primeira.

Ok? Só para a gente assustar um pouco. Teste de normalidades, próximo vídeo. Até lá.

Teste de normalidade e as etapas de um teste - Executando o teste de normalidade

Beleza, pessoal? Vamos agora começar realmente a trabalhar com testes de hipóteses.

A gente, no curso anterior, a gente já começou a mexer com inferência estatística, isso aqui é uma continuidade desse assunto.

Lá a gente viu estimação, estimação pontual, estimação intervalar. Aprendemos a calcular o intervalo de confiança, tamanho de amostra.

A gente aprendeu a obter probabilidades de uma distribuição normal, o que era nível de confiança, nível de significância. Todas essas coisas que a gente vem aprendendo lá, a gente vai aplicar agora dentro de testes de hipóteses.

A gente vai ver aplicação prática de tudo isso, em conjunto, aqui dentro de teste de hipóteses. Legal?

O que é teste de hipóteses? É uma regra de decisão que ajuda a gente a avaliar hipóteses feitas sobre os parâmetros populacionais.

E aceitar ou rejeitar elas como provavelmente verdadeiras ou falsas, tudo isso tendo como base uma amostra.

É o que a gente já começou a ver. A partir de uma amostra a gente tem uma estimativa de um parâmetro da população e vê se ele é representativo ou não.

Uma coisa legal aqui é que a gente pode testar várias coisas. O primeiro teste aqui, que eu vou dar um susto em vocês como eu prometi no vídeo anterior, é o teste de normalidade.

Antes de a gente ficava vendo, falava assim: essa variável é normal, não é normal? Como a gente fazia isso? Vendo se nela aparecia um sininho, só visualmente.

Mas existe uma forma de a gente fazer isso mais formalmente, um teste mais robusto, onde ele tenha um valor estatístico, diga-se, com tanta probabilidade que você pode aceitar ou rejeitar a hipótese dessa distribuição, se seguiu a normal. Legal?

Esse cara a gente vai ver também aqui. Outros exemplos de porque a gente está usando teste de hipóteses, um exemplo bem clássico, é aquela coisa da diferença de renda entre sexos.

Homens ganham mais, mulheres ganham menos. Será que isso realmente é verdade, com base em um dado concreto que a gente tenha?

Por exemplo, o nosso Dataset aqui tem informação disso, a gente vai testar isso no nosso treinamento. Uma outra coisa, por exemplo, também é Um fabricante te dá uma informação e você tem que tomar aquilo como verdade. A gente pode testar se essa afirmação do fabricante é verdadeira ou não usando o teste de hipóteses.

Então, vamos lá. Vamos começar com o teste de normalidade. Como eu disse, eu vou dar um susto em vocês - vai ter alguns conceitos que você não vai entender mesmo.

Mas a ideia realmente é essa, só para você ver como faz, aplicar um primeiro teste. Depois, nos próximos vídeos, a gente vai fazer esse passo a passo, e eu vou mostrando para você como calcular essas estatísticas na mão, com o lápis. Ok?

E no final eu mostro para você como você executa um teste como eu vou fazer agora, pegando uma funcionalidade do Scipy, do Statsmodels - do Python - para executar isso rapidamente.

Então, vamos lá. Primeira coisa, eu vou importar esse cara aqui, que é o Normaltest. Eu vou usar esse, é o mais simples, é bem simples, é um teste de normalidade.

Uma coisa que eu quero chamar a atenção: é sempre bom ler a documentação desses testes que a gente está utilizando.

Por quê? Lá ele te diz qual é a hipótese nula do teste. A gente já vai entender o que é isso, hipótese nula. O que ele está testando exatamente, ele vai dizer para você aqui.

Nesse caso aqui, ele está dizendo, e eu já deixei até aqui, que a normaltest testa a hipótese nula, que é o H0, vamos conhecer, de que a amostra é proveniente de uma distribuição normal.

Essa é a hipótese nula. É isso que eu tenho que rejeitar ou aceitar de acordo com o que a gente vai obter de resultado do teste.

Vamos importar. Aqui eu já deixei pronto.

from scipy.stats import normaltest

O que eu quero fazer aqui, eu vou definir um nível de significância. Eu vou colocar isso dentro de uma variável. A gente já conhece o que é significância, o que é nível de confiança.

O nível de confiança, trocando em miúdos, é a probabilidade de dar certo, do meu estimador estar correto; e o de significância é dele estar errado. Perfeito?

Eu tenho uma célula aqui vazia, depois eu apago. Significância, vou colocar dentro desta variável, eu vou dar 5%, 0,05. É aquela significância padrão, nível de confiança 95%.

significancia = 0.05

Testando a variável renda do nosso Dataset, que a gente abriu no vídeo anterior. Vamos pegar a renda. Vamos visualizar primeiro como é que essa renda está se comportando.

Então dados.renda.hist(). O Pandas tem a função que já é herdada do Matplotlib para a gente plotar um histograma.

Eu vou botar aqui dentro um parâmetro que se chama bins e eu vou falar que é igual a 50. Ele está dizendo que eu quero 50 barrinhas no meu histograma. Vai ficar um pouco mais fácil de visualizar.

dados.renda.hist(bins = 50)

Então está aqui. Visualmente, aquele nosso padrão de visualizar teste e visualizar uma normal, eu esperaria que a normal tivesse uma forma de sino, e eu estou vendo aqui que não tem esse padrão.

Gráfico em colunas de cor azul. Eixo x vai de zero a duzentos mil aumentando de vinte e cinco mil em vinte e cinco mil. Eixo y vai de zero a setenta mil aumentando de dez mil em dez mil. A primeira coluna está em zero no eixo x e vai de zero a quase setenta mil no eixo y. A segundo coluna está um pouco acima de zero no eixo x e vai de zero a quinhentos no eixo y. A próxima três colunas não passam de zero no eixo y. No eixo x, as duas seguintes ficam entre zero e vinte e cinco mil e a última está em vinte e cinco mil

Parece que é uma coisa assim. Sobe, desce e vem para cá. É uma coisa meio assimétrica. A gente já viu isso nos outros cursos.

Visualmente eu consigo perceber que isso não segue uma norma, mas vamos testar isso usando um teste formal, para a gente ter uma estatística e dizer assim.

Não, realmente essa variável não segue uma distribuição normal. Com certeza. Sem precisar visualizar.

Vamos começar. Vou fazer direto o teste. É só chamar, normaltest(), que a gente já importou lá em cima, e passar o dado para ele por dados.Renda. Roda isso. Ele já rodou o teste, está aqui.

normaltest(dados.renda)

O Output desse teste são dois valores. Um é o Estatística de teste e o outro é o P valor. Tudo isso a gente vai conhecer ao longo do nosso curso.

Como ele tem dois Outputs, é uma dupla, eu posso passar isso aqui para duas variáveis. Eu vou chamar de stat_test, vírgula, p_valor. Perfeito. E eu posso printar esses caras aqui em baixo.

stat_test, p_valor = normaltest(dados.Renda)
print(stat_test)
print(p_valor)

152380.75803960307
0.0

Posso separar eles porque eu posso querer, precisar usar isso para alguma outra coisa. A gente vai utilizar o p_valor aqui. Copiar aqui e colar aqui embaixo. E a gente consegue visualizar eles separadamente.

Aqui em cima eu já deixei uma regrinha de decisão. Quando é que eu rejeito o H0? É o que o H0? A gente já viu aqui em cima. O H0 é a afirmação de que a amostra é proveniente de uma distribuição normal.

A regra de rejeição é simples: a minha variável de p_valor é menor ou igual a 0,05. Que é o quê? O Alfa. Que é o quê? A minha significância, aquela variavelzinha que eu criei lá em cima.

p_valor <= significância

True

O que ele está dizendo? Que é verdadeira essa afirmação aqui. Então, o que eu faço? Eu rejeito o H0. Que é o quê, novamente? É a hipótese de que a amostra é proveniente de uma distribuição normal.

O que ele está dizendo aqui é que não, não é proveniente de uma distribuição normal, eu rejeito essa hipótese aqui totalmente. Legal? Visualmente a gente confirma isso e agora, com uma estatística mais formal, a gente também confirma isso.

Agora, vamos ver uma variável que realmente siga uma distribuição normal e vamos ver o que esse teste mostra para a gente, só para a gente sentir isso.

A variável Altura, como eu disse no vídeo anterior e venho falando isso nos outros cursos, fui eu que gerei ela a partir de, justamente, uma distribuição normal, que é uma variável aleatória proveniente de uma normal.

Vamos visualizar de novo, só para a gente ter certeza de tudo que eu estou falando Altura.hist. E vou botar o mesmo bins igual a 50 para ficar igualzinho.

dados.Altura.hist(bins = 50)

Olha lá que beleza, o sininho. Bonitinho aqui, certinho, com média em 1 metro e 70. Eu criei assim mesmo, de propósito.

Gráfico em colunas de cor azul. Eixo x vai de 14 a 20, aumentando de 1 em 1. Eixo y vai de 0 a 5000, aumenta de mil a mil.

Aqui, novamente, a regra de rejeição. Eu posso copiar aqui esse cara. Vamos copiar, para a gente adiantar o nosso lado. E já vamos copiar esse daqui também, é o mesmo cara.

Nós vamos substituir o p_valor e o stats aqui. A única coisa que eu tenho que fazer aqui é mudar de Renda para Altura e rodar o teste. Olha lá. A estatística está aqui em cima.

stat_test, p_valor = normaltest(dados.Altura)
print(stat_test)
print(p_valor)

0.19937

Depois a gente vai entender o que é estatística. Agora a gente não está usando, mas a gente vai utilizar ela para tirar algumas decisões. E o nosso P valor, que é o principal. Todo teste que você vai rodar vai plotar o P valor para você, não se preocupe.

E a regra de decisão é sempre essa. Olha aqui, já é um valor altinho, quase um. Vou rodar aqui a minha regrinha de decisão, que eu criei aqui.

p_valor <= significancia

E o que ele está dizendo? Falso. Eu rejeito H0 se valor de P menor ou igual 0,5. O que ele está falando é que não, que é falso. Isso daqui é falso.

O que eu faço? Não posso rejeitar. Eu não posso rejeitar a hipótese nula, H0, de que a amostra é proveniente de uma distribuição normal. E realmente é - fui eu que criei.

E está aqui. Visualmente, realmente parece uma normal. Bonitinho o sino.

Pessoal, é isso que eu queria mostrar nesse vídeo, esse susto inicial. Não se preocupem, a gente vai ver o que é P valor, a gente vai aprender a calcular um P valor na mão, na marra.

H0, hipótese nula, rejeição, aceitar hipótese alternativa. Os níveis de significância a gente já conhece. Mas todas essas coisinhas que eu fui falando aqui, a gente vai ver passo a passo.

No próximo vídeo a gente já vai entender os passos. E no outro a gente vai começar a botar a mão na massa. Vamos fazer testes, passo a passo, e depois no final, eu mostro como é que faz isso, de uma forma bem simples e prática, utilizando funcionalidades do Python. Beleza?

No próximo vídeo a gente vê as etapas básicas de um teste. Até lá.

Sobre o curso Estatística com Python parte 3: Testes de hipóteses

O curso Estatística com Python parte 3: Testes de hipóteses possui 179 minutos de vídeos, em um total de 65 atividades. Gostou? Conheça nossos outros cursos de Estatística em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Estatística acessando integralmente esse e outros cursos, comece hoje!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas