Guida Pratica: Quale Test Statistico Usare? Dalla Teoria al Codice Python

Cerca:

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Hai mai avuto la sensazione di annegare nei dati, con la risposta che sembra a portata di mano ma non sai come afferrarla? Sei di fronte a due versioni di un sito web e devi decidere quale funziona meglio, oppure vuoi capire se una campagna marketing ha davvero cambiato le preferenze dei clienti. I dati contengono la risposta, ma per sentirla serve lo strumento giusto.

Questo articolo non è un manuale accademico, ma una bussola pratica.

Ti aiuterà a scegliere il test statistico più adatto alle tue domande, trasformando l’incertezza in una decisione chiara e supportata dai numeri. Vedremo insieme come passare da una semplice tabella di dati a un’affermazione sicura, usando esempi concreti e codice Python pronto all’uso.

📊 Guida Visiva: Scegliere il Test Statistico Giusto

🔍 Step 1: Che tipo di dati hai?

Tipo di Dato Esempi Test consigliati
Numerico continuo Altezza, peso, tempo, punteggio t-test, ANOVA, KS, Mann–Whitney
Numerico discreto Numero figli, voti (1–10) Chi-quadrato, Wilcoxon, Kruskal–Wallis
Categorico Sesso, colore, preferenze Chi-quadrato, test di proporzioni

🧪 Step 2: Cosa vuoi confrontare?

  • Un campione vs distribuzione teorica → Kolmogorov–Smirnov (KS)
  • Due campioni indipendenti → t-test, Mann–Whitney U
  • Più di due gruppi → ANOVA, Kruskal–Wallis
  • Frequenze tra categorie → Chi-quadrato
  • Medie con varianze diverse → Welch’s t-test

🧪 Test Pratici con Esempi

✅ 1. Test KS (Kolmogorov–Smirnov)
Obiettivo: Verificare se un campione segue una distribuzione teorica (es. normale)

import numpy as np
from scipy.stats import kstest

# Dati simulati
dati = np.random.normal(0, 1, 100)

# Test KS contro distribuzione normale
stat, p = kstest(dati, 'norm')
print("D =", stat, "p-value =", p)

📌 Se p > 0.05 → i dati sono compatibili con la distribuzione normale.

✅ 2. Test di Mann–Whitney U
Obiettivo: Confrontare due gruppi indipendenti (non necessariamente normali)

from scipy.stats import mannwhitneyu

gruppo1 = np.random.normal(0, 1, 50)
gruppo2 = np.random.normal(0.5, 1, 50)

stat, p = mannwhitneyu(gruppo1, gruppo2)
print("U =", stat, "p-value =", p)

📌 Se p < 0.05 → i gruppi sono significativamente diversi.

✅ 3. Test t di Welch
Obiettivo: Confrontare le medie di due gruppi con varianze diverse

from scipy.stats import ttest_ind

gruppo1 = np.random.normal(0, 1, 30)
gruppo2 = np.random.normal(0.5, 2, 30)

stat, p = ttest_ind(gruppo1, gruppo2, equal_var=False)
print("t =", stat, "p-value =", p)

📌 Welch è più robusto quando le varianze sono diverse.

Forse potrebbe interessarti anche:  Tutorial Numpy: Array & Broadcasting

✅ 4. Test Chi-quadrato
Obiettivo: Verificare se due variabili categoriche sono indipendenti

from scipy.stats import chi2_contingency

# Tabella di contingenza
tabella = [[20, 15], [30, 35]]

stat, p, _, _ = chi2_contingency(tabella)
print("Chi² =", stat, "p-value =", p)

📌 Se p < 0.05 → le variabili sono associate.

🧠 Bonus: Quando usare il p-value?

  • p < 0.05 → differenza significativa (rifiuti H₀)
  • p ≥ 0.05 → nessuna evidenza contro H₀ (accetti H₀)

Esempi Pratici di Scelta del Test Statistico

📌 Esempio 1: Confronto tra altezze di uomini e donne

  • Tipo di dato: numerico continuo
  • Obiettivo: confrontare due gruppi indipendenti
  • Test consigliato: t-test di Student (se varianze uguali e normalità) o Mann–Whitney U (se non normale)
import numpy as np
from scipy.stats import ttest_ind, mannwhitneyu

uomini = np.random.normal(175, 7, 50)
donne = np.random.normal(165, 6, 50)

# t-test classico
stat, p = ttest_ind(uomini, donne)
print("t =", stat, "p =", p)

# alternativa non parametrica
stat_u, p_u = mannwhitneyu(uomini, donne)
print("Mann–Whitney U =", stat_u, "p =", p_u)

Motivazione: Il t-test di Student è scelto perché si tratta di dati numerici continui da due gruppi indipendenti, e assume normalità e varianze uguali (qui simulate con distribuzioni normali). È parametrico e potente quando le assunzioni sono soddisfatte, permettendo di testare differenze nelle medie. Il Mann-Whitney U è l’alternativa non parametrica quando la normalità non è verificata, confrontando le distribuzioni senza assumere parametricità. Si escludono test come ANOVA (per più di due gruppi), Chi-quadrato (per dati categorici), o KS (per test di normalità, non confronto) perché non si adattano al numero di gruppi o al tipo di dato. Test come il paired t-test sono esclusi poiché i gruppi sono indipendenti, non appaiati.

