Testes não paramétricos - teste de Wilcoxon e teste de Friedman com teste de acompanhamento de Nemenyi

Recentemente li um artigo e vi o teste Wilcoxon-signed-rank (teste de posto assinado) Não sabíamos o que era, então estudamos e fizemos algumas anotações aqui para referência futura.

Teste não paramétrico

conceito

数据描述As três perspectivas: tendência central, grau de dispersão e forma de distribuição.

Comumente 统计推断检验方法divididos em duas categorias: testes paramétricos e testes não paramétricos.

参数检验Normalmente, assume-se que a população obedece à distribuição normal e as estatísticas da amostra obedecem à distribuição T, e alguns parâmetros desconhecidos na distribuição da população, como a média da população, a variância da população e o desvio padrão da população, são inferidos estatisticamente.

Se a distribuição geral for desconhecida e o tamanho da amostra for pequeno, é impossível usar o teorema do limite central para implementar o teste de parâmetros e inferir os parâmetros gerais de tendência central e grau de dispersão. Neste momento, testes não paramétricos podem ser usados 非参数检验​​para inferir a distribuição geral diretamente da análise da amostra sem fazer suposições sobre a distribuição geral.

Comparação de testes não paramétricos e paramétricos

insira a descrição da imagem aqui
① Âmbito de aplicação :

Os testes não paramétricos são usados ​​como uma alternativa aos testes paramétricos e são usados ​​quando os dados não são normais . Portanto, a chave é descobrir se você tem uma distribuição normal. Se seus dados seguem aproximadamente uma distribuição em "forma de sino", você pode usar testes paramétricos.

② Eficiência do teste :

Se os dados satisfizerem uma distribuição paramétrica, os métodos de teste paramétricos devem ser preferidos . A razão é que o poder dos testes paramétricos é maior que o dos testes não paramétricos. Principalmente no caso de um tamanho amostral grande, o resultado do teste paramétrico é mais robusto, então mesmo que não obedeça a distribuição normal, o teste paramétrico será selecionado.

③ Indicadores comparativos :

Os testes paramétricos geralmente usam o valor médio para refletir a tendência central dos dados; no entanto, como os dados não satisfazem a distribuição normal, obviamente não é preciso usar o valor médio para descrever no teste não paramétrico (como o renda per capita que é frequentemente reclamada), neste momento os números medianos são uma escolha melhor.

  1. Resultados da análise do teste paramétrico
    insira a descrição da imagem aqui
    O teste paramétrico descreve a distribuição de dados com a média e o desvio padrão.

  2. Análise Resultados de testes não paramétricos
    insira a descrição da imagem aqui
    Nos resultados de testes não paramétricos, a mediana é usada para descrever a diferença.

④ Exibição gráfica :

Além de usar os indicadores acima para análise, você também pode exibir visualmente a situação dos dados por meio de gráficos. Gráficos comumente usados ​​para testes paramétricos incluem gráficos de linhas, gráficos de barras, etc., e gráficos de caixa para testes não paramétricos.

insira a descrição da imagem aqui

gráfico de linha
 

insira a descrição da imagem aqui

Boxplot
 

Comparação de métodos para testes paramétricos e não paramétricos

Qualquer método de teste que não envolva os parâmetros de distribuição geral no processo de análise pode ser chamado de "teste não paramétrico". Assim, como os testes paramétricos, os testes não paramétricos incluem muitos métodos. A seguir estão os testes não paramétricos mais comuns e suas correspondentes contrapartes de teste paramétrico:

insira a descrição da imagem aqui

Métodos para testes não paramétricos

Existem vários métodos de teste não paramétrico e os nomes também são estranhos, mas esses métodos têm pontos em comum.

Conforme mencionado acima, como o formato da distribuição geral não é claro ou a distribuição geral não é uma distribuição normal, é impossível usar o teste de parâmetros para inferir os parâmetros da tendência central geral e o grau de dispersão.

Os estatísticos pensam em 排秩(排序)maneiras de evitar o problema da distribuição não normal e usam a ordenação das amostras para inferir a distribuição geral. É como se os cento e oito generais de Liangshan tivessem organizado seus assentos e selecionado aleatoriamente alguns deles para testar o valor da força, então eles provavelmente podem entender a força de Liangshan.

