Wie können Sie die Beziehung zwischen 3 kategorialen Variablen visualisieren?

21

Ich habe einen Datensatz mit drei kategorialen Variablen und möchte die Beziehung zwischen allen drei Variablen in einem Diagramm visualisieren. Irgendwelche Ideen?

Derzeit verwende ich die folgenden drei Grafiken: Bildbeschreibung hier eingeben

Jedes Diagramm ist für eine Grundlinien-Depression (Mild, Moderat, Schwerwiegend). Dann betrachte ich in jedem Diagramm die Beziehung zwischen Behandlung (0,1) und Depressionsverbesserung (keine, mäßig, erheblich).

Diese 3 Diagramme dienen zum Anzeigen der 3-Wege-Beziehung. Gibt es jedoch eine bekannte Möglichkeit, dies mit einem Diagramm zu tun?

Alejandro Ochoa
quelle
4
Das Posten der Daten würde die Leute spielen lassen.
Nick Cox
1
Sie haben 3 Basiskategorien, 2 Behandlungskategorien und 3 Depressionsergebnisse. Angesichts der letzten. Die Proportionen der einzelnen Depressionstypen konnten durch 6 Punkte in einem dreieckigen (trilinearen, ternären) Diagramm angezeigt werden.
Nick Cox
4
Was ist los mit diesen Grafiken?
Aksakal,
Können Sie die Daten auf Anfrage von @NickCox bereitstellen? Ich nehme an, es sind nur 18 Zahlen.
gung - Reinstate Monica

Antworten:

12

Dies ist ein interessanter Datensatz, der versucht, grafisch darzustellen, zum Teil, weil er nicht wirklich kategorisch ist. Beide 3-Level - Faktoren sind Ordnungs und es ist möglich , Zusammenspiel zwischen ihnen (vermutlich, es ist schwieriger für ein mild baselinehaben substantial improvement- oder vielleicht substantial improvementetwas anderes bedeutet für jeden baseline).

Bei mehreren Variablen gibt es normalerweise keine einzige Ansicht, die alle Funktionen anzeigt, die Sie interessieren könnten. Einige Faktoren lassen sich leichter vergleichen als andere. Ich denke, Ihre ursprüngliche Ansicht ist gut und wäre besser mit den Vorschlägen von Nick Cox: Entfernen doppelter Legenden und Verwenden einer ordinalen Farbskala.

Wenn Sie den Unterschied zwischen den Behandlungen am interessantesten sehen, können Sie die Änderung hervorheben, indem Sie ein Diagramm mit gestapelten Bereichen anstelle von gestapelten Balken verwenden.

Bildbeschreibung hier eingeben

Ich bin normalerweise vorsichtig beim Stapeln im Allgemeinen, weil es schwieriger ist, die Mittelwerte zu lesen, aber dies verstärkt die Fixsummennatur dieser Daten. Und es macht es einfach, die Summe moderate+ zu lesen, substantialwenn dies relevant ist. Ich habe die Reihenfolge der improvementPegel umgedreht, damit höher für die Frequenz besser ist.

Ohne Stapelung ist das Äquivalent ein Steigungsdiagramm.

Bildbeschreibung hier eingeben

Es ist einfacher, jedes Level zu lesen, aber schwieriger, das Zusammenspiel zu verstehen. Man muss bedenken, dass die dritte Zeile direkt von den beiden anderen abhängig ist.

In Anbetracht der Ordnungszahl der Daten kann es hilfreich sein, den improvementWert in eine numerische Punktzahl umzuwandeln , wie dies bei Likert- Daten häufig der Fall ist . Zum Beispiel none=0, moderate=1, substantial=2. Dann können Sie diese Variable auf einer kontinuierlichen Skala grafisch darstellen. Der Nachteil ist, dass Sie eine vernünftige Wertung finden müssen (z. B. 0, 1 und 5 wären eine wahrere Darstellung).

Bildbeschreibung hier eingeben

