Il Test di Wilcoxon per Rango con segno in Python

Il Test di Wilcoxon per ranghi con segno è un test non parametrico utilizzato per confrontare due serie di dati correlate. Viene utilizzato quando non si può assumere che la differenza tra le coppie di osservazioni segua una distribuzione normale, rendendolo un’alternativa al test t per dati appaiati in situazioni in cui l’assunzione di normalità non è soddisfatta.

Test di Wilcoxon per rango con segno header

Il Test di Wilcoxon per Rango con Segno

Il Test di Wilcoxon per i Segni con Rango si chiama così per due motivi principali: l’uso dei ranghi e dei segni nelle differenze tra le coppie di dati. Vediamo questi aspetti più nel dettaglio:

Uso dei Ranghi

Invece di lavorare direttamente con i valori numerici delle differenze tra le coppie di osservazioni, il test utilizza i ranghi delle differenze assolute. Questo significa che le differenze sono ordinate in base alla loro grandezza, e a ciascuna differenza viene assegnato un rango. Questo approccio consente al test di essere meno sensibile agli outlier rispetto ai test parametrici, che lavorano direttamente con i valori numerici.

Uso dei Segni

Oltre ai ranghi, il test considera anche i segni delle differenze. Dopo aver ordinato le differenze assolute e assegnato i ranghi, i segni originali delle differenze (positivo o negativo) vengono riapplicati ai ranghi. Questo passo è cruciale perché permette al test di considerare sia la direzione (segno) che la grandezza (rango) delle differenze, fornendo una misura più robusta delle differenze tra i due set di dati.

Il nome “Test di Wilcoxon per i Segni con Rango” riflette quindi la combinazione dell’uso dei ranghi delle differenze assolute (per tenere conto della grandezza delle differenze in modo non parametrico) e dei segni delle differenze (per tenere conto della direzione delle differenze). Questo approccio permette di effettuare un test robusto sulle differenze tra due set di dati correlati, senza fare assunzioni sulla distribuzione delle differenze.

Questo test non parametrico è utilizzato nei seguenti casi:

  • Confronto di due campioni dipendenti: Per esempio, confrontare le misurazioni prima e dopo un trattamento sullo stesso gruppo di soggetti.
  • Misurazioni ripetute: Quando si hanno osservazioni multiple sugli stessi soggetti.
  • Non parametricità: Quando non si può assumere che i dati seguano una distribuzione normale.

Assunzioni del Test di Wilcoxon

  1. Le osservazioni devono essere accoppiate.
  2. Le differenze tra le coppie devono essere misurate su una scala almeno ordinale.
  3. Le differenze tra le coppie sono indipendenti.

Procedura del Test di Wilcoxon

  1. Calcolo delle Differenze: Calcolare le differenze tra le osservazioni delle coppie.
  2. Esclusione delle Differenze Nulle: Ignorare le coppie con differenze pari a zero.
  3. Ordinamento delle Differenze: Ordinare le differenze assolute rimanenti in ordine crescente.
  4. Assegnazione dei Ranghi: Assegnare ranghi alle differenze ordinate.
  5. Riassegnazione dei Segni: Riapplicare i segni originali (positivo o negativo) ai ranghi.
  6. Calcolo delle Somme dei Ranghi: Sommare i ranghi con segno positivo e quelli con segno negativo separatamente.
  7. Statistica del Test: La statistica del test ( T ) è il minore tra la somma dei ranghi positivi e negativi.

Ipotesi

  • Ipotesi nulla  H_0 : La mediana delle differenze tra le coppie è zero.
  • Ipotesi alternativa  H_1 : La mediana delle differenze tra le coppie non è zero.

Formula

La statistica del test T viene confrontata con un valore critico da una tabella dei valori critici del Test di Wilcoxon, oppure si può calcolare un valore p.

Vantaggi e Limiti

  • Vantaggi: Non richiede l’assunzione di normalità dei dati; robusto contro i valori anomali.
  • Limiti: Meno potente dei test parametrici quando le assunzioni di questi ultimi sono soddisfatte.

Il Test di Wilcoxon per i Segni con Rango è un potente strumento per analizzare dati appaiati quando le condizioni per i test parametrici non sono soddisfatte, offrendo una valida alternativa per analisi robusta in condizioni di non parametricità.

Esempio di Calcolo

Facciamo un esempio di calcolo utilizzando dei dati di misure mediche ottenute da pazienti prima e dopo un trattamento.

