Test Statistici in R
I test statistici permettono di prendere decisioni basate sui dati, verificando se un’osservazione e statisticamente significativa o dovuta al caso. R integra nativamente tutti i principali test inferenziali, rendendo l’analisi statistica accessibile e riproducibile. In questa guida esploreremo i test piu utilizzati nella pratica accademica e professionale.
Concetti Fondamentali
Prima di eseguire qualsiasi test statistico, e essenziale comprendere i concetti chiave:
- Ipotesi nulla (H0): l’ipotesi di partenza che si vuole verificare, tipicamente afferma che non c’e differenza o effetto
- Ipotesi alternativa (H1): l’ipotesi che contraddice H0, afferma che esiste una differenza o un effetto
- p-value: la probabilita di osservare un risultato uguale o piu estremo di quello ottenuto, assumendo che H0 sia vera
- Livello di significativita (alfa): la soglia (tipicamente 0.05) sotto la quale si rifiuta H0
Se il p-value < alfa, si rifiuta H0 a favore di H1. Se il p-value >= alfa, non si ha evidenza sufficiente per rifiutare H0.
Test di Normalita: shapiro.test()
Molti test parametrici assumono che i dati seguano una distribuzione normale. Il test di Shapiro-Wilk verifica questa assunzione.
# Generare dati normali e non normali
set.seed(42)
dati_normali <- rnorm(50, mean = 25, sd = 5)
dati_non_normali <- rexp(50, rate = 0.5)
# Test di Shapiro-Wilk
shapiro.test(dati_normali)
# Shapiro-Wilk normality test
# data: dati_normali
# W = 0.98412, p-value = 0.7211
shapiro.test(dati_non_normali)
# Shapiro-Wilk normality test
# data: dati_non_normali
# W = 0.85693, p-value = 7.893e-05
Per i dati normali il p-value e 0.72 (> 0.05), quindi non si rifiuta H0: i dati sono compatibili con una distribuzione normale. Per i dati esponenziali il p-value e molto piccolo (< 0.05), quindi si rifiuta H0: i dati non seguono una distribuzione normale.
Test t di Student: t.test()
Il t-test e il test parametrico piu utilizzato per confrontare medie. Richiede che i dati siano approssimativamente normali.
Test t a Un Campione
Verifica se la media di un campione differisce significativamente da un valore teorico.
# Voti di 15 studenti - la media teorica e 24/30?
voti <- c(26, 28, 25, 27, 30, 24, 29, 26, 28, 25, 27, 30, 23, 26, 28)
t.test(voti, mu = 24)
# One Sample t-test
# data: voti
# t = 3.6839, df = 14, p-value = 0.002422
# alternative hypothesis: true mean is not equal to 24
# 95 percent confidence interval:
# 25.45872 28.14128
# sample estimates:
# mean of x
# 26.8
Il p-value e 0.002 (< 0.05): la media dei voti (26.8) e significativamente diversa da 24.
Test t a Due Campioni Indipendenti
Confronta le medie di due gruppi indipendenti.
# Ore di studio: gruppo A (metodo tradizionale) vs gruppo B (e-learning)
set.seed(123)
gruppo_A <- c(15, 18, 20, 22, 17, 19, 21, 16, 23, 18)
gruppo_B <- c(12, 14, 16, 13, 15, 11, 17, 14, 13, 12)
t.test(gruppo_A, gruppo_B)
# Welch Two Sample t-test
# data: gruppo_A and gruppo_B
# t = 5.0255, df = 17.576, p-value = 9.548e-05
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
# 3.060455 7.539545
# sample estimates:
# mean of x mean of y
# 18.9 13.7
Il p-value e circa 0.0001: la differenza tra le medie (18.9 vs 13.7) e altamente significativa. Il gruppo A studia significativamente di piu.
Test t per Campioni Appaiati
Si usa quando le osservazioni sono accoppiate (es. misurazioni pre/post sugli stessi soggetti).
# Punteggi prima e dopo un corso di preparazione
prima <- c(65, 72, 58, 80, 55, 68, 75, 62, 70, 60)
dopo <- c(70, 78, 65, 85, 62, 75, 80, 68, 76, 67)
t.test(dopo, prima, paired = TRUE)
# Paired t-test
# data: dopo and prima
# t = 8.5714, df = 9, p-value = 1.281e-05
# alternative hypothesis: true mean difference is not equal to 0
# 95 percent confidence interval:
# 4.832694 8.167306
# sample estimates:
# mean of the differences
# 6.5
Il miglioramento medio di 6.5 punti e statisticamente significativo (p-value < 0.001).
Test del Chi-Quadrato: chisq.test()
Il test del chi-quadrato verifica l’indipendenza tra due variabili categoriali o la bonta di adattamento di una distribuzione.
Test di Indipendenza
# Relazione tra metodo di studio e superamento dell'esame
dati <- matrix(c(35, 15, 20, 30), nrow = 2,
dimnames = list(
Metodo = c("Tradizionale", "E-learning"),
Esito = c("Promosso", "Bocciato")
))
print(dati)
# Esito
# Metodo Promosso Bocciato
# Tradizionale 35 20
# E-learning 15 30
chisq.test(dati)
# Pearson's Chi-squared test with Yates' continuity correction
# data: dati
# X-squared = 8.41, df = 1, p-value = 0.003734
Il p-value e 0.004: esiste una associazione significativa tra metodo di studio ed esito dell’esame.
Test di Bonta di Adattamento
Verifica se una distribuzione osservata corrisponde a una distribuzione attesa.
# Un dado e equilibrato? 120 lanci
osservati <- c(25, 17, 15, 23, 22, 18)
attesi <- rep(1/6, 6)
chisq.test(osservati, p = attesi)
# Chi-squared test for given probabilities
# data: osservati
# X-squared = 3.7, df = 5, p-value = 0.5934
Il p-value e 0.59 (> 0.05): non c’e evidenza che il dado sia truccato.
Test di Wilcoxon: wilcox.test()
Il test di Wilcoxon e l’alternativa non parametrica al t-test. Si usa quando i dati non soddisfano l’assunzione di normalita.
# Confronto tra due gruppi con distribuzioni non normali
set.seed(42)
gruppo_1 <- c(2, 5, 3, 8, 12, 1, 4, 15, 3, 6)
gruppo_2 <- c(8, 12, 15, 20, 10, 18, 14, 25, 11, 16)
# Test di Wilcoxon per campioni indipendenti (Mann-Whitney U)
wilcox.test(gruppo_1, gruppo_2)
# Wilcoxon rank sum test with continuity correction
# data: gruppo_1 and gruppo_2
# W = 10.5, p-value = 0.003474
# alternative hypothesis: true location shift is not equal to 0
# Test di Wilcoxon per campioni appaiati (signed-rank test)
pre <- c(45, 52, 38, 60, 55, 42, 48, 35, 50, 44)
post <- c(50, 58, 42, 65, 58, 48, 55, 40, 56, 50)
wilcox.test(post, pre, paired = TRUE)
# Wilcoxon signed rank test with continuity correction
# data: post and pre
# V = 55, p-value = 0.005858
# alternative hypothesis: true location shift is not equal to 0
Test di Correlazione: cor.test()
Il test cor.test() verifica se la correlazione tra due variabili e statisticamente significativa.
# Ore di studio e voto all'esame
ore_studio <- c(5, 10, 15, 20, 25, 8, 12, 18, 22, 30)
voto_esame <- c(20, 22, 25, 27, 29, 21, 24, 26, 28, 30)
# Test di correlazione di Pearson
cor.test(ore_studio, voto_esame)
# Pearson's product-moment correlation
# data: ore_studio and voto_esame
# t = 17.753, df = 8, p-value = 1.677e-07
# alternative hypothesis: true correlation is not equal to 0
# 95 percent confidence interval:
# 0.9602637 0.9983052
# sample estimates:
# cor
# 0.9878513
# Test di correlazione di Spearman (non parametrico, basato sui ranghi)
cor.test(ore_studio, voto_esame, method = "spearman")
# Spearman's rank correlation rho
# data: ore_studio and voto_esame
# S = 2.8, p-value = 3.436e-07
# alternative hypothesis: true rho is not equal to 0
# sample estimates:
# rho
# 0.9830303
La correlazione di 0.99 e statisticamente significativa (p-value < 0.001): c’e una fortissima relazione lineare positiva.
F-test per Varianze: var.test()
Il test F confronta le varianze di due gruppi. E utile come verifica preliminare prima di un t-test.
# Le varianze dei due gruppi sono uguali?
var.test(gruppo_A, gruppo_B)
# F test to compare two variances
# data: gruppo_A and gruppo_B
# F = 1.6176, df = 9, p-value = 0.4593
# alternative hypothesis: true ratio of variances is not equal to 1
# 95 percent confidence interval:
# 0.4018175 6.5126379
# sample estimates:
# ratio of variances
# 1.617647
Il p-value e 0.46 (> 0.05): le varianze non sono significativamente diverse, quindi si puo usare il t-test classico con varianze uguali (var.equal = TRUE).
Test sulle Proporzioni: prop.test()
Il test prop.test() confronta proporzioni tra gruppi.
# Tasso di superamento esame: Corso A (45 su 60) vs Corso B (35 su 55)
prop.test(c(45, 35), c(60, 55))
# 2-sample test for equality of proportions with continuity correction
# data: c(45, 35) out of c(60, 55)
# X-squared = 1.0491, df = 1, p-value = 0.3057
# alternative hypothesis: two.sided
# 95 percent confidence interval:
# -0.07710638 0.28619729
# sample estimates:
# prop 1 prop 2
# 0.7500000 0.6363636
Il p-value e 0.31: la differenza tra le proporzioni (75% vs 63.6%) non e statisticamente significativa al livello alfa = 0.05.
Riepilogo dei Test
| Test | Funzione | Quando usarlo |
|---|---|---|
| Shapiro-Wilk | shapiro.test() |
Verificare la normalita dei dati |
| t-test | t.test() |
Confrontare medie (dati normali) |
| Chi-quadrato | chisq.test() |
Variabili categoriali |
| Wilcoxon | wilcox.test() |
Alternativa non parametrica al t-test |
| Correlazione | cor.test() |
Significativita della correlazione |
| F-test | var.test() |
Confrontare varianze |
| Proporzioni | prop.test() |
Confrontare proporzioni |
Conclusione
I test statistici in R sono strumenti potenti per l’inferenza statistica. La scelta del test corretto dipende dal tipo di dati (continui o categoriali), dal numero di gruppi, dalla distribuzione dei dati (normale o meno) e dal disegno sperimentale (indipendente o appaiato). E buona pratica verificare sempre le assunzioni con shapiro.test() e var.test() prima di applicare test parametrici. Quando le assunzioni non sono soddisfatte, i test non parametrici come wilcox.test() rappresentano un’alternativa valida e robusta.