Kolophon : Diese Plots wurden mit der Funktion Graph Builder im Softwarepaket JMP erstellt (das ich mitentwickle). Obwohl interaktiv erstellt, ist ein Skript zum Beispiel für das Flächendiagramm ohne die Farbanpassungen:

Graph Builder(
    Graph Spacing( 15 ),
    Variables( X( :treatment ), Y( :frequency ),
        Group X( :baseline ), Overlay( :improvement )
    ),
    Elements( Area( X, Y ) )
);
xan
quelle
2
+1. Einige hervorragende Ideen hier. Obwohl mir das Stapeln unangenehm ist, denke ich, dass das erste Diagramm am besten funktioniert. Dies bringt die interessante Wechselwirkung zum Vorschein: Behandlung 1 führt immer zu mehr und keine wesentlichen Verbesserungen!
Nick Cox
Guter Eintrag. Gibt es überhaupt eine Möglichkeit, das erste Diagramm zu erstellen, das Sie in R anzeigen? Ich habe JMP eine Weile nicht mehr verwendet.
Alejandro Ochoa
1
@ AlejandroOchoa ggplot hat ein Gebiet geom. Siehe Erstellen eines gestapelten Flächendiagramms mit ggplot2 .
xan
10

Hier ist zunächst meine Lektüre aus der Grafik, die die Daten für diejenigen enthält, die spielen möchten (experimentieren Sie, wenn Sie möchten). Hinweis: Off-by-One-Fehler sind ebenso möglich wie grobe Fehler.

    improvement  treatment   baseline   frequency  
           none          0       mild          5  
       moderate          0       mild         41  
    substantial          0       mild          4  
           none          1       mild         19  
       moderate          1       mild         19  
    substantial          1       mild         12  
           none          0   moderate         19  
       moderate          0   moderate         24  
    substantial          0   moderate          7  
           none          1   moderate         20  
       moderate          1   moderate         14  
    substantial          1   moderate         16  
           none          0     severe          7  
       moderate          0     severe         21  
    substantial          0     severe         22  
           none          1     severe         12  
       moderate          1     severe         15  
    substantial          1     severe         23  

Hier ist eine Überarbeitung des ursprünglichen Designs. Ein Detail der Originaldaten macht die Sache einfach: Die Anzahl der Personen in jeder der Prädiktorkombinationen ist gleich, sodass die Häufigkeit und der Prozentsatz der Aufzeichnung gleich sind. Anstelle eines gestapelten (unterteilten, segmentierten) Balkendiagramms trennen wir hier Balken in einem Zweiwege-Balkendiagramm oder einem Tabellenplot.

Viele Details in Grafiken sind genau das, Details. Einige kleine Schwachstellen in einem Diagramm können seine Wirksamkeit beeinträchtigen, und einige kleine Verbesserungen können ebenfalls hilfreich sein.

Bildbeschreibung hier eingeben

Um es auszudrücken:

  1. Drei Panels werden hier nicht benötigt, da Achsen, Legende und Text wiederholt werden.

  2. Eine Legende ist immer Fluch und Segen zugleich, was den Leser dazu zwingt, geistig "hin und her" zu gehen (oder sich die Legende zu merken, was nicht ansprechend ist, wie einfach es auch sein mag). Informativer Text direkt neben den Balken ist leichter zu folgen.

  3. Die Obstsalat-Farbcodierung ist entbehrlich. Es scheint auch willkürlich: "Wesentliche" Verbesserung ist eine große Sache, aber ich finde sogar starkes Gelb eine gedämpfte Farbe. Aber wir brauchen keine Farbe, wenn wir zu erklärenden Text haben.

  4. Obwohl einige vor Entsetzen schreien werden, wenn sie die Unterscheidung zwischen Figure und Table verletzen, können wir auch die Frequenzen anzeigen. Es ist hilfreich, "4 Personen in dieser Kategorie" zu denken.

  5. Es ist eine Hommage an die traditionelle Darstellung der Reaktion auf der vertikalen Achse, genau wie im Original.

