Frequenze e tabelle incrociate

Questa sezione descrive la creazione di tabelle di frequenza e contingenza da variabili categoriche, insieme a test di indipendenza, misure di associazione e metodi per visualizzare graficamente i risultati.

Generazione di tabelle di frequenza

R fornisce molti metodi per creare tabelle di frequenza e di contingenza. Tre sono descritti di seguito. Nei seguenti esempi, supponiamo che A, B e C rappresentino variabili categoriche.

table

È possibile generare tabelle di frequenza usando la funzione table( ), tabelle di proporzioni usando la funzione prop.table( ), e frequenze marginali usando margin.table( ).

# 2-Way Frequency Table
attach(mydata)
mytable <- table(A,B) # A will be rows, B will be columns
mytable # print table
margin.table(mytable, 1) # A frequencies (summed over B)
margin.table(mytable, 2) # B frequencies (summed over A)
prop.table(mytable) # cell percentages
prop.table(mytable, 1) # row percentages
prop.table(mytable, 2) # column percentages

table( ) può anche generare tabelle multidimensionali basate su 3 o più variabili categoriali. In questo caso, usate la funzione ftable( ) per stampare i risultati in modo più attraente.

# 3-Way Frequency Table
mytable <- table(A, B, C)
ftable(mytable)

Tabella ignora i valori mancanti. Per includere NA come categoria nei conteggi, includete l’opzione della tabella exclude=NULL se la variabile è un vettore. Se la variabile è un fattore dovete creare un nuovo fattore usando newfactor <- factor(oldfactor, exclude=NULL).

xtabs

La funzione xtabs( ) vi permette di creare tabelle incrociate usando input in stile formula.

# 3-Way Frequency Table
mytable <- xtabs(~A+B+c, data=mydata)
ftable(mytable) # print table
summary(mytable) # chi-square test of indepedence

Se una variabile è inclusa nella parte sinistra della formula, si assume che sia un vettore di frequenze (utile se i dati sono già stati tabulati).

Crosstable

La funzione CrossTable( ) nel pacchetto gmodels produce tabelle incrociate modellate come PROC FREQ in SAS o CROSSTABS in SPSS. Ha una ricchezza di opzioni.

# 2-Way Cross Tabulation
library(gmodels)
CrossTable(mydata$myrowvar, mydata$mycolvar)

Ci sono opzioni per riportare le percentuali (riga, colonna, cella), specificare i decimali, produrre test di indipendenza Chi-quadrato, Fisher e McNemar, riportare i valori attesi e residui (pearson, standardizzati, standardizzati aggiustati), includere valori mancanti come validi, annotare con titoli di riga e colonna, e formattare come output in stile SAS o SPSS!
Vedi help(CrossTable) per i dettagli.

Test di indipendenza

Test del chi-quadrato

Per le tabelle a 2 vie puoi usare chisq.test(mytable) per testare l’indipendenza della variabile riga e colonna. Per impostazione predefinita, il valore p è calcolato dalla distribuzione asintotica chi-quadrato della statistica del test. Opzionalmente, il valore p può essere derivato tramite la simultaneità di Monte Carlo.

Fisher Exact Test

fisher.test(x) fornisce un test esatto di indipendenza. x è una tabella di contingenza bidimensionale in forma di matrice.

Test di Mantel-Haenszel

Utilizza la funzione mantelhaen.test(x) per eseguire un test chi-quadrato di Cochran-Mantel-Haenszel dell’ipotesi nulla che due variabili nominali siano condizionatamente indipendenti in ogni strato, assumendo che non ci siano interazioni a tre vie. x è una tabella di contingenza a 3 dimensioni, dove l’ultima dimensione si riferisce agli strati.

Modelli log-lineari

Puoi usare la funzione loglm( ) nel pacchetto MASS per produrre modelli log-lineari. Per esempio, supponiamo di avere una tabella di contingenza a 3 vie basata sulle variabili A, B e C.

library(MASS)
mytable <- xtabs(~A+B+C, data=mydata)

Possiamo eseguire i seguenti test:

Indipendenza reciproca: A, B e C sono indipendenti a coppie. loglm(~A+B+C, mytable)

Indipendenza parziale: A è parzialmente indipendente da B e C (cioè, A è indipendente dalla variabile composita BC). loglin(~A+B+C+B*C, mytable)

Indipendenza condizionale: A è indipendente da B, dato C. loglm(~A+B+C+A*C+B*C, mytable)

Nessuna interazione a tre vie loglm(~A+B+C+A*B+A*C+B*C, mytable)

Martin Theus e Stephan Lauer hanno scritto un eccellente articolo sulla visualizzazione dei modelli loglineari, usando i plot a mosaico.

Misure di associazione

La funzione assocstats(mytable) nel pacchetto vcd calcola il coefficiente phi, il coefficiente di contingenza e il V di Cramer per una tabella rxc. La funzione kappa(mytable) nel pacchetto vcd calcola la kappa di Cohen e la kappa pesata per una matrice di confusione. Si veda l’articolo di Richard Darlington su Measures of Association in Crosstab Tables per un’eccellente rassegna di queste statistiche.

Visualizzazione dei risultati

Utilizza i grafici a barre e a torta per visualizzare le frequenze in una dimensione.

Utilizzare il pacchetto vcd per visualizzare le relazioni tra i dati categorici (ad esempio i grafici a mosaico e di associazione).

Utilizzare il pacchetto ca per l’analisi delle corrispondenze (esplorando visivamente le relazioni tra righe e colonne nelle tabelle di contingenza).

Per fare pratica con questi grafici, provate il corso di visualizzazione dei dati al DataCamp.

Convertire le tabelle di frequenza in un file piatto “originale”

Infine, ci possono essere momenti in cui avrete bisogno del “file piatto” di dati originale piuttosto che della tabella di frequenza. Marc Schwartz ha fornito del codice sulla mailing list Rhelp per convertire una tabella in un frame di dati.

Leave a Reply