Frekvenser och korstabeller

Detta avsnitt beskriver skapandet av frekvens- och kontingenstabeller från kategoriska variabler, tillsammans med tester av oberoende, mått på samband och metoder för att visa resultaten grafiskt.

Generering av frekvenstabeller

R tillhandahåller många metoder för att skapa frekvens- och kontingenstabeller. Tre av dem beskrivs nedan. I följande exempel antar vi att A, B och C representerar kategoriska variabler.

table

Du kan skapa frekvenstabeller med hjälp av funktionen table( ), proportionerstabeller med hjälp av funktionen prop.table( ) och marginalfrekvenser med hjälp av 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( ) kan också generera flerdimensionella tabeller baserade på 3 eller fler kategoriska variabler. Använd i så fall funktionen ftable( ) för att skriva ut resultaten på ett mer attraktivt sätt.

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

Tabellen ignorerar saknade värden. För att inkludera NA som en kategori i räkningar, inkludera tabellalternativet exclude=NULL om variabeln är en vektor. Om variabeln är en faktor måste du skapa en ny faktor med hjälp av newfactor <- factor(oldfactor, exclude=NULL).

xtabs

Med funktionen xtabs( ) kan du skapa korstabeller med hjälp av inmatning i formelstil.

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

Om en variabel ingår på vänstra sidan av formeln antas den vara en vektor av frekvenser (användbart om data redan har tabellerats).

Crosstable

Funktionen CrossTable( ) i paketet gmodels producerar korstabuleringar som är modellerade efter PROC FREQ i SAS eller CROSSTABS i SPSS. Den har en mängd alternativ.

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

Det finns alternativ för att rapportera procentsatser (rad, kolumn, cell), ange decimaler, producera Chi-square-, Fisher- och McNemar-tester för oberoende, rapportera förväntade värden och restvärden (pearson, standardiserade, justerade standardiserade), inkludera saknade värden som giltiga, kommentera med rad- och kolumntitlar, och formatera som SAS- eller SPSS-stilutgång!
Se help(CrossTable) för detaljer.

Test av oberoende

Chi-Square Test

För 2-vägstabeller kan du använda chisq.test(mytable) för att testa oberoende av rad- och kolumnvariabeln. Som standard beräknas p-värdet från teststatistikens asymptotiska chi-kvadratfördelning. Alternativt kan p-värdet härledas via Monte Carlo-simulering.

Fisher Exact Test

fisher.test(x) ger ett exakt test av oberoende. x är en tvådimensionell kontingenstabell i matrisform.

Mantel-Haenszel-test

Använd funktionen mantelhaen.test(x) för att utföra ett Cochran-Mantel-Haenszel chi-kvadrat-test av nollhypotesen att två nominella variabler är villkorligt oberoende i varje stratum, förutsatt att det inte finns någon trevägsinteraktion. x är en 3-dimensionell kontingenstabell, där den sista dimensionen avser strata.

Loglinjära modeller

Du kan använda funktionen loglm( ) i paketet MASS för att producera loglinjära modeller. Låt oss till exempel anta att vi har en 3-vägs contingencytabell baserad på variablerna A, B och C.

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

Vi kan utföra följande tester:

Mutual Independence: A, B och C är parvis oberoende. loglm(~A+B+C, mytable)

Partiellt oberoende: A är delvis oberoende av B och C (dvs. A är oberoende av den sammansatta variabeln BC). loglin(~A+B+C+B*C, mytable)

Konditionellt oberoende: A är oberoende av B, givet C. loglm(~A+B+C+A*C+B*C, mytable)

No Three-Way Interaction loglm(~A+B+C+A*B+A*C+B*C, mytable)

Martin Theus och Stephan Lauer har skrivit en utmärkt artikel om visualisering av loglinjära modeller med hjälp av mosaikplottar.

Measures of Association

Funktionen assocstats(mytable) i vcd-paketet beräknar phi-koefficienten, contingency-koefficienten och Cramers V för en rxc-tabell. Funktionen kappa(mytable) i paketet vcd beräknar Cohen’s kappa och viktad kappa för en förvirringsmatris. Se Richard Darlingtons artikel om Measures of Association in Crosstab Tables för en utmärkt genomgång av denna statistik.

Visualisering av resultat

Använd stapel- och cirkeldiagram för att visualisera frekvenser i en dimension.

Använd paketet vcd för att visualisera relationer mellan kategoriska data (t.ex. mosaik- och associationsdiagram).

Använd paketet ca för korrespondensanalys (visuell utforskning av relationer mellan rader och kolumner i kontingenstabeller).

För att öva på att göra dessa diagram kan du prova kursen om datavisualisering på DataCamp.

Konvertering av frekvenstabeller till en ”ursprunglig” platt fil

Sluttligen kan det hända att du behöver den ursprungliga dataramen i en ”platt fil” i stället för en frekvenstabell. Marc Schwartz har tillhandahållit kod på Rhelp mailinglistan för att konvertera en tabell tillbaka till en dataram.

Leave a Reply