Frequenties en kruistabellen
Dit gedeelte beschrijft het maken van frequentie- en contingentietabellen op basis van categorische variabelen, samen met onafhankelijkheids- en associatietests en methoden om resultaten grafisch weer te geven.
Frequentietabellen genereren
R biedt vele methoden voor het maken van frequentie- en contingentietabellen. Hieronder worden er drie beschreven. In de volgende voorbeelden wordt ervan uitgegaan dat A, B en C categorische variabelen zijn.
table
U kunt frequentietabellen genereren met de functie table( ), verhoudingstabellen met de functie prop.table( ), en marginale frequenties met 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 ook multidimensionale tabellen genereren op basis van 3 of meer categorische variabelen. Gebruik in dat geval de functie ftable( ) om de resultaten aantrekkelijker af te drukken.
# 3-Way Frequency Table
mytable <- table(A, B, C)
ftable(mytable)
Tabel negeert ontbrekende waarden. Om NA als categorie in tellingen op te nemen, moet de tabeloptie exclude=NULL worden gebruikt als de variabele een vector is. Als de variabele een factor is, moet u een nieuwe factor maken met newfactor <- factor(oldfactor, exclude=NULL).
xtabs
Met de functie xtabs( ) kunt u kruistabellen maken met behulp van invoer in formulestijl.
# 3-Way Frequency Table
mytable <- xtabs(~A+B+c, data=mydata)
ftable(mytable) # print table
summary(mytable) # chi-square test of indepedence
Als aan de linkerkant van de formule een variabele is opgenomen, wordt aangenomen dat het een vector van frequenties is (handig als de gegevens al in tabelvorm zijn ingevoerd).
Crosstable
De functie CrossTable( ) in het pakket gmodels produceert kruistabellen, gemodelleerd naar PROC FREQ in SAS of CROSSTABS in SPSS.
# 2-Way Cross Tabulation
library(gmodels)
CrossTable(mydata$myrowvar, mydata$mycolvar)
Er zijn opties om percentages te rapporteren (rij, kolom, cel), decimalen op te geven, Chi-kwadraat-, Fisher- en McNemar-tests van onafhankelijkheid te produceren, verwachte en residuele waarden te rapporteren (pearson, gestandaardiseerd, aangepast gestandaardiseerd), ontbrekende waarden als geldig op te nemen, annotaties te maken met rij- en kolomtitels, en uitvoer te formatteren in SAS- of SPSS-stijl!
Zie help(CrossTable) voor details.
Onafhankelijkheidstests
Chi-Square Test
Voor 2-weg tabellen kunt u chisq.test(mytable) gebruiken om de onafhankelijkheid van de rij- en kolomvariabele te testen. Standaard wordt de p-waarde berekend uit de asymptotische chi-kwadraat verdeling van de teststatistiek. Optioneel kan de p-waarde worden afgeleid via Monte Carlo simultatie.
Fisher Exact Test
fisher.test(x) levert een exacte test van onafhankelijkheid. x is een tweedimensionale contingentietabel in matrixvorm.
Mantel-Haenszel test
Gebruik de mantelhaen.test(x) functie om een Cochran-Mantel-Haenszel chi-kwadraat toets uit te voeren van de nulhypothese dat twee nominale variabelen voorwaardelijk onafhankelijk zijn in elk stratum, aangenomen dat er geen drie-weg interactie is. x is een 3 dimensionale contingentietabel, waarbij de laatste dimensie verwijst naar de strata.
Loglineaire modellen
U kunt de loglm( ) functie in het MASS pakket gebruiken om log-lineaire modellen te produceren. Laten we bijvoorbeeld eens aannemen dat we een 3-weg contingentietabel hebben op basis van de variabelen A, B en C.
library(MASS)
mytable <- xtabs(~A+B+C, data=mydata)
We kunnen de volgende tests uitvoeren:
Wederzijdse onafhankelijkheid: A, B en C zijn paarsgewijs onafhankelijk. loglm(~A+B+C, mytable)
Partiële onafhankelijkheid: A is gedeeltelijk onafhankelijk van B en C (d.w.z. A is onafhankelijk van de samengestelde variabele BC). loglin(~A+B+C+B*C, mytable)
Conditionele onafhankelijkheid: A is onafhankelijk van B, gegeven C. loglm(~A+B+C+A*C+B*C, mytable)
Geen drievoudige interactie loglm(~A+B+C+A*B+A*C+B*C, mytable)
Martin Theus en Stephan Lauer hebben een uitstekend artikel geschreven over het visualiseren van loglineaire modellen, met behulp van mozaïekplots.
Metingen van associatie
De functie assocstats(mytable) in het vcd-pakket berekent de phi-coëfficiënt, contingentiecoëfficiënt en Cramer’s V voor een rxc-tabel. De functie kappa(mytable) in het vcd-pakket berekent Cohen’s kappa en gewogen kappa voor een verwarringsmatrix. Zie Richard Darlington’s artikel over “Measures of Association in Crosstab Tables” voor een uitstekend overzicht van deze statistieken.
Visualiseren van resultaten
Gebruik staaf- en cirkeldiagrammen voor het visualiseren van frequenties in één dimensie.
Gebruik het vcd-pakket voor het visualiseren van relaties tussen categorische gegevens (bijvoorbeeld mozaïek- en associatieplots).
Gebruik het ca-pakket voor correspondentieanalyse (visueel verkennen van relaties tussen rijen en kolommen in contingentietabellen).
Om het maken van deze grafieken te oefenen, kunt u de cursus datavisualisatie op DataCamp volgen.
Frequentietabellen converteren naar een “origineel” plat bestand
Tot slot kan het voorkomen dat u het oorspronkelijke “platte bestand” dataframe nodig hebt in plaats van de frequentietabel. Marc Schwartz heeft op de Rhelp-mailinglijst code gezet waarmee een tabel weer in een dataframe kan worden omgezet.
Leave a Reply