Trotzdem ist es schwer, eine große Struktur in diesen Daten zu erkennen. Wenn dem so ist, ist es auch schwierig, die Schuld zwischen (a) Daten ohne viel Struktur und (b) den Schwächen eines grafischen Designs zu teilen, um nicht nur Vorhersageeffekte, sondern auch mögliche Interaktionen herauszusuchen. Die Behandlung scheint weniger wichtig als der Ausgangszustand. Aber wie viel Spielraum gab es dann, wenn die Basislinie "mild" war, für eine "wesentliche" Verbesserung? Ich höre hier auf, um mich nicht selbst zum Narren zu halten, wenn das Studium von Daten zur psychischen Gesundheit sicherlich kein Spezialgebiet ist, besonders wenn sich herausstellt, dass die Daten gefälscht sind. Aber wenn sie echt sind, könnten wir es mit einer viel größeren Stichprobe aufnehmen. (Das sagen wir normalerweise, aber los geht's.)

BEARBEITEN Falls gewünscht, kann die Grafik natürlich durch ein ordinales Farbschema kompliziert werden:

Bildbeschreibung hier eingeben

Für das Protokoll: Die Grafiken verwendeten Stata-Code, einschließlich meines eigenen Programms, das mit tabplotheruntergeladen werden kann ssc inst tabplot.

tabplot improvement group [w=frequency] , showval ///
xmla(1.5 "mild" 3.5 "moderate" 5.5 "severe", noticks labgap(*4) labsize(medsmall)) ///
xla(1 "0" 2 "1" 3 "0" 4 "1" 5 "0" 6 "1") ///
xtitle(baseline and treatment) xsc(titlegap(*4)) bfcolor(emerald*0.2)

tabplot improvement group [w=frequency] , showval ///
xmla(1.5 "mild" 3.5 "moderate" 5.5 "severe", noticks labgap(*4) labsize(medsmall)) ///
xla(1 "0" 2 "1" 3 "0" 4 "1" 5 "0" 6 "1") ///
xtitle(baseline and treatment) xsc(titlegap(*2)) ///
sep(improvement2) bar3(bfcolor(emerald*0.2)) bar2(bfcolor(emerald*0.6)) ///
bar1(bfcolor(emerald)) barall(blcolor(green)) 
Nick Cox
quelle
Könnten Sie Ihr Diagramm trotzdem mit einem Farbschema hochladen, das die Ordnungszahl der Daten widerspiegelt? Mit welcher Software haben Sie das Visual erstellt?
Alejandro Ochoa
Dies sind sehr schöne Handlungen
Shadowtalker
4

Ich verwende gerne eine 2-Ebenen-X-Achse für solche Daten. Ihre x-Achsen-Kategorien für ein einzelnes Diagramm könnten also sein:

  • Behandlung = 0, Grundlinie = mild
  • Behandlung = 0, Grundlinie = mäßig
  • Behandlung = 0, Grundlinie = Schwerwiegend
  • Behandlung = 1, Grundlinie = mild
  • Behandlung = 1, Grundlinie = mäßig
  • Behandlung = 1, Grundlinie = Schwerwiegend

... mit der gleichen Anzahl von Histogrammbalken nach Kategorien [keine / mäßig / erheblich].

Maximale Kraft
quelle
+1. Ich stimme der in meiner Antwort umgesetzten Grundidee hier zu. Ich kann nicht sagen, wie nah mein Balkendiagrammdesign dem entspricht, was Sie sich vorgestellt haben.
Nick Cox
Vielen Dank, Ihr Diagramm sieht gut aus. Haben Sie versucht, es mit Behandlung 0/1 als äußerer Kategorie und Baseline = Mild / Moderate / Severe als Kategorie näher an der x-Achse zu betrachten? Ich denke, wenn Sie es so darstellen, sehen Sie ein klareres Muster von - denn innerhalb der Behandlung = 0 steigen die "substanziellen" Verbesserungsbalken stetig an, wenn die Grundlinie von Mild / Moderat / Schwerwiegend ansteigt. Und dass Sie dasselbe Muster (in geringerem Maße) in der Behandlung sehen würden = 1. Im Allgemeinen setze ich die Variable mit weniger Kategorien (z. B. Behandlung hier) nach außen. Aber vielleicht haben Sie es schon so gesehen.
Max Power
Ich habe es nicht anders versucht, aber ich hatte das Gefühl, dass der Forscher am liebsten die Auswirkungen von Behandlungen vergleichen möchte, die zu Studienbeginn verabreicht wurden. Das dürfte einfacher sein, als ich es getan habe.
Nick Cox
Das ergibt für mich einen Sinn.
Max Power
4

Ist nicht Mosaik Handlung speziell für diesen Zweck konzipiert?

In R wäre es wie

library(vcd)
d = read.table("data.dat", header=TRUE)
tab = xtabs(frequency ~ treatment+baseline+improvement, data=d)
mosaic(data=tab,~ treatment+baseline+improvement, shade=TRUE, cex=2.5)

Jede kategoriale Variable geht zu einer Kante des Quadrats, die durch ihre Beschriftungen unterteilt ist. (Wenn Sie also jede Kante nur auf einer Ebene unterteilen, können höchstens 4 kategoriale Variablen dargestellt werden. IMHO, über 3 hinaus wird es chaotisch und schwieriger zu interpretieren). Die Größe der Rechtecke ist proportional zur Frequenz. Dies ist die Hauptidee hinter der Mosaikzeichnung, und dies gilt auch für diese Antwort und die Antwort von Paweł Kleka.

Die Unterschiede liegen in den Layouts dieser Rechtecke und "Feinheiten", die von einem bestimmten R-Paket für diese Art von Plot bereitgestellt werden. Wie Sie der Antwort von Paweł Kleka entnehmen können, graphicsunterteilt das Paket die obere Kante in zwei Ebenen, anstatt die rechte Kante zu verwenden. Ich habe ein vcdPaket mit Standardoptionen verwendet, sodass die Farbe den Grad der Zuordnung zwischen den Variablen angibt. Grau bedeutet, dass Daten mit der Variablenunabhängigkeit konsistent sind (Sie können die Hypothese nicht ablehnen). Blau bedeutet, dass eine positive Assoziation zwischen "schwerer" Grundlinie und "wesentlicher" Verbesserung sowohl für "0" - als auch für "1" -Behandlung besteht. (Überraschung, Überraschung! Ich übersetze es wie folgt: Wenn Sie eine schwere Depression haben, werden Sie wahrscheinlich wesentlich besser, ob Sie eine Behandlung haben oder nicht.

Man kann die Handlung an seine Bedürfnisse anpassen, siehe zum Beispiel hier . Das Paket hat auch mehrere Vignetten, google "VCD-Mosaik-Beispiel" (wie ich es gerade getan habe). Der eingangs zitierte Wikipedia-Artikel erklärt auch, wie man diese Art von Handlung und Intuition dahinter konstruiert.

Bildbeschreibung hier eingeben

Wenn Sie mein Bild mit dem Bild in der Antwort von Paweł Klęka vergleichen zu können , tut es nicht Sache, dass ‚Behandlung‘ auf dem linken Rande jeden Bildes ist. Sie können die Kantenposition leicht ändern, indem Sie die letzte Zeile meines Codes ändern und das Layout Ihren Anforderungen entsprechend anpassen. Es ist üblich, dass links die wichtigste Variable oder die Variable mit der geringsten Anzahl von Bezeichnungen steht. Sie können auch die Reihenfolge der Etiketten ändern (beispielsweise so, daß am rechten Rand die Reihenfolge „none moderieren wesentlich“ ist) , indem der entsprechende Faktor Variable in R bestellt und ihre Niveaus eingestellt wird .

Lanenok
quelle
Zum Zeitpunkt des Schreibens gibt es zwei Antworten auf Mosaikzeichnungen. Es wäre hilfreich, wenn jeder von Ihnen ausführlicher darauf eingehen würde, was Ihre Handlung zeigt und warum sie hilfreich ist, nicht zuletzt, weil die Handlungen sehr unterschiedlich sind.
Nick Cox
@ NickCox dieses sieht sicherlich anders aus als die anderen. Sie sind kaum dasselbe Display
Shadowtalker
Sie haben beide Behandlung auf der y-Achse. Was für ihre Befürworter Gold wäre, sind Kommentare zu den Vorteilen und Einschränkungen der einzelnen Displays.
Nick Cox
Vielen Dank für die Erweiterung Ihrer Antwort. Meines Erachtens besteht hier wahrscheinlich ein Interesse daran, die Antworten bei gegebener Behandlung mit den Ausgangswerten zu vergleichen. Ich stimme natürlich zu, dass Sie mit welcher Variablen wo basteln können, aber haben Sie die anderen Möglichkeiten ausprobiert und welche funktionieren am besten? Wenn der Leser die Antwort hier betrachtet, muss er zwei Reihen von Blöcken gleichzeitig vergleichen.
Nick Cox
@ Nick Cox Danke für deine Kommentare. Es war das Einzige, was mich zur Expansion motivierte. Andere Möglichkeiten habe ich nicht ausprobiert. Eigentlich, denke ich, wenn der Autor der Frage , diese Art von Handlung nützlich findet, er sollte alles versuchen, dann schreiben und die Ergebnisse für die Gemeinschaft erklären. Übrigens sage ich nicht, dass diese Art der Handlung besser ist als andere. Der Punkt ist: Es wurde speziell für kategoriale Variablen und zur Visualisierung der Unabhängigkeit und / oder Verletzung der Unabhängigkeit entwickelt.
Lanenok
3

Ich empfehle Mosaikplot

mosaicplot(table(moz), sort = c(3,1,2), color = T)

Mosaikplot ()

Paweł Kleka
quelle
Zum Zeitpunkt des Schreibens gibt es zwei Antworten auf Mosaikzeichnungen. Es wäre hilfreich, wenn jeder von Ihnen ausführlicher darauf eingehen würde, was Ihre Handlung zeigt und warum sie hilfreich ist, nicht zuletzt, weil die Handlungen sehr unterschiedlich sind.
Nick Cox
2

Eine Option, die ich in Betracht ziehen würde, ist die Verwendung paralleler Mengen. Einige der Vergleiche sind einfacher als andere, aber Sie können immer noch die Beziehungen zwischen drei kategorialen Variablen sehen.

Hier ist ein Beispiel mit Titanic Survival-Daten:

Hier ist ein Beispiel mit Titanic-Überlebensdaten.

In R (mit Ihren Tags) habe ich ggparallel für die Implementierung verwendet. Einige Leute haben hier im Lebenslauf diskutiert, wie man es auf andere Weise umsetzt.

nazareno
quelle
Ich habe Probleme, mir das vorzustellen. Könnten Sie sich ein Beispiel ausdenken?
Shadowtalker
Die Breite einer Linie im Plot ist proportional zur Häufigkeit von Koexistenzen zweier Kategorien. Für die in den Diagrammen der ursprünglichen Frage verwendeten Daten gäbe es drei horizontale Achsen: Grundlinien-Depression, Behandlung und Depressionsverbesserung. In jeder gibt es separate Bereiche für jede Ebene dieser Kategorie. Coocurrences werden verknüpft, wobei eine Breite ihre Häufigkeit darstellt.
Nazareno
2

Die Informationen können auch mithilfe des folgenden einfachen Liniendiagramms übermittelt werden:

Bildbeschreibung hier eingeben

Die Verbesserung wird durch verschiedene Linientypen angezeigt, während die Grundliniengruppe in Farben angezeigt wird. Diese und der x-Achsen-Parameter (Behandlung hier) können bei Bedarf auch ausgetauscht werden.

rnso
quelle
1

Ähnlich wie bei den oben von nazareno veröffentlichten parallelen Sets können Sie alluviale Diagramme verwenden, die im alluvialen R-Paket enthalten sind. http://www.r-bloggers.com/alluvial-diagrams/

Ankur Chakravarthy
quelle