Pesquisa de site

Como realizar o teste Grubbs em Python


<h2>Introdução <p>O teste de Grubbs é um método estatístico de teste de hipóteses para detectar valores discrepantes em um conjunto de dados. Outliers são as observações que desembolsam a distribuição dos dados e também são conhecidas como anomalias. O conjunto de dados com valores discrepantes tende a se ajustar mais do que os dados com distribuição Normal/Gaussiana. Portanto, é necessário lidar com os valores discrepantes antes da modelagem do aprendizado de máquina. Antes do tratamento, devemos detectar e localizar os valores discrepantes no conjunto de dados. As técnicas de detecção de outliers mais populares são QQPlot, intervalo interquartil e teste estatístico de Grubbs. No entanto, este artigo discutirá apenas o teste de Grubbs para detectar valores discrepantes. Você aprenderá: o que é um teste Grubbs e como implementá-lo em Python.

O que são valores discrepantes?

Outliers são observações de dados numericamente distantes de outros valores de dados. Esses valores estão presentes fora do intervalo de dados normalmente distribuídos. O conjunto de dados deve conter 67% de registros abaixo do primeiro desvio padrão, 95% dos dados abaixo do segundo desvio padrão e 99,7% pontos abaixo do terceiro desvio padrão da média para atingir a distribuição normal. Em outras palavras, os pontos de dados devem estar entre o intervalo do primeiro e do terceiro quartil. Consideramos os registros presentes abaixo do primeiro quartil e acima do terceiro quartil como outliers ou anomalias.

Teste de hipótese estatística de Grubbs

O teste de Grubbs também aprova ou rejeita a hipótese Nula (H0) ou alternativa (H1) como qualquer outro teste de hipótese estatística. O teste de Grubbs é um teste para detectar valores discrepantes em um conjunto de dados.

Podemos realizar o teste de Grubbs de duas maneiras: o Teste unilateral e o Teste bilateral para um conjunto de dados univariado ou uma amostra de uma distribuição quase normal com pelo menos pelo menos sete variáveis. Este teste também é conhecido como teste de desvio estudantil extremo ou teste de resíduo normalizado máximo.

O teste de Grubbs usa a seguinte hipótese -

  • Nulo (H0): O conjunto de dados não possui valores discrepantes.

  • Alternativa (H1): O conjunto de dados possui exatamente um outlier.

Teste Grubbs em Python

Python supera qualquer desafio de programação com sua vasta coleção de bibliotecas. Essas bibliotecas fornecem métodos integrados para uso direto na execução de qualquer operação, teste estatístico e muito mais. Da mesma forma, Python possui uma biblioteca com métodos para realizar o teste de Grubbs para detectar valores discrepantes. No entanto, exploraremos as duas maneiras de implementar o teste Grubbs em Python: a função embutida de uma biblioteca e a implementação da fórmula do zero.

Biblioteca de Outliers e Smirnov_grubbs

Vamos primeiro instalar a biblioteca outlier_utils usando o seguinte comando.

!pip install outlier_utils

Agora vamos fazer um conjunto de dados com outliers e realizar o teste de Grubbs.

Teste de Grubbs Dupla Face

Sintaxe

grubbs.test(data, alpha=.05)

Parâmetros

data - Vetor numérico de valores de dados.

alpha - Nível de significância do teste.

Explicação

Nesta abordagem, o usuário deve utilizar a função smirnov_grubbs.test() do pacote outliers passado com os dados necessários como entradas para executar o teste de Grubb.

Exemplo

import numpy as np
from outliers import smirnov_grubbs as grubbs
 
#define data
data = np.array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40])
 
#perform Grubbs' test
grubbs.test(data, alpha=.05)

Saída

array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22,  8, 21, 28, 11,  9, 29])

O código acima simplesmente começa com o carregamento das bibliotecas e dados e, finalmente, realizando o teste Grubbs nesses dados usando o método “test”. Este teste detecta valores discrepantes de ambos os lados, esquerdo e direito, ou valores abaixo do primeiro e acima do terceiro quartil. Os dados têm apenas 1 valor discrepante como 40, que foi removido usando o teste de Grubbs.

Teste de Grubbs Unilateral

Sinatx

grubbs.max_test(data, alpha=.05)

Explicação

