Seite 1 von 1
Kreuztabelle symmetrisch machen
Verfasst: Mi Feb 19, 2020 8:37 am
von moffgat
Hallo zusammen,
ich habe einen Datensatz mit der Übereinstimmung zweier Beurteiler. Für die jeweils die selbe Person haben zwei Rater eine Bewertung auf der gleichen Skala ausgegeben. Mittels table lasse ich mir jetzt die Kreuztabelle ausgeben und wollte anschließend mit Kappa in vcd die Raterübereinstimmung berechnen. Das Problem ist, dass die Kreuztabelle nicht symmetrisch ist, weil einer der Rater eine der Kategorien der Beurteilungsskala nicht verwendet hat.
Wie kann ich table dazu bringen, eine symmetrische Tabelle mit allen Kategorien auf beiden Achsen auszugeben, ohne, dass ich die Tabelle hinterher noch von Hand bearbeiten muss?
Danke für eure Hilfe und viele Grüße
Frank
Re: Kreuztabelle symmetrisch machen
Verfasst: Mi Feb 19, 2020 8:44 am
von jogo
Hallo Frank,
willkommen im Forum!
Kannst Du und etwas mehr von den Daten zeigen und auch etwas Code?
Der Goldstandard ist ein reproduzierbares Beispiel:
viewtopic.php?f=20&t=11
die Mindestanforderung sind Ergebnisse von
str(...) und
summary(...).
Gruß, Jörg
Re: Kreuztabelle symmetrisch machen
Verfasst: Mi Feb 19, 2020 9:02 am
von moffgat
Hallo Jörg,
danke für das Willkommen. Der Datensatz ist relativ groß, weil noch voll mit vielen anderen Variablen. Es geht um zwei Variablen in denen die Ratings von zwei Beurteilern für alle Teilnehmer stehen. Erstellt man für beide Variablen mit Table eine Kreuztabelle sieht das folgendermaßen aus:
Code: Alles auswählen
>neubeurteilung<-table(Daten$Rater1, Daten$Rater2)
>neubeurteilung
1 2 3 4 5
0 2 0 0 0 0
1 9 8 3 0 0
2 1 30 25 2 0
3 0 2 19 14 0
4 0 0 5 6 0
5 0 0 0 0 1
Wie man sieht, fehlt in den Spalten die Kategorie 0, weil Beurteiler 1 das nicht vergeben hat. Wenn man jetzt versucht in vcd dafür Kappa zu berechnen, gibts ne Fehlermeldung, weil die Dimensionen nicht identisch sind.
Code: Alles auswählen
>Ergebnis <- Kappa(neubeurteilung, weights="Fleiss-Cohen")
Fehler in crossprod(colFreqs, rowFreqs) : nicht passende Argumente
Ich suche also nach einem Weg, dass table einem eine symmetrische Matrix ausgibt, also auch die Kategorie anzeigt, die der erste Beurteiler nicht gewählt hat.
Ich hoffe das war als Erklärung so ausreichend.
VG Frank
Re: Kreuztabelle symmetrisch machen
Verfasst: Mi Feb 19, 2020 10:39 am
von jogo
Hallo Frank,
so etwa könnte es gehen:
Code: Alles auswählen
a <- letters[1:5]
set.seed(42)
DF <- data.frame(a, b=sample(a, rep=TRUE))
DF
table(DF$a, DF$b)
DF$b <- factor(as.character(DF$b), levels=levels(DF$a))
DF
str(DF)
table(DF$a, DF$b)
Gruß, Jörg
Re: Kreuztabelle symmetrisch machen
Verfasst: Mi Feb 19, 2020 10:43 am
von bigben
Hi!
Code: Alles auswählen
bsp <- data.frame(Rater1 = sample(0:5, 100, replace=TRUE),
Rater2 = sample(1:5, 100, replace=TRUE))
nb <- table(bsp)
print(nb)
nb <- cbind(rep(0,6), nb)
print(nb)
print(dim(nb))
Hilft das?
LG,
Bernhard
Re: Kreuztabelle symmetrisch machen
Verfasst: Mi Feb 19, 2020 11:12 am
von moffgat
Super, danke. Beides funktioniert. Bernhards Lösung ist nur etwas leichter
LG Frank
Re: Kreuztabelle symmetrisch machen
Verfasst: Mi Feb 19, 2020 12:14 pm
von bigben
Dafür würde Jörgs Lösung automatisch auch funktionieren, wenn der eine Rater nie zum Ergebnis `3` gekommen wäre, das wäre mit meinem Ansatz umständlicher. Gleiches gilt, wenn noch weitere Daten hinzukommen -- dann ist Jörgs Lösung zukunftssicher, meine führt zum Fehler, sobald Rater 1 doch irgendwann `0` sagt.
LG,
Bernhard