Calcolare Mediana Con Software R

Calcolatore Mediana con Software R

Inserisci i tuoi dati numerici per calcolare la mediana utilizzando la metodologia statistica implementata in R. Ottieni risultati precisi con visualizzazione grafica.

Risultati del Calcolo

Metodo utilizzato:

Dimensione campione:

Valore minimo:

Valore massimo:

Guida Completa: Come Calcolare la Mediana con Software R

La mediana rappresenta il valore centrale di un insieme di dati ordinati ed è una delle misure di tendenza centrale più importanti in statistica. A differenza della media aritmetica, la mediana non è influenzata dai valori estremi (outliers), rendendola particolarmente utile per distribuzioni asimmetriche.

In questa guida approfondita, esploreremo come calcolare la mediana utilizzando il software statistico R, analizzando sia dati non raggruppati che raggruppati in classi, con esempi pratici e codice pronto all’uso.

1. Fondamenti Teorici della Mediana

Prima di addentrarci nell’implementazione pratica, è essenziale comprendere i principi teorici:

  • Definizione: La mediana è il valore che divide la distribuzione in due parti uguali, con il 50% delle osservazioni al di sotto e il 50% al di sopra.
  • Posizione: Per un campione di n osservazioni ordinate, la posizione della mediana è data da (n+1)/2
  • Vantaggi:
    • Robustezza agli outliers
    • Adatta a distribuzioni asimmetriche
    • Sempre definita per dati ordinali
  • Limitazioni:
    • Non utilizza tutte le informazioni del campione
    • Meno efficiente della media per distribuzioni normali
# Formula generale per la mediana (dati non raggruppati) n <- length(dati) if(n %% 2 == 1) { mediana <- sort(dati)[(n+1)/2] } else { mediana <- (sort(dati)[n/2] + sort(dati)[n/2 + 1])/2 }

2. Calcolo della Mediana in R per Dati Non Raggruppati

R fornisce diverse funzioni per calcolare la mediana, ognuna con caratteristiche specifiche:

Funzione Descrizione Esempio Note
median() Funzione base per il calcolo median(c(1,3,5,7,9)) Restituisce 5
quantile() Calcola quantili (mediana = 0.5) quantile(x, 0.5) Permette diversi tipi di interpolazione
summary() Statistiche riassuntive summary(x)$Median Restituisce anche altri valori
Hmisc::wtd.median() Mediana ponderata wtd.median(x, weights) Richiede pacchetto Hmisc

Esempio pratico con dati reali:

# Dati esempio: altezze (cm) di 15 studenti altezze <- c(165, 172, 168, 170, 169, 175, 180, 172, 178, 165, 173, 168, 171, 174, 177) # Calcolo mediana con diversi metodi mediana_base <- median(altezze) mediana_quantile <- quantile(altezze, 0.5, type = 7) riassunto <- summary(altezze) cat("Mediana (funzione base):", mediana_base, "\n") cat("Mediana (quantile type 7):", mediana_quantile, "\n") cat("Mediana da summary():", riassunto[3], "\n")

Nota: Il parametro type nella funzione quantile() determina il metodo di interpolazione utilizzato. I tipi più comuni sono:

  1. Type 1: inverso della distribuzione empirica
  2. Type 2: simile a SAS
  3. Type 3: metodo di Hazen
  4. Type 4: media dei punti dell’ordine
  5. Type 5: metodo di Weibull
  6. Type 6: metodo di Cunnane
  7. Type 7: metodo predefinito (lineare)
  8. Type 8: media ponderata
  9. Type 9: metodo di Blom

3. Calcolo della Mediana per Dati Raggruppati in Classi

Quando i dati sono presentati in una distribuzione di frequenza, il calcolo della mediana richiede una formula specifica:

Formula:

Mediana = L + [(N/2 – F)/f] × c

Dove:

  • L = limite inferiore della classe mediana
  • N = numero totale di osservazioni
  • F = frequenza cumulativa prima della classe mediana
  • f = frequenza della classe mediana
  • c = ampiezza della classe

Implementazione in R:

# Dati raggruppati: classi e frequenze classi <- c("160-165", "165-170", "170-175", "175-180", "180-185") frequenze <- c(3, 7, 12, 5, 3) # Calcolo mediana per dati raggruppati calcola_mediana_raggruppata <- function(classi, frequenze) { # Converti classi in limiti numerici limits <- t(sapply(strsplit(classi, "-"), function(x) as.numeric(x))) N <- sum(frequenze) F <- cumsum(frequenze) median_pos <- N/2 # Trova la classe mediana median_class <- which(median_pos <= F)[1] L <- limits[1, median_class] F_prev <- ifelse(median_class == 1, 0, F[median_class - 1]) f <- frequenze[median_class] c <- limits[2, median_class] - limits[1, median_class] mediana <- L + ((median_pos - F_prev)/f) * c return(mediana) } mediana_raggruppata <- calcola_mediana_raggruppata(classi, frequenze) cat("Mediana per dati raggruppati:", mediana_raggruppata)

4. Visualizzazione Grafica della Mediana

La rappresentazione grafica aiuta a comprendere la posizione della mediana rispetto all’intera distribuzione. In R possiamo utilizzare diversi tipi di grafici:

# Boxplot (mostra chiaramente la mediana) boxplot(altezze, main = “Distribuzione Altezze”, ylab = “Altezza (cm)”, col = “#2563eb”, border = “#1e293b”) # Aggiungi linea per la mediana abline(h = median(altezze), col = “red”, lwd = 2, lty = 2) # Istogramma con linea mediana hist(altezze, breaks = 5, col = “#e0f2fe”, border = “#2563eb”, main = “Istogramma Altezze”, xlab = “Altezza (cm)”, ylab = “Frequenza”) abline(v = median(altezze), col = “red”, lwd = 2, lty = 2)

Per una visualizzazione più avanzata, possiamo utilizzare il pacchetto ggplot2:

library(ggplot2) ggplot(data.frame(altezza = altezze), aes(x = altezza)) + geom_histogram(aes(y = ..density..), bins = 5, fill = “#2563eb”, color = “#1e293b”, alpha = 0.7) + geom_vline(aes(xintercept = median(altezza)), color = “red”, linetype = “dashed”, size = 1) + labs(title = “Distribuzione Altezze con Mediana”, x = “Altezza (cm)”, y = “Densità”) + theme_minimal()

5. Confronto tra Mediana e Media

È fondamentale comprendere quando utilizzare la mediana invece della media aritmetica:

Caratteristica Mediana Media
Robustezza agli outliers ✅ Alta ❌ Bassa
Utilizzo informazioni ❌ Solo posizione ✅ Tutti i valori
Distribuzioni simmetriche ≈ Uguale alla media ≈ Uguale alla mediana
Distribuzioni asimmetriche ✅ Preferibile ❌ Distorta
Dati ordinali ✅ Adatta ❌ Non adatta
Efficienza (n normale) 64% rispetto alla media 100% (ottimale)

Esempio pratico di differenza:

# Dati con outlier redditi <- c(25000, 30000, 32000, 35000, 28000, 31000, 1200000, 29000, 33000, 36000) cat("Media:", mean(redditi), "\n") # 159,500 (fortemente influenzata) cat("Mediana:", median(redditi), "\n") # 31,500 (rappresentativa)

6. Applicazioni Pratiche della Mediana

La mediana trova applicazione in numerosi campi:

  • Economia: Calcolo del reddito mediano delle famiglie (più rappresentativo della media)
  • Sanità: Valori mediani di parametri clinici (es. pressione sanguigna)
  • Immobiliare: Prezzo mediano delle case in una zona
  • Istruzione: Voti mediani degli studenti
  • Ricerca: Analisi di dati sperimentali con distribuzioni asimmetriche

Caso studio: Analisi dei salari

Secondo i dati ISTAT 2023, il reddito mediano delle famiglie italiane nel 2022 era di €24.500, mentre la media era di €32.800. Questa differenza del 34% evidenzia come la mediana sia una misura più rappresentativa della situazione reale, non distorta dai redditi molto alti di una minoranza.

7. Errori Comuni nel Calcolo della Mediana

Alcuni errori frequenti da evitare:

  1. Dimenticare di ordinare i dati: La mediana richiede sempre dati ordinati
  2. Confondere media e mediana: Sono concetti distinti con applicazioni diverse
  3. Usare metodi di interpolazione incoerenti: Il tipo di quantile influisce sul risultato
  4. Ignorare i dati mancanti: NA possono influenzare il calcolo (usare na.rm = TRUE)
  5. Applicare la formula sbagliata per dati raggruppati: Servono frequenze cumulative

Esempio di gestione dei NA:

dati_con_na <- c(1, 2, NA, 4, 5, NA, 7) mediana_corretta <- median(dati_con_na, na.rm = TRUE) # 4 mediana_sbagliata <- median(dati_con_na) # NA

8. Funzioni Avanzate per la Mediana in R

Per analisi più sofisticate, R offre funzioni avanzate:

# Mediana ponderata (pacchetto Hmisc) install.packages(“Hmisc”) library(Hmisc) dati <- c(10, 20, 30, 40) pesi <- c(1, 2, 3, 1) wtd.median(dati, pesi) # 30 # Mediana per gruppi (pacchetto dplyr) install.packages("dplyr") library(dplyr) data(mtcars) mtcars %>% group_by(cyl) %>% summarise(mediana_mpg = median(mpg)) # Mediana mobile (pacchetto zoo) install.packages(“zoo”) library(zoo) dati_temporali <- c(1, 3, 2, 5, 4, 7, 6, 8) rollmedian(dati_temporali, k = 3, fill = NA) # [1] NA NA 2 3 4 5 6 7

9. Performance e Ottimizzazione

Per grandi dataset, il calcolo della mediana può essere ottimizzato:

# Confronto performance set.seed(123) grandi_dati <- rnorm(1e6) system.time(median(grandi_dati)) # ~0.02 sec system.time(quantile(grandi_dati, 0.5)) # ~0.03 sec # Versione ottimizzata per dati molto grandi mediana_veloce <- function(x) { n <- length(x) if(n %% 2 == 1) { return(sort(x, partial = (n+1)/2)[(n+1)/2]) } else { return(mean(sort(x, partial = n/2 + 0:1)[n/2 + 0:1])) } } system.time(mediana_veloce(grandi_dati)) # ~0.01 sec

10. Risorse e Approfondimenti

Per approfondire l’argomento:

Libri consigliati:

  • “R in a Nutshell” – Joseph Adler (O’Reilly)
  • “The Art of R Programming” – Norman Matloff
  • “Statistical Analysis with R” – John M. Quick

Leave a Reply

Your email address will not be published. Required fields are marked *