Neste método, o usuário deve chamar a função grubbs.min_test() para obter o outlier mínimo do conjunto de dados fornecido ou a função grubbs.max_test() para obter o outlier máximo do conjunto de dados fornecido para obter o teste de Grubb unilateral.

Exemplo

import numpy as np
from outliers import smirnov_grubbs as grubbs
 
#define data
data = np.array([5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40])

#perform Grubbs' test for minimum value is an outlier
print(grubbs.min_test(data, alpha=.05)) 

#perform Grubbs' test for minimum value is an outlier
grubbs.max_test(data, alpha=.05)

Saída

[ 5 14 15 15 14 19 17 16 20 22  8 21 28 11  9 29 40]
array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22,  8, 21, 28, 11,  9, 29])

O teste de Grubbs unilateral detecta os valores discrepantes abaixo do primeiro quartil ou acima do terceiro quartil. Podemos ver que o método min_test remove os outliers do lado mínimo e o método max_test da parte superior dos dados.

Implementação de Fórmula

Aqui implementaremos a seguinte fórmula de teste Grubbs em Python. Usaremos as bibliotecas Numpy e Scipy para a implementação.

Sintaxe

g_calculated = numerator/sd_x
g_critical = ((n - 1) * np.sqrt(np.square(t_value_1))) / (np.sqrt(n) * np.sqrt(n - 2 + np.square(t_value_1)))

Algoritmo

As etapas de implementação são as seguintes -

  • Calcule a média dos valores do conjunto de dados.

  • Calcule o desvio padrão dos valores do conjunto de dados.

  • Para implementar a fórmula do teste de Grubbs, calcule o numerador subtraindo cada valor do conjunto de dados de sua média.

  • Divida o valor do numerador pelo desvio padrão para obter a pontuação calculada.

  • Calcule a pontuação crítica para os mesmos valores.

  • Se o valor crítico for maior que os valores calculados, não haverá valores discrepantes no conjunto de dados, caso contrário, haverá presença de valores discrepantes.

Exemplo

import numpy as np
import scipy.stats as stats
## define data
x = np.array([12,13,14,19,21,23])
y = np.array([12,13,14,19,21,23,45])

## implement Grubbs test
def grubbs_test(x):
   n = len(x)
   mean_x = np.mean(x)
   sd_x = np.std(x)
   numerator = max(abs(x-mean_x))
   g_calculated = numerator/sd_x
   print("Grubbs Calculated Value:",g_calculated)
   t_value_1 = stats.t.ppf(1 - 0.05 / (2 * n), n - 2)
   g_critical = ((n - 1) * np.sqrt(np.square(t_value_1))) / (np.sqrt(n) * np.sqrt(n - 2 + np.square(t_value_1)))
   print("Grubbs Critical Value:",g_critical)
   if g_critical > g_calculated:
      print("We can see from the Grubbs test that the calculated value is less than the crucial value. Recognize the null hypothesis and draw the conclusion that there are no outliers\n")
   else:
      print("We see from the Grubbs test that the estimated value exceeds the critical value. Reject the null theory and draw the conclusion that there are outliers\n")
grubbs_test(x)
grubbs_test(y)

Saída

Grubbs Calculated Value: 1.4274928542926593
Grubbs Critical Value: 1.887145117792422
We can see from the Grubbs test that the calculated value is less than the crucial value. Recognize the null hypothesis and draw the conclusion that there are no outliers

Grubbs Calculated Value: 2.2765147221587774
Grubbs Critical Value: 2.019968507680656
We see from the Grubbs test that the estimated value exceeds the critical value. Reject the null theory and draw the conclusion that there are outliers

Os resultados do teste Grubb indicam que a matriz x não possui nenhum valor discrepante, mas y possui 1 valor discrepante.

Conclusão

Aprendemos sobre o teste Outliers e Grubbs em Python neste artigo. Vamos resumir este artigo com algumas conclusões.

  • Outliers são os registros presentes fora da faixa quartil.

  • Os valores discrepantes estão fora da distribuição normal do conjunto de dados.

  • Podemos detectar valores discrepantes usando o teste estatístico de hipótese de Grubbs.

  • Podemos realizar o teste Grubbs usando métodos integrados disponíveis na biblioteca outlier_utils.

  • O teste de Grubbs bilateral detecta e remove valores discrepantes dos lados esquerdo e direito.

  • No entanto, o teste de Grubbs unilateral detectará os valores discrepantes de ambos os lados.

Artigos relacionados: