Kreuztabelle symmetrisch machen

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

Antworten
moffgat
Beiträge: 3
Registriert: Mi Feb 19, 2020 8:29 am

Kreuztabelle symmetrisch machen

Beitrag 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
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Kreuztabelle symmetrisch machen

Beitrag 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
moffgat
Beiträge: 3
Registriert: Mi Feb 19, 2020 8:29 am

Re: Kreuztabelle symmetrisch machen

Beitrag 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
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Kreuztabelle symmetrisch machen

Beitrag 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
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Kreuztabelle symmetrisch machen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
moffgat
Beiträge: 3
Registriert: Mi Feb 19, 2020 8:29 am

Re: Kreuztabelle symmetrisch machen

Beitrag von moffgat »

Super, danke. Beides funktioniert. Bernhards Lösung ist nur etwas leichter :)

LG Frank
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Kreuztabelle symmetrisch machen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten