Calcolatore di Tabella per Frequenze Teoriche in R
Guida Completa al Calcolo di Tabelle per Frequenze Teoriche in R
Il calcolo delle frequenze teoriche è un passaggio fondamentale nell’analisi statistica, particolarmente importante nei test di bontà dell’adattamento (goodness-of-fit) e nei test di indipendenza. In R, questo processo può essere automatizzato con funzioni specifiche che confrontano le frequenze osservate con quelle attese secondo un determinato modello teorico.
1. Concetti Fondamentali
1.1 Frequenze Osservate vs. Frequenze Teoriche
- Frequenze Osservate: I dati effettivamente raccolti durante un esperimento o uno studio.
- Frequenze Teoriche: I valori attesi secondo un modello teorico (es. rapporto mendeliano 3:1, distribuzione uniforme, ecc.).
1.2 Importanza del Test Chi-Quadrato
Il test chi-quadrato (χ²) è lo strumento più comune per valutare se le differenze tra frequenze osservate e teoriche sono statisticamente significative. La formula è:
χ² = Σ [(Oᵢ – Eᵢ)² / Eᵢ]
dove Oᵢ = frequenza osservata, Eᵢ = frequenza teorica.
2. Implementazione in R
2.1 Creazione della Tabella delle Frequenze
In R, possiamo creare una tabella di contingenza usando la funzione table() o inserendo manualmente i dati in un vettore. Ad esempio:
observed <- c(15, 20, 10, 25, 30)
names(observed) <- c("A", "B", "C", "D", "E")
2.2 Calcolo delle Frequenze Teoriche
Le frequenze teoriche possono essere calcolate in base a:
- Rapporti noti (es. 3:1 in genetica mendeliana)
- Distribuzione uniforme (tutte le categorie hanno la stessa probabilità)
- Modelli probabilistici (es. distribuzione di Poisson)
Esempio per un rapporto 3:1:
total <- sum(observed)
expected <- c(3, 1) * total / sum(c(3, 1))
3. Esecuzione del Test Chi-Quadrato
La funzione chisq.test() in R esegue automaticamente il test e restituisce:
- Statistica chi-quadrato
- Gradi di libertà
- p-value
| Parametro | Valore | Descrizione |
|---|---|---|
| Statistica χ² | 4.25 | Misura la discrepanza tra osservato e atteso |
| Gradi di libertà | 2 | Num categories – 1 (per goodness-of-fit) |
| p-value | 0.1196 | Probabilità di osservare i dati se l’ipotesi nulla è vera |
3.1 Interpretazione dei Risultati
Regola generale:
- Se p-value < α (livello di significatività, tipicamente 0.05): rifiutiamo l’ipotesi nulla (le differenze sono significative).
- Se p-value ≥ α: non rifiutiamo l’ipotesi nulla (nessuna evidenza significativa contro il modello teorico).
4. Casi Pratici in Ricerca
4.1 Genetica: Test di Mendel
Supponiamo di incrociare due piante di pisello eterozigoti (Aa) e osservare 315 piselli lisci e 101 rugosi. Il rapporto atteso è 3:1 (dominante:recessivo).
| Fenotipo | Osservato (O) | Atteso (E) | (O-E)²/E |
|---|---|---|---|
| Liscio (dominante) | 315 | 312.75 | 0.018 |
| Rugoso (recessivo) | 101 | 104.25 | 0.102 |
| Totale χ² | 0.120 | ||
In R:
observed <- c(315, 101)
expected_ratio <- c(3, 1)
chisq.test(observed, p = expected_ratio/sum(expected_ratio))
4.2 Marketing: Preferenze dei Consumatori
Un’azienda test 3 nuovi packaging (A, B, C) su 300 consumatori. L’ipotesi nulla è che non ci sia preferenza (distribuzione uniforme).
| Packaging | Osservato | Atteso (uniforme) |
|---|---|---|
| A | 120 | 100 |
| B | 95 | 100 |
| C | 85 | 100 |
Codice R:
observed <- c(120, 95, 85)
chisq.test(observed)
5. Errori Comuni e Soluzioni
5.1 Frequenze Attese Troppe Basse
Regola empirica: tutte le frequenze attese dovrebbero essere ≥ 5. Se non lo sono:
- Unire categorie adiacenti
- Usare il Test Esatto di Fisher per campioni piccoli:
matrix_data <- matrix(c(10, 20, 30, 40), nrow=2)
fisher.test(matrix_data)
5.2 Scelta del Test Sbagliata
| Scenario | Test Consigliato | Funzione R |
|---|---|---|
| 1 variabile categoriale, confrontare con distribuzione teorica | Chi-quadrato goodness-of-fit | chisq.test() |
| 2 variabili categoriali (tabella di contingenza) | Chi-quadrato di indipendenza | chisq.test() |
| Campioni molto piccoli (E < 5) | Test Esatto di Fisher | fisher.test() |
| Dati con frequenze molto basse o asimmetria | Test G (likelihood ratio) | GTest() (package DescTools) |
6. Visualizzazione dei Risultati
La libreria ggplot2 è ideale per visualizzare frequenze osservate vs. attese:
library(ggplot2)
data <- data.frame(
Category = c("A", "B", "C", "D"),
Observed = c(15, 20, 10, 25),
Expected = c(12.5, 12.5, 12.5, 12.5)
)
ggplot(data, aes(x = Category)) +
geom_bar(aes(y = Observed), stat = "identity", fill = "#2563eb", width = 0.7) +
geom_point(aes(y = Expected), color = "#ef4444", size = 3) +
geom_line(aes(y = Expected, group = 1), color = "#ef4444") +
labs(title = "Frequenze Osservate vs. Attese",
y = "Frequenza",
x = "Categoria") +
theme_minimal()
7. Alternative al Test Chi-Quadrato
7.1 Test G (Likelihood Ratio)
Meno sensibile a campioni piccoli rispetto al χ². Implementazione:
install.packages("DescTools")
library(DescTools)
observed <- c(15, 20, 10, 25)
expected <- rep(mean(observed), 4)
GTest(observed, expected)
7.2 Test di Kolmogorov-Smirnov
Per confrontare distribuzioni continue con una distribuzione teorica:
ks.test(rnorm(100), "pnorm", mean = 0, sd = 1)
8. Best Practices in R
- Pulizia dei dati: Usare
na.omit()per escludere valori mancanti. - Riproducibilità: Impostare
set.seed()per analisi casuali. - Documentazione: Commentare il codice con # per spiegare i passaggi.
- Pacchetti utili:
dplyr: manipolazione datijanitor: pulizia nomi colonnerstatix: test statistici avanzati