Prima del trattamento: [10, 20, 30, 40, 50]
Dopo il trattamento: [15, 22, 29, 37, 52]

Calcolo delle Differenze

Prima calcoliamo le differenze tra le osservazioni delle coppie:

  • ( 15 – 10 = 5 )
  • ( 22 – 20 = 2 )
  • ( 29 – 30 = -1 )
  • ( 37 – 40 = -3 )
  • ( 52 – 50 = 2 )

Quindi, le differenze sono: ([5, 2, -1, -3, 2])

Esclusione delle Differenze Nulle

In questo caso, non ci sono differenze pari a zero, quindi manteniamo tutte le differenze.

Ordinamento delle Differenze

Ordiniamo le differenze assolute in ordine crescente:

  • Differenza ( -1 ), valore assoluto ( 1 )
  • Differenza ( 2 ), valore assoluto ( 2 )
  • Differenza ( 2 ), valore assoluto ( 2 )
  • Differenza ( -3 ), valore assoluto ( 3 )
  • Differenza ( 5 ), valore assoluto ( 5 )

Assegnazione dei Ranghi

Assegniamo i ranghi alle differenze ordinate. Se ci sono differenze con lo stesso valore assoluto, assegniamo il rango medio:

  •  1 \rightarrow \text{rango } 1
  •  2 \rightarrow \text{rango } 2.5 ) (media dei ranghi 2 e 3)
  •  2 \rightarrow \text{rango } 2.5 )
  •  3 \rightarrow \text{rango } 4 )
  •  5 \rightarrow \text{rango } 5 )

Quindi, i ranghi assegnati alle differenze assolute sono:  [5 (5), 2 (2.5), -1 (1), -3 (4), 2 (2.5)]

Riassegnazione dei Segni

Riapplichiamo i segni originali alle differenze:

  • Differenza ( 5 ), rango ( 5 ) → +5
  • Differenza ( 2 ), rango ( 2.5 ) → +2.5
  • Differenza ( -1 ), rango ( 1 ) → -1
  • Differenza ( -3 ), rango ( 4 ) → -4
  • Differenza ( 2 ), rango ( 2.5 ) → +2.5

Somma dei Ranghi

Sommiamo i ranghi dei valori positivi e negativi separatamente:

  • Somma dei ranghi positivi: ( 5 + 2.5 + 2.5 = 10 )
  • Somma dei ranghi negativi: ( 1 + 4 = 5 )

Statistica del Test

La statistica del test T è il minore tra la somma dei ranghi positivi e la somma dei ranghi negativi:

  •  T = \min(10, 5) = 5

Implementazione del test di Wilcoxon in Python

Eseguiamo i calcoli dell’esempio precedente tramite del codice in Python

import numpy as np
from scipy.stats import wilcoxon

# Data
before_treatment = np.array([10, 20, 30, 40, 50])
after_treatment = np.array([15, 22, 29, 37, 52])

# Calculate differences
differences = after_treatment - before_treatment

# Perform Wilcoxon test
statistic, p_value = wilcoxon(differences)

# Results
print("Differences:", differences)
print("Wilcoxon test statistic:", statistic)
print("p-value:", p_value)

Eseguendo otterremo il seguente risultato

Differences: [ 5  2 -1 -3  2]
Wilcoxon test statistic: 5.0
p-value: 0.625

Andiamo a interpretare i risultati del test Wilcoxon per i segni con rango che hai ottenuto:

  • Statistica del test di Wilcoxon: 5.0
  • Valore p: 0.625

La statistica del test di Wilcoxon, in questo caso 5.0, rappresenta il minore tra la somma dei ranghi positivi e la somma dei ranghi negativi. Questo valore è utilizzato per determinare la significatività statistica del test confrontandolo con una distribuzione predefinita.

Il valore p di 0.625 indica la probabilità di osservare una statistica del test pari a 5.0 o più estrema, assumendo che l’ipotesi nulla sia vera.

  • Ipotesi nulla  H_0 : Non c’è differenza mediana nelle coppie di osservazioni (la mediana delle differenze è zero).
  • Ipotesi alternativa  H_1 : C’è una differenza mediana nelle coppie di osservazioni (la mediana delle differenze non è zero).

Per prendere una decisione, confrontiamo il valore p con il livello di significatività  \alpha tipico, ad esempio 0.05:

  • Se  p \leq \alpha , rifiutiamo l’ipotesi nulla.
  • Se  p > \alpha , non rifiutiamo l’ipotesi nulla.