T-test vs Mann-Whitney U: Guida Rapida

Domanda fondamentale: I miei dati seguono una distribuzione normale?

  • Sì (dati normali): T-test
  • No (dati non normali, asimmetrici, outlier o ordinali): Mann-Whitney U

🧑‍🔬 T-test

Cosa fa: Confronta le medie di due gruppi indipendenti.

Quando usarlo: dati numerici continui, distribuzione normale, varianze simili.

Punto debole: sensibile agli outlier.

Forse potrebbe interessarti anche:  R Quadrato vs Correlazione: Differenza, Calcolo e Guida Pratica

Analogia: Il bisturi da chirurgo della statistica: preciso ma delicato.

🛠️ Mann-Whitney U

Cosa fa: Confronta i ranghi dei dati dei due gruppi, non le medie.

Quando usarlo: dati non normali, ordinali o con outlier.

Punto debole: leggermente meno potente del T-test se i dati sono normali.

Analogia: Il fuoristrada robusto: affidabile su ogni terreno.

📊 Tabella Riassuntiva

Caratteristica T-test Mann-Whitney U
Domanda a cui risponde Le medie dei due gruppi sono diverse? I valori di un gruppo tendono a essere più alti/bassi dell’altro?
Tipo di test Parametrico Non parametrico
Assunzione chiave Normalità dei dati Nessuna assunzione sulla distribuzione
Tipo di dati ideale Numerico continuo Numerico continuo, Ordinale
Sensibilità agli outlier Alta Bassa
Quando è la scelta migliore Dati “puliti”, a campana, senza outlier Dati asimmetrici, con outlier o ordinali

Conclusione: Controlla sempre la normalità dei dati. In caso di dubbi, Mann-Whitney U è la scelta più sicura.


📌 Esempio 2: Preferenza tra due marchi

  • Tipo di dato: categorico
  • Obiettivo: verificare se la preferenza dipende dal genere (M/F)
  • Test consigliato: Chi-quadrato per l’indipendenza
from scipy.stats import chi2_contingency

# Tabella di contingenza (righe: genere, colonne: preferenza)
tabella = [[30, 20],  # uomini
           [25, 25]]  # donne
stat, p, _, _ = chi2_contingency(tabella)
print("Chi² =", stat, "p =", p)

Motivazione: Il test del Chi-quadrato è selezionato perché analizza l’associazione tra due variabili categoriche (genere e preferenza) in una tabella di contingenza, testando l’indipendenza senza assumere distribuzioni parametriche. È ideale per conteggi e frequenze. Si escludono test parametrici come t-test o ANOVA (richiedono dati numerici continui, non categorici) e test non parametrici come Mann-Whitney (per confronti di ranghi in dati continui, non per indipendenza categorica). KS è escluso perché verifica la normalità, non relazioni tra categorie.


📌 Esempio 3: Confronto di tempi di reazione in tre gruppi

  • Tipo di dato: numerico continuo
  • Obiettivo: confrontare più di due gruppi
  • Test consigliato: ANOVA (se normale e omogeneità varianze) o Kruskal–Wallis (se non normale)
from scipy.stats import f_oneway, kruskal

g1 = np.random.normal(0.5, 0.1, 30)
g2 = np.random.normal(0.6, 0.1, 30)
g3 = np.random.normal(0.7, 0.1, 30)

# ANOVA
stat, p = f_oneway(g1, g2, g3)
print("ANOVA F =", stat, "p =", p)

# alternativa non parametrica
stat_k, p_k = kruskal(g1, g2, g3)
print("Kruskal–Wallis =", stat_k, "p =", p_k)

Motivazione: L’ANOVA è scelta per confrontare medie di più di due gruppi indipendenti con dati numerici continui, assumendo normalità e omoschedasticità (qui simulate). È efficiente per testare differenze globali. Kruskal-Wallis è l’alternativa non parametrica quando le assunzioni non tengono, basandosi su ranghi. Si escludono t-test o Mann-Whitney (limitati a due gruppi), Chi-quadrato (per categorici), e KS (per normalità singola, non confronti multipli). Test appaiati sono esclusi per l’indipendenza dei gruppi.

Forse potrebbe interessarti anche:  Dalla Teoria alla Trincea: come la Legge di Benford ha rivelato anomalie da Enron alle elezioni iraniane

📌 Esempio 4: Verifica normalità di un campione

  • Tipo di dato: numerico continuo
  • Obiettivo: vedere se i dati seguono la distribuzione normale
  • Test consigliato: Kolmogorov–Smirnov (KS)
from scipy.stats import kstest
import numpy as np

dati = np.random.normal(0, 1, 100)
stat, p = kstest(dati, 'norm')
print("KS D =", stat, "p =", p)

Motivazione: Il KS è selezionato perché confronta la distribuzione empirica di un campione con una teorica (normale), adatto a dati continui per verificare la goodness-of-fit senza assunzioni parametriche forti. È versatile per campioni di varie dimensioni. Si escludono test come t-test, ANOVA o Chi-quadrato (per confronti tra gruppi o associazioni, non per fit distributivo). Shapiro-Wilk è un’alternativa, ma KS è preferito per la sua generalità; test non parametrici per confronti (es. Mann-Whitney) sono esclusi perché l’obiettivo è solo la normalità, non differenze tra campioni.

Pubblicità