A figura a seguir é uma tabela de métodos de teste comumente usados ​​para testes não paramétricos:
insira a descrição da imagem aqui

Teste de Wilcoxon

Frank Wilcoxon (1892-1965) foi um estatístico americano que publicou cerca de 70 artigos, mas sua maior contribuição foram os dois métodos de teste de hipóteses não paramétricas nomeados em sua homenagem : 秩和检验e 符号秩检验. Em seu artigo publicado em 1945, ele os chamou de experimento não pareado e comparação pareada , respectivamente. É precisamente por causa de sua grande influência que esses dois métodos de teste são nomeados em sua homenagem e transmitidos.

Teste de soma de classificação de Wilcoxon

conceito básico

Em estatística, o teste de soma de classificação de Wilcoxon (teste de soma de classificação de Wilcoxon) também é chamado de teste de Mann-Whitney U (teste de Mann-Whitney U) ou teste de Wilcoxon-Mann-Whitney. O teste de soma de classificação é um método de teste de hipótese não paramétrico, geralmente usado para detectar se dois conjuntos de dados vêm da mesma distribuição da população.

Aqui “秩”está, na verdade, “排名”o significado de , "soma da classificação", é claro, refere-se à operação de "soma das classificações". No teste de soma de postos, não exigimos que os dois conjuntos de dados a serem testados contenham o mesmo número de elementos, ou seja, o teste de soma de postos é mais adequado para a detecção de diferenças entre dados não pareados.

Formulários

Suponha que temos 2 conjuntos de dados x 1 x_{1}x1e x 2 x_{2}x2, conforme mostrado na tabela abaixo, x 1 x_{1}x1Existem 7 elementos em (coluna x 1 x_1x1), x 2 x_{2}x2Existem 8 elementos em (coluna x 2 x_{2}x2Meio), agora use o teste de soma de classificação para julgar se há uma diferença significativa entre os dois conjuntos de dados.

insira a descrição da imagem aqui
Etapa 1: primeiro definimos x 1 x_{1}x1e x 2 x_{2}x2Integre em uma sequência e reordene em ordem crescente, o número de série é registrado na classificação na tabelacoluna de classificação . Calculamos a soma das classificações dos dois conjuntos de dados, respectivamenteR 1 R_{1}R1e R 2 R_{2}R2Sim:
insira a descrição da imagem aqui
Observe que quando calculamos os postos de vários elementos equivalentes, usamos a média dos postos desses elementos como seu posto na sequência inteira. por exemplo, x 1 x_{1}x1O segundo elemento em x 2 x_{2}x2O valor do terceiro elemento em é igual a 5, e as classificações desses dois 5s em toda a sequência são 5º e 6º respectivamente, então as classificações desses dois elementos são 5 + 6 2 = 5,5 \frac{5+6 } {2}=5,525 + 6=5.5 . O cálculo da classificação dos elementos equivalentes restantes também é semelhante.

Passo 2: Seja n 1 n_{1}n1e n 2 n_{2}n2Representam respectivamente o número de dois conjuntos de dados, ou seja, n 1 = 7 n_{1}=7n1=7 ,n 2 = 8 n_{2}=8n2=8 . Então deixe T TT representar a soma de classificação de pequenas amostras, ou seja,T = R 1 = 77,5 T = R_1 = 77,5T=R1=77,5 . De acordo com a fórmula de cálculo, U 1 U_{1}pode ser obtidovocê1Soma U 2 U_{2}você2Os valores são os seguintes:

insira a descrição da imagem aqui
Etapa 3: desde U 1 U_{1}você1Ainda menor, verificamos a tabela crítica bicaudal de Wilcoxon de acordo com isso, quando α = 0,05 , n 1 = 7 , n 2 = 8 α = 0,05 , n_1 = 7 , n_2 = 8a=0,05 ,n1=7 ,n2=O corte em 8 é 10. DesdeU 1 < 10 U_{1} < 10você1<10 , portanto a hipótese nula deve ser rejeitada.

A conclusão final é: x 1 x_{1}x1e x 2 x_{2}x2Existem diferenças estatisticamente significativas que podem surgir de populações distribuídas de forma diferente.

