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.
✅ 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.
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.
📌 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.