Nel tuo caso, poiché 0.625 è molto maggiore di 0.05, non possiamo rifiutare l’ipotesi nulla.

Non ci sono prove sufficienti per concludere che ci sia una differenza significativa tra le misurazioni prima e dopo il trattamento. Pertanto, sulla base di questi dati, non possiamo affermare che il trattamento abbia avuto un effetto significativo.

Il calcolo di p tramite il valore di T

Il calcolo del valore ( p ) per il Test di Wilcoxon per i Segni con Rango non è derivato da una formula semplice come in alcuni test parametrici. Piuttosto, si basa sulla distribuzione esatta della statistica del test ( T ) o su approssimazioni basate su questa distribuzione.

Metodo Esatto. Per piccoli campioni, possiamo utilizzare la distribuzione esatta della statistica del test ( T ). Questa distribuzione tiene conto di tutte le possibili permutazioni delle differenze e dei loro ranghi.

Metodo di Approssimazione. Per campioni più grandi, si utilizza un’approssimazione normale con correzione di continuità. Questa approssimazione è basata sul fatto che la somma dei ranghi può essere approssimata da una distribuzione normale quando il numero di osservazioni è sufficientemente grande.

Quando si utilizza l’approssimazione normale, il valore p viene calcolato utilizzando la seguente formula:

 Z = \frac{T - \frac{n(n+1)}{4}}{\sqrt{\frac{n(n+1)(2n+1)}{24}}}

Dove:

  • T è la statistica del test (la somma dei ranghi positivi o negativi, a seconda di quale è più piccolo).
  • n è il numero di coppie di dati (escludendo le differenze pari a zero).

Il valore Z calcolato viene quindi confrontato con la distribuzione normale standard per ottenere il valore p.

  1. Calcolare la Statistica T :
     T = \min(\text{somma dei ranghi positivi}, \text{somma dei ranghi negativi})
  2. Calcolare il Valore Z :
     Z = \frac{T - \frac{n(n+1)}{4}}{\sqrt{\frac{n(n+1)(2n+1)}{24}}}
  3. Determinare il Valore p : Il valore p viene determinato dalla distribuzione normale standard (tabella Z). Si può usare la funzione di distribuzione cumulativa della normale standard (CDF).

Esempio con i Tuoi Dati

Supponiamo di avere ( n = 5 ) (numero di coppie):

Calcolare la Statistica T :

( T = 5 ) (come già calcolato).

Calcolare il Valore Z:
 Z = \frac{5 - \frac{5(5+1)}{4}}{\sqrt{\frac{5(5+1)(2\cdot5+1)}{24}}} = \frac{5 - 7.5}{\sqrt{17.5}} = \frac{-2.5}{\sqrt{17.5}} \approx \frac{-2.5}{4.183} \approx -0.598

Determinare il Valore p :

    • Utilizzare la distribuzione normale standard per trovare il valore ( p ) associato a ( Z = -0.598 ).
    • Si può usare una tabella Z o una funzione CDF in Python.

    Codice Python per l’Approssimazione Normale

    Ecco come calcolarlo in Python:

    import numpy as np
    from scipy.stats import norm
    
    # Number of pairs
    n = 5
    
    # Wilcoxon test statistic T
    T = 5
    
    # Calculate the Z statistic
    mean_T = n * (n + 1) / 4
    std_T = np.sqrt(n * (n + 1) * (2 * n + 1) / 24)
    Z = (T - mean_T) / std_T
    
    # Calculate the p-value using the standard normal distribution
    p_value = 2 * norm.cdf(Z)  # Two-tailed test
    
    # Results
    print("Z:", Z)
    print("p-value:", p_value)

    Eseguendo si ottengono i seguenti risultati:

    Z: -0.674199862463242
    p-value: 0.5001842570707944

    Tuttavia, osserva che la funzione wilcoxon di scipy calcola direttamente il valore p usando la distribuzione esatta per piccoli campioni e l’approssimazione normale per campioni più grandi.

    In conclusione, non esiste una singola formula diretta per convertire T in p per tutti i casi; dipende dal metodo (esatto o approssimativo). Per piccoli campioni, si usano distribuzioni tabulate, mentre per campioni più grandi si usa l’approssimazione normale. In pratica, si utilizza spesso un software statistico per calcolare il valore p in modo accurato.

    Lascia un commento