programação

Em python, chamamos a função no pacote scipy stats.mannwhitneyu()para implementar o teste rank sum, conforme a seguir:

from scipy import stats

x = [9,5,8,7,10,6,7]
y = [7,4,5,6,3,6,4,4]

def wilcoxon_rank_sum_test(x, y):
	res = stats.mannwhitneyu(x ,y)
	print(res)

wilcoxon_rank_sum_test(x, y)

wilcoxon_rank_sum_test(y, x)

insira a descrição da imagem aqui

Wilcoxon teste de classificação sinalizada (teste de classificação sinalizada)

conceito básico

O teste de classificação sinalizada de Wilcoxon (teste de classificação sinalizada de Wilcoxon) também é um método de teste de hipótese não paramétrico, que 成对verifica os dados em dois conjuntos de dados (ou seja, teste de diferenças pareadas) para determinar se os dois conjuntos de dados vêm da mesma distribuição geral.

Formulários

Suponha que temos 2 conjuntos de dados y 1 y_{1}y1y 2 y_{2}y2, conforme tabela abaixo. Seguimos as 3 etapas a seguir para calcular os resultados do teste de postos sinalizados de Wilcoxon.
insira a descrição da imagem aqui
Passo 1: Primeiro para y 1 y_{1}y1y 2 y_{2}y2Dois pares são emparelhados para formar 10 pares de dados (isto é, ID = 0 , . . . , 9 ID=0,...,9eu D=0 ,... ,9 ) e, em seguida, calcule a diferença entre esses 10 pares de dados para obter o sinal de sinal de bit desinalcolunas de sinais . _ O método específico é: quandoy 1 y_1y1Razão do elemento y 2 y_2y2Quando o elemento correspondente é grande, o bit de sinal é positivo, ou seja, + 1 + 1+ 1;当y 1 y_1y1Razão do elemento y 2 y_2y2Correspondente ao elemento hora, o bit de sinal é negativo, ou seja, − 1 -1−1 . _ Por exemplo, emID = 1 ID = 1eu D=1 par de dados,125 > 110 125 > 110125>110 , então seu bit de sinal é+1 +1+1 . _

Passo 2: Primeiro para y 1 y_{1}y1y 2 y_{2}y2Calcule a diferença em pares para obter o valor absoluto abs absab s coluna, então de acordo comabs absclassificação da coluna ab s para obtera classificação da classificaçãocoluna de classificação . Quando um par dey 1 y_{1}y1y 2 y_{2}y2Quando os elementos são iguais, ou seja, abs = 0 abs=0abdominais _=0 , não calculamos suaclassificaçãovalor de classificação . Por exemplo, emID = 4 ID = 4eu D=4 pares de dados,y 1 y_1y1y 2 y_2y2Ambos têm um valor de 140, portanto, esse par de arrays não tem valor de classificação.

Passo 3: Com este sinal de sinals i g n eclassificação classificaçãoApós os resultados da coluna de classificação , podemos calcular a soma de classificação, onde a soma de classificação maior que 0 éW + W^{+}C+ e para somas de classificação menores que 0W − W^{-}C , e a soma final dos postos assinados∣ W ∣ |W|W como segue,

insira a descrição da imagem aqui
Passo 4: Finalmente nós de acordo com ∣ W ∣ |W|W para consultar a tabela, obtemos quando Wilcoxon está emα = 0,05 \alpha=0,05a=0,05 n = 9 n = 9n=9 , o valor crítico é 5, e calculamos∣ W ∣ = 9 > 5 |W| = 9 > 5W =9>5 , então não podemos rejeitar a hipótese nula. A conclusão final é:y 1 y_{1}y1y 2 y_{2}y2Não há diferenças estatisticamente significativas e podem vir de populações da mesma distribuição.

programação

Em python, chamamos a função stats.wilcoxon() no pacote scipy para implementar o teste de soma de classificação, como segue,

from scipy import stats

x = [125,115,130,140,140,115,140,125,140,135]
y = [110,122,125,120,140,124,123,137,135,145]

def wilcoxon_signed_rank_test(x, y):
	res = stats.wilcoxon(x ,y)
	print(res)

