Als nächstes möchtest du den Zusammenhang mit anderen (pseudo-metrischen) Variablen testen. Im Lernblock 3 hast du bereits pairs.panel()
aus der library psych
und corrplot()
aus der library corrplot
kennengelernt. Jetzt werden wir anstatt mit der library psych
zuerst mit der library GGally
ein Plot erstellen, da dies nach derselben Logik wie alle ggplots
generiert wird. Dafür nutzt du die Funktion ggpairs()
.
Ein Plot mit ggpairs()
ist genauso wie ein Plot aus pairs.panel()
aufgebaut:
Es ist sozusagen eine Matrix-Darstellung. Es gibt ein unteres Drittel
lower
, ein oberes Drittel upper
und eine Diagonale diag
. Für jeden dieser Teile kannst du Einstellungen festlegen, und das in Abhängigkeit davon, ob das Wertepaar in der Zelle der Matrix beides stetige Variablen sind (continuous
), beides diskrete Variablen (discrete
) oder eine Kombination (combo
) vorliegt.
Bevor du mit der Challenge startest, eine kurze Einführung in GGally
. Du kannst einfach die Funktion ggpairs()
aus der library nutzen.
install.packages("GGally")
library("GGally")
Ein Pairs-Panel erstellst du einfach mit der Funktion ggpairs()
: Als erstes Argument gibst du den Datensatz ein und im Argument columns
kannst du die Auswahl auf spezifische Variablen beschränken. Hier erstmal auf stfdem
agea
und gndr
. Ja, du kannst auch kategorielle Variablen inkludieren!
ggpairs(
pss,
columns = c(
"stfdem",
"agea",
"gndr"
)
)
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).
Somit erhältst du die Standardeinstellungen des Plots. In der Diagonalen wird die Dichte angezeigt, wenn die Variable stetig ist bzw. ein Barplot, wenn die Variable diskret ist. Im oberen Drittel wird, wenn beide Variablen stetig sind die Korrelation angezeigt. Liegt eine Kombination vor (also eine Variable stetig, die andere diskret) siehst du ein Boxplot. Wenn beide Variablen diskret sind (trifft hier nirgends zu) wird einfach die gruppierten Häufigkeiten in einem Balkendiagramm wiedergegeben. Somit erhältst du also direkt einen Überblick über die Variablen.
Es ist aber auch möglich die einzelnen Bereiche anzupassen: Wir fangen an mit lower
, denn wir wollen die binwidth
ändern. Im Argument lower
benennen wir eine Liste: die beinhaltet, was wir spezifisch auf continuous
, combo
oder discrete
darstellen wollen. Wenn du Änderungen an der Darstellung machen möchtest, musst du die in die Funktion wrap()
packen und darin kannst du dann Änderungen wie bei normalen ggplots
vornehmen. Wir legen jetzt fest, dass bei kontinuierlichen Wertepaaren ein Scatterplot angezeigt werden soll (points
) und bei gemischten Wertepaaren (stetig - diskret) Histogramme in einem Facet (facethist
), wobei wir die binwidth
auf \(1\) festlegen. Dazu legen wir fest, dass die Farbe nach Kategorie der Variable gndr
variieren soll (mapping = aes(color = gndr)
).
ggpairs(
pss,
columns = c(
"stfdem",
"agea",
"gndr"
),
lower = list(
continuous = "points",
combo = wrap(
"facethist",
binwidth = 1
),
mapping = aes(color = gndr)
)
)
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).
Wir sehen das Scatterplot ist noch nicht ganz optimal, da ja eine Variable wieder pseudometrisch ist. Deshalb fügen wir jittern hinzu:
ggpairs(
pss,
columns = c(
"stfdem",
"agea",
"gndr"
),
lower = list(
continuous = wrap(
"points",
position = position_jitter(width = 0.5)
),
combo = wrap(
"facethist",
binwidth = 1
),
mapping = aes(color = gndr)
)
)
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).
Jetzt sieht das ganze schon besser aus und zeigt, dass wir vermutlich keinen Zusammenhang zwischen Alter und Zufriedenheit mit der Demokratie haben.
Jetzt passen wir das obere Drittel upper
an. Wir legen fest, dass die Korrelation für kontinuierliche Paare angezeigt werden soll und ein Boxplot für combo
-Paare. Auch legen wir wieder fest, dass die Farben nach Geschlecht verschieden sind.
ggpairs(
pss,
columns = c(
"stfdem",
"agea",
"gndr"
),
lower = list(
continuous = wrap(
"points",
position = position_jitter(width = 0.5)
),
combo = wrap(
"facethist",
binwidth = 1
),
mapping = aes(color = gndr)
),
upper = list(
continuous = "cor",
combo = "box_no_facet",
mapping = aes(color = gndr)
)
)
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).
Es gibt für continuous
in lower
wie upper
folgende gute Darstellungsmöglichkeiten (eine komplette Übersicht gibt es hier):
points
cor
density
smooth
/ smooth_lm
Für combo
gibt es in lower
wie upper
folgende empfehlenswerte Darstellungsmöglichkeiten:
- box_no_facet
/ box
- facethist
Als nächstes wollen wir die Diagonale anpassen!
pp1 <- ggpairs(
pss,
columns = c(
"stfdem",
"agea",
"gndr"
),
lower = list(
continuous = wrap(
"points",
position = position_jitter(width = 0.5)
),
combo = wrap(
"facethist",
binwidth = 1
),
mapping = aes(color = gndr)
),
upper = list(
continuous = "cor",
combo = "box_no_facet",
mapping = aes(color = gndr)
),
diag = list(
continuous = wrap("densityDiag", bw = 1),
discrete = "barDiag",
mapping = aes(
color = gndr,
alpha = 1
)
)
)
pp1
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).
Im Argument diag
gibt es weniger Optionen:
barDiag
densityDiag
blankDiag
(Diagonale ist leer)Probiere dich im Code einfach etwas aus und spiele mit den möglichen Optionen herum.
Wir wollen jetzt hier zuguterletzt noch die Farben anpassen und dazu wiederum die library beyonce
nutzen: Erinnere dich daran, die Farben kannst du manuell mit scale_color_manual()
bzw. scale_fill_manual()
anpassen!
library("beyonce")
pp1 +
scale_color_manual(values = beyonce_palette(72)) +
scale_fill_manual(values = beyonce_palette(72))
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).
Auf der nächsten Seite geht’s zur Challenge!