00
:
00
:
00
:
00
•Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

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.