wilcoxon_signed_rank_test(x, y)

wilcoxon_signed_rank_test(y, x)

insira a descrição da imagem aqui
Os resultados obtidos são os seguintes, onde estatística = 18,0 estatística = 18,0s t a t i s t i c=18.0 , indicando o menor dos dois tipos de postos assinados (∣ W + |W^{+}W+ soma∣ W − ∣ |W^{-}|W ∣Omenor é18 1818);pvalor = 0,5936 … pvalor=0,5936…p v a l u e=0,5936... é o que precisamosp − valor p-valorpv a lu e value . O motivo da informação de aviso é que nosso volume de dados é muito pequeno, em geral, é maior que20 2020 é mais adequado para testes de hipóteses.

> warnings.warn("Tamanho da amostra muito pequeno para aproximação normal.")

Tabela Crítica do Teste de Classificação Sinalizada de Wilcoxon

insira a descrição da imagem aqui
Atualização em 12 de outubro de 2022:
Foi muito difícil para mim e vi o algoritmo de Friedman novamente. Não sei o que é, então vamos continuar aprendendo e registrá-lo!

Teste de Friedman e teste de acompanhamento de Nemenyi

Quando propomos um algoritmo e precisamos saber se nosso algoritmo tem melhor desempenho do que os algoritmos existentes, precisamos usar o método de avaliação de desempenho do modelo.

A característica do teste de Friedman e do método de teste de acompanhamento de Nemenyi é que ele pode comparar vários algoritmos .

Calcular valor ordinal

Suponha que usamos D 1 , D 2 , D 3 D_1, D_2, D_3D1D2D3e D 4 D_4D4Quatro pares de conjuntos de dados Algoritmo AAA ,BBBCCC para comparação.

Primeiro, você precisa obter os resultados do teste de cada algoritmo em cada conjunto de dados, que pode ser a taxa de precisão ou o erro quadrático médio e, em seguida, classificar cada dado de acordo com o desempenho do teste e atribuir o valor de sequência 1, 2,. ..

Se o desempenho de teste do algoritmo for o mesmo, a pontuação será classificada.
Por exemplo, em D 1 D_1D1e D3D_3D3Acima, AAA é o melhor,BBB próximo,CCC é o pior, enquanto emD 2 D_2D2Superior AAA é o melhorBBB eCCC desempenho é o mesmo, ..., então você pode listar a tabela de valores ordinais conforme mostrado na tabela a seguir e calcular a média do valor ordinal de cada coluna para obter o valor ordinal médio.

insira a descrição da imagem aqui

teste de Friedman

Use o teste de Friedman para ver se os algoritmos funcionam igualmente. Se forem iguais, seus valores médios de pedido devem ser iguais.

Suponha que estamos em NNComparar kkem N conjuntos de dadosk algoritmos, deixeri r_ireuIndica o iiO valor médio da sequência dos i algoritmos. Para simplificar a discussão, não considere temporariamente o caso de valores de sequência de bisseção, entãori r_ireuObedeça a distribuição normal, sua média e variância são ( k + 1 ) / 2 (k+1)/2( k+1 ) /2 e( k 2 − 1 ) / 12 (k^2-1)/12( k21 ) /12 . variável

insira a descrição da imagem aqui
em kkk eNNQuando N é grande, o grau de liberdade é k − 1 k-1kχ 2 \chi^2de 1h2 distribuição.

No entanto, tal "teste bruto de Friedman" como acima é muito conservador e agora geralmente usa a variável

insira a descrição da imagem aqui
Entre eles, τ F \tau_FtFSujeito a k − 1 k-1 graus de liberdadek1 e( k − 1 ) ( N − 1 ) (k-1)(N-1)( k1 ) ( N1 ) FF__distribuição F. Os valores limite comumente usados ​​podem ser vistos na tabela abaixo.

insira a descrição da imagem aqui
Se a suposição de que "todos os algoritmos têm o mesmo desempenho" for rejeitada, isso significa que o desempenho dos algoritmos é significativamente diferente.

Teste de seguimento de Nemenyi

Neste momento, é necessário usar o "teste post-hoc" para distinguir ainda mais o algoritmo. Um algoritmo comumente usado é o teste de acompanhamento Nemenyi.

O teste Nemenyi calcula o intervalo crítico para a diferença nos valores ordinais médios

insira a descrição da imagem aqui
A tabela a seguir fornece α = 0,05 \alpha = 0,05a=0,05 e0,1 0,1O comumente usadoq α q_\alpha em 0,1qavalor.

Se a diferença entre os valores médios da sequência dos dois algoritmos exceder o domínio de valor crítico #CD#, rejeite a hipótese "o desempenho dos dois algoritmos é o mesmo" com a confiança correspondente.

insira a descrição da imagem aqui

Implementação do Python

import numpy as np
import matplotlib.pyplot as plt
 
 
def Friedman(n, k, data_matrix):
    '''
    Friedman 检验
    :param n:数据集个数
    :param k: 算法种数
    :param data_matrix:排序矩阵
    :return:T1
    '''
 
    # 计算每个算法的平均序值
    row, col = data_matrix.shape  # 获取矩阵的行和列
    xuzhi_mean = list()
    for i in range(col):  # 计算平均序值
        xuzhi_mean.append(data_matrix[:, i].mean())  # xuzhi_mean = [1.0, 2.125, 2.875] list列表形式
    sum_mean = np.array(xuzhi_mean)  # 转成 numpy.ndarray 格式方便运算
 
    sum_ri2_mean = (sum_mean ** 2).sum()  # 整个矩阵内的元素逐个平方后,得到的值相加起来
    result_Tx2 = (12 * n) * (sum_ri2_mean - ((k * ((k + 1) ** 2)) / 4)) / (k * (k + 1))  # P42页的公式
    result_Tf = (n - 1) * result_Tx2 / (n * (k - 1) - result_Tx2)  # P42页的公式
    return result_Tf
 
 
def nemenyi(n, k, q):
    '''
    Nemenyi 后续检验
    :param n:数据集个数
    :param k:算法种数
    :param q:直接查书上2.7的表
    :return:
    '''
    cd = q * (np.sqrt((k * (k + 1) / (6 * n))))
    return cd
 
 
data = np.array([[1, 2, 3], [1, 2.5, 2.5], [1, 2, 3], [1, 2, 3]])
 
T1 = Friedman(4, 3, data)
cd = nemenyi(4, 3, 2.344)
print('tf={}'.format(T1))
print('cd={}'.format(cd))
 
# 画出CD图
row, col = data.shape  # 获取矩阵的行和列
xuzhi_mean = list()
for i in range(col):  # 计算平均序值
    xuzhi_mean.append(data[:, i].mean())  # xuzhi_mean = [1.0, 2.125, 2.875] list列表形式
sum_mean = np.array(xuzhi_mean)
# 这一句可以表示上面sum_mean: rank_x = list(map(lambda x: np.mean(x), data.T))  # 均值 [1.0, 2.125, 2.875]
name_y = ["A1", "A2", "A3"]
# 散点左右的位置
min_ = sum_mean - cd / 2
max_ = sum_mean + cd / 2
# 因为想要从高出开始画,所以数组反转一下
name_y.reverse()
sum_mean = list(sum_mean)
sum_mean.reverse()
max_ = list(max_)
max_.reverse()
min_ = list(min_)
min_.reverse()
# 开始画图
plt.title("Friedman")
plt.scatter(sum_mean, name_y)  # 绘制散点图
plt.hlines(name_y, max_, min_)
plt.show()

Referências

Como entender os testes não paramétricos?

Resumo das ideias de testes não paramétricos, a compreensão clara depende disso!

Soma de classificação e classificação sinalizada do teste de Wilcoxon

Teste de classificação assinada de Wilcoxon: definição, como executá-lo

Wilcoxon Signed Rank Test: Definição, Como Executar, SPSS

Teste de Friedman e teste de acompanhamento de Nemenyi para avaliação de desempenho do modelo

[Livro Melancia Capítulo 2] 2.4.4 Teste de Friedman e teste de Nemenyi

Acho que você gosta

Origin blog.csdn.net/qq_41990294/article/details/127165776
Recomendado
Clasificación