-
Notifications
You must be signed in to change notification settings - Fork 2
/
04_daten-verstehen-mit-r.Rmd
466 lines (375 loc) · 31.8 KB
/
04_daten-verstehen-mit-r.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
## **Daten verstehen mit R**
[![License: CC BY 4.0](https://img.shields.io/badge/License-CC%20BY%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by/4.0/deed.de)
*"Daten verstehen mit R" von Sylvi Rzepka & Susan Reichelt in "R Lernen - der Datenkurs von und für die Zivilgesellschaft" von CorrelAid e.V. Lizensiert unter [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0/deed.de).*
In dieser Lektion soll es darum gehen, wie R es uns ermöglicht, einen ersten Eindruck über Daten zu gewinnen. Hierbei stellen wir Euch ein paar grundlegende Schritte vor - wer möchte, kann den Code direkt replizieren.
In erster Linie soll es aber darum gehen, die beiden vorhergehenden Lektionen einmal beispielhaft "in action" zu sehen und zu verstehen, mit welchen kleinen Handgriffen Ihr Daten mithilfe von Funktionen und Kontextwissen erfahrbar machen könnt.
### **Kernaussagen**
#### Grundlagen der Datenanalyse
- Für explorative Datenanalysen ist es wichtig, einen umfassenden Eindruck der Daten zu erhalten, um Muster zu erkennen und Extremwerte zu identifizieren.
- Eine erste Datenanalyse lässt sich in drei grundlegende Schritte teilen. Wir starten mit niedrigschwelligen **zusammenfassenden Formaten**, um uns einen Überblick über die Daten zu verschaffen. Danach helfen uns **einfache Datenvisualisierungen**, die Ausprägungen von Variablen zu untersuchen. Um weitere Operationen durchführen zu können, berechnen wir im Anschluss **statistische Kennzahlen**, Lage- und Verteilungsparameter, die für uns interessante Informationen enthalten und die Grundlage für weitere Analysen bilden.
- **Context is key**. Das bedeutet, dass Ihr die Daten und die angewandten statistischen und visuellen Auswertungen immer im Zusammenhang miteinander bewertet.
Genauere Erklärungen zur Erstellung von Visualisierungen, Bearbeitungen der Daten und -formate, sowie dem Erstellen von Reports kommen in späteren Lektionen noch ausführlicher - hier wollen wir Euch knapp zeigen, welche Erkenntnisse wir aus Daten in R ziehen können, um gezielte Fragen zu beantworten.
Für diese Lektion benötigt Ihr zwei Packages: `dplyr`und `ggplot2` (beide Teil des `tidyverse`, welches Ihr in der Lektion zur Datentransformation genauer kennenlernt).
```{r pakete_ersteanalysen, exercise = TRUE}
# Packages installieren
# install.packages("dplyr")
# install.packages("ggplot2")
# Packages laden
library(dplyr)
library(ggplot2)
```
Außerdem ist es praktisch, wenn Ihr Euch in dieser Lektion immer mal wieder an die Lektion zu den Grundlagen der Statistik erinnert: was sind Daten, was sind Kennzahlen und welche Kennzahlen sind eigentlich für welche Daten wichtig?
### **Quiz**
```{r quiz_ersteanalyseninr}
quiz(caption = NULL,
question("Was meint Ihr, welche Aussagen sind wahr?",
answer("Es ist ausreichend, statistische Kennzahlen zu berechnen, um Aussagen über die Bedeutung erhobener Daten zu treffen."),
answer("Es sind ausreichend, Visualisierungen zu erstellen, um Aussagen über die Bedeutung erhobener Daten zu treffen."),
answer("Kontext ist bei rigoroser Datenanalyse nicht so wichtig."),
answer("Die Berechnung statistischer Kennzahlen, die Visualisierung und die Kontextualisierung sind eine wichtige Grundlage (!) für die Interpretation von Daten und komplexere Analysen.", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch. Die Berechnung statistischer Kennzahlen, die Visualisierung und die Kontextualisierung sind eine wichtige Grundlage (!) für die Interpretation von Daten und komplexere Analysen.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Der Mittelwert ist robust gegen Ausreißer.",
answer("Wahr"),
answer("Unwahr", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Der Mittelwert kann durch Ausreißer stark verzerrt werden. Robuster ist der Median.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Der Mittelwert der Zufallsvariable beträgt 5, die Spannweite 10 und die Standardabweichung 2. Um wie viel weichen Beobachtungen im Mittel von dem Wert 5 ab?",
answer("2", correct = TRUE),
answer("5"),
answer("10"),
correct = "Richtig!",
incorrect = "Leider falsch: Die Standardabweichung sagt aus, um wie viel im Mittel eine Beobachtung von dem Mittelwert abweicht (hier 2). Die Einheit entspricht dabei der Maßeinheit der Variable.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
)
)
```
### **Interaktive Übung**
#### Fragen
Am Anfang jeder Datenanalyse steht etwas, dass zunächst gar nichts mit Daten zu tun haben muss: Fragen. Da Daten letztlich Informationen formalisieren, nutzen wir die Ergebnisse einer Datenanalyse in der Regel für den **Erkenntnisgewinn**. Möchten wir Daten erheben oder liegen uns diese bereits vor vor, hilft es, sich auf bestimmte Fragestellungen zu fokussieren, die sich aus strategischen Überlegungen ergeben.
Der [Datensatz](https://github.com/rfordatascience/tidytuesday/tree/master/data/2021/2021-01-26){target="_blank"} von **"Break Free From Plastic"** stammt aus den Jahren 2019 und 2020. Da es in dieser Einheit darum geht, in den **Analyse-Spirit** zu kommen und R als Analysetool kennenzulernen, haben wir den Datensatz "Break Free from Plastic" bereits **bereinigt** und in **zwei Datensätze** aufgeteilt: der Community Datensatz (als `community` hinterlegt) enthält alle Variablen, welche für Fragestellungen rund um die Community-Perspektive nützlich sind und der Audit Datensatz (als `audit` hinterlegt) umfasst jene Variablen, die für Fragen zur Audit-Perspektive nützlich sind. Wir konzentrieren uns besonders auf das Jahr 2019.
Versetzen wir uns die Rolle der Organisator:innen. Sie fragen sich bestimmt, wie erfolgreich ihre Aktivitäten im Jahre 2019 waren:
1. Wie viel Plastik wurde insgesamt gesammelt? <br>
2. Wie viel Plastik wurde durchschnittlich je Kontinent gesammelt? <br>
3. Welche Faktoren beeinflussen möglicherweise diese Unterschiede? <br>
#### Datenstruktur
Um diese Fragen zu beantworten, schauen wir nun auf die Informationen, die uns vorliegen: Wir analysieren die dazu vorliegenden Daten und interpretieren die Ergebnisse.
Mit der Funktion **`dplyr::glimpse()`** erhaltet Ihr einen Überblick über die Struktur des Datensatzes (Anzahl der Beobachtungen, Anzahl der Variablen, Name und Datentyp der Variablen). Der `community` Datensatz enthält geographische und zeitliche Variablen sowie Daten zur gesammelten Plastikmenge, Veranstaltungen und Freiwilligen. Eine Zeile (auch: Beobachtung) entspricht einem Land.
```{r exercise_community, exercise = TRUE}
# Überblick über die Community verschaffen
dplyr::glimpse(community)
```
```{r quiz_kurzstatistik}
quiz(caption = NULL,
question(
"Wie viele Variablen hat der `community`-Datensatz?",
answer("Das kann man anhand des Outputs nicht sagen."),
answer("51"),
answer("6", correct = TRUE),
answer("7"),
correct = "Richtig!",
incorrect = "Leider falsch, schau nochmal genauer.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen",
random_answer_order = TRUE
),
question(
"Welche Variablen gibt die Anzahl an gesammelten Plastikstücken an?",
answer("Das kann man anhand des Outputs nicht sagen."),
answer("n_volunteers"),
answer("n_pieces", correct = TRUE),
answer("n_events"),
correct = "Richtig!",
incorrect = "Leider falsch. Schau nochmal genauer in die Übersicht, die dplyr::glimpse() ausgibt.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen",
random_answer_order = TRUE
)
)
```
Bei der Interpretation der Daten müssen wir die **Aggregationsebene** betrachten. In der Datenwissenschaft verweist man auf die **Granularität der Daten**: Je aggregierter Daten vorliegen, desto schwieriger wird es, Zusammenhänge korrekt zu bestimmen. Hier also wieder: Kontext! Wie können wir den Kontext der Daten hier beschreiben? Wir können in unserem Datensatz lediglich zwischen den Ländern vergleichen, nicht beispielsweise zwischen individuellen Events, und müssen bedenken, warum diese Schwankungen existieren. So weichen beispielsweise die Anzahl durchgeführter Events und die Anzahl involvierter Freiwilliger stark voneinander ab. Wie genau diese Unterschiede zu werten sind, ob beide Zahlen von anderen Variablen (sog. Störfaktoren, engl. *confounding variables*) beeinflusst werden und ob eine Bewertung auf Basis der Daten möglich ist, müssen wir noch herausfinden. Ein Schlagwort welches häuftig in Verbindung mit der Aggregation von Daten fällt, ist der **"Ökologische Fehlschluss"**. Dieser beschreibt, wie auf der Basis von Aggregatdaten unzulässigerweise auf die Individualebene geschlossen wird. Mehr dazu findet Ihr natürlich auf [Wikipedia](https://de.wikipedia.org/wiki/%C3%96kologischer_Fehlschluss).
#### Erster Überblick
Nun kennen wir den Grundaufbau des Datensatzes und möchten die Variablen, die für unsere Fragestellungen interessant sind, besser verstehen. Dazu geben wir uns mit `summary()` **erste (statistische) Eigenschaften** der Variablen aus.
```{r summary_community, exercise = TRUE}
# Zusammenfassung anzeigen lassen
summary(community)
```
Wir sehen, dass die Variablen, also die Spalten in unserem Datensatz, unterschiedliche Formate haben. `continent`, `country` und `countrycode` haben die Class "character", weil sie aus Text/ Buchstaben bestehen. Statistisch gesehen sind sie **nominal skalierte** Variablen, da sie Kategorien sind, ohne Ranking und ohne numerischen Wert. Alle anderen Variablen `n_...` sind **metrisch skalierte** Variablen. Wir können sie der Größe nach sortieren und mit ihnen ganz natürlich rechnen.
```{r quiz_plausibilisierung}
quiz(
caption = NULL,
question(
"Was ist der niedrigste Wert, den die Variable n_pieces annimmt?",
answer("Das kann man anhand des Outputs nicht sagen."),
answer("68.5"),
answer("1.0", correct = TRUE),
answer("120646.0"),
correct = "Richtig!",
incorrect = "Leider falsch: 1 Plastikstück ist der niedrigste Wert.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen",
random_answer_order = TRUE
),
question(
"Die Spannweite gibt die Differenz zwischen dem größten und dem kleinsten Wert einer Variable an. Wie plausibel findet Ihr die Spannweite der Variable n_pieces?",
answer("Das kann man anhand des Outputs nicht sagen."),
answer("Viel zu groß."),
answer("Plausibel", correct = TRUE),
answer("Viel zu klein"),
correct = "Richtig! Wir sehen keine negativen Werte und auch die Größenordnung erscheint nicht unplausibel.",
incorrect = "Leider falsch: Die Spannweite erscheint plausibel: wir sehen keine negativen Werte und auch die Größenordnung ist vorstellbar ",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen",
random_answer_order = TRUE
)
)
```
Auch die Gesamtanzahl an gesammelten Plastikstücken, Events und Freiwilligen können wir bestimmen. Hierzu nutzen wir die `sum()` Funktion und die Variablen-Verweismöglichkeit mit dem `$`-Zeichen - erinnert Euch, das hatten wir in der letzten Lektion schon kurz ausprobiert.
```{r berechnung_summen, exercise = TRUE}
# Berechnung der Summen
sum(community$n_pieces)
sum(community$n_events)
sum(community$n_volunteers)
```
#### Datenzusammenfassungen
Wir haben nun eine erste Übersicht zu einzelnen Variablen erhalten - als nächstes können wir die Daten in Tabellen zusammenfassen, beispielsweise um neue Datenobjekte zu erstellen. Hierbei hilft uns die Funktion `summarize()`, welche aus dem `dplyr` Package stammt.
`summarize` erstellt neue **Hilfsvariablen**, welche Berechnungen für uns zusammenfassen. Im Beispiel unten erstellen wir eine Übersicht, welche die Gesamtzahl, sowie die Spannweite der gesammelten Plastikstücke berechnet. Hierzu benennen wir also zwei neue Hilfsvariablen und weisen diesen dann die von uns gewünschte Funktion oder Funktionskombination zu.
```{r summarise, exercise = TRUE}
# Berechnung rund um n_pieces
dplyr::summarize(community,
Gesamt = sum(community$n_pieces),
Spannweite = max(community$n_pieces) - min(community$n_pieces))
```
Hier wurden nun alle Länder zusammengeschmissen... und obwohl das natürlich insgesamt einen Dateneindruck ermöglicht, können wir hiermit noch lange keine Muster erkennen. In Kombination mit der `dplyr::group_by()` Funktion lassen sich schnell etwas umfassendere Zusammenfassungen über die Daten erstellen. Die Funktion erlaubt es, Daten zu kategorisieren, bspw. Länder anhand der zugehörigen Kontinente zusammenzufassen. Mit dem Code Chunk unten können wir sehen, wie viele Länder pro Kontinent an der Aktion teilgenommen haben, wie viel insgesamt gesammelt wurde, und wie groß der Unterschied zwischen den Ländern ist.
Hierbei erstelle ich wieder ein paar Hilfsvariablen. Die erste, in der `group_by()` Funktion, kategorisiert die Events nach Kontinenten. Danach seht Ihr die Hilfsvariablen für die drei Funktionen, die uns interessieren.
```{r Vorschau_group_by, exercise = TRUE}
# Kombination group_by und summarize
dplyr::summarize(group_by(community, Kontinent = community$continent), # aus den Daten 'community' eine Kategorie nach 'continent'
Länder = n(), # Anzahl der Zeilen
Gesamt = sum(n_pieces), # Summe der Werte
Spannweite = max(n_pieces) - min(n_pieces)) # Differenz max() und min()
```
Daraus können wir einen ersten Eindruck der Daten gewinnen: In Asien wurde beispielsweise am meisten Plastik gesammelt, jedoch finden wir hier auch die größten Unterschiede zwischen den Ländern (d.h., hohe Streuung der Beobachtungen). In Europa wurde zwar nicht so viel gesammelt, allerdings scheinen die teilnehmenden Länder am ähnlichsten gesammelt zu haben. Diese Erkenntnisse geben uns also Informationen zu unseren Fragen, aber sie geben uns auch Hinweise darüber, dass die Daten möglicherweise nicht ganz vergleichbar sind - zumindest nicht auf dieser Ebene.
#### Datenvisualisierung
Neben Tabellen sind auch einfache Datenvisualisierungen für das Datenverständnis hilfreich! So lassen sich Daten visuell darstellen und statistische Muster erkennbar machen. Für diesen explorativen Schritt der Datenanalyse müsst Ihr nicht auf die Gestaltung oder den genauen Code der Plots achten - es soll vorrangig um das Erkennen vom Datenverhalten gehen.
Erstellen wir zur Betrachtung der Kontinente als erstes ein Punktediagramm (engl. *Scatterplot*). Hierzu nutzen wir das Package `ggplot2`, mit dem man einen Plot über eine Art Schichtsystem aufbaut. Die erste Schicht, enthalten in der `ggplot()` Funktion, verweist auf den Datensatz (*community*) und die bestimmten Variablen (*continent*, *n_pieces*), die entlang der x- und y- Achsen dargestellt werden sollen. Die `geom_jitter()` Funktion bestimmt die Art der Visualisierung: *jitter* beschreibt eine besondere Art von Punktediagramm, bei dem Datenpunkte sich ausweichen um die Lesbarkeit bei Überlagerung zu ermöglichen. Andere Schichten, hinzugefügt über "+", beinhalten Schichten zur Gestaltung: Annotation, Layout, etc.
Diese Visualisierung stellt sowohl die Verteilung als auch die Häufigkeit von Beobachtungen über die Verteilung dar. Nehmt Euch einen Moment und beschreibt den Plot in Euren Worten.
Wo würdet Ihr die jeweiligen Mittelwerte verorten? <br>
```{r geom_point_n_pieces_bericht, exercise = TRUE}
# Erstellung eines jitter plots zur Anzahl gesammelter Plastikstücke pro Kontinent
ggplot(data = community,
aes(x = continent, # x-Achse soll Kontinente zeigen
y = n_pieces)) + # y-Achse soll Stücke zeigen
geom_jitter(size = 3, # Größe der Punkte
alpha = 0.6, # Transparenz der Punkte
width = 0.2) + # Breite der Punkt-jitter pro Kategorie
labs(title = "Auch die Anzahl gesammelter Plastikstücke von 'Break Free From Plastic' ..." ,
subtitle = "... unterscheidet sich nach Kontinent und Land.",
y = "Anzahl gefundener Plastikstücke pro Land",
x = "Kontinent",
caption = "Datenquelle: TidyTuesday und BFFP") + # Festlegung der Achsenbezeichungen, Überschriften und Titel
theme_minimal() + # Festlegung des Layout-Designs
theme(legend.position="none") # Ausblenden der Legende
```
```{r quiz_scatterplot}
quiz(caption = NULL,
question(
"In welchen Kontinenten beobachten wir extreme Werte, sogenannte 'Ausreißer'?",
answer("Afrika und Amerika"),
answer("Afrika und Europa"),
answer("Afrika und Asien", correct = TRUE),
answer("Afrika und Ozeanien"),
correct = "Richtig!",
incorrect = "Leider falsch: in Afrika und Asien sehen wir einige sehr große Werte, die weit von den anderen Datenpunkten entfernt sind.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen",
random_answer_order = TRUE
)
)
```
#### Betrachtung von statistischen Kennzahlen
Um gezielte Aussagen zum Datenverhalten machen zu können, helfen uns statistische Maße. Idealerweise interpretiert Ihr statistische Kennzahlen im Zusammenspiel mit weiteren Werten zum Datensatz: wie viele Zeilen (Beobachtungen) tragen zur Statistik bei und wie verteilen sich diese innerhalb der Variablen? Kurz: Wie ist der Datenkontext?
Mit der oben erwähnten Kombination aus `dplyr::group_by()` und `dplyr::summarize()` können wir weitere statistische Kennzahlen auf einen Schlag ermitteln und so folgende Fragen beantworten: Wie stark streuen die beobachteten Werte um den Mittelwert, wie hoch sind Standardabweichung und Varianz? Gibt es Ausreißer?
```{r ueberblick_statistische_kennzahlen, exercise = TRUE}
# Tabelle mit statistischen Kennzahlen
summarize(group_by(community, Kontinent = community$continent),
"Anzahl Länder" = n(),
"Anzahl Plastikstücke" = sum(n_pieces),
"Mittelwert" = mean(n_pieces),
"Standardabweichung" = sd(n_pieces),
"Varianz" = var(n_pieces),
"Median" = median(n_pieces),
"Quartil (25%)" = quantile(n_pieces, .25),
"Quartil (75%)" = quantile(n_pieces, .75),
"Interquartilsabstand (IQR)" = IQR(n_pieces),
"Spannweite" = max(n_pieces) - min(n_pieces))
```
**Aber was bedeuten diese Kennzahlen nochmal genau?**
*Wenn ihr Euch nicht mehr sicher seid, schaut doch nochmal in die Lektion zu den Grundlagen der Statistik. Weiter unten findet Ihr als kleine Hilfestellung auch eine zusammenfassende Abbildung, die die statistischen Werte nochmal gegenüberstellt.*
```{r quiz_standardabweichung}
quiz(caption = NULL,
question("Warum gibt R für die Standardabweichung für Ozeanien (eng. Oceania) 'NA' aus?",
answer("Weil keine Plastikstücke gefunden wurden."),
answer("Weil Ozeanien nur drei Stück Plastik registriert hat."),
answer("Weil nur ein Land in Ozeanien mitgemacht hat.", correct = TRUE),
answer("Kann eigentlich nicht sein. Deutet auf einen Fehler hin."),
correct = "Richtig!",
incorrect = "Leider falsch: In Ozeanien hat nur ein Land mitgemacht, weshalb es zwischen einzelnen Beobachtungen auf Länderebene natürlich keine Standardabweichung geben kann.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen",
random_answer_order = TRUE
)
)
```
Eine Visualisierung, die viele nützliche statistischen Kennzahlen aufzeigt, ist der sogenannte **Boxplot**. Ein Boxplot stellt die Verteilung von Variablen inklusive wichtiger statistischer Eigenschaften dar und fasst die **fünf Punkte der Verteilung (Minimum, 25%-Quartil, Median, 75%-Quartil, Maximum)** zusammen. Aber Vorsicht: "einfache" Boxplots zeigen ausschließlich die statistischen Werte, nicht aber die einzelnen Datenpunkte. Diese sind aber wichtig um zu erkennen, wie die tatsächliche Verteilung ausschaut (bspw. ob sich die "Box" aus 4 oder 400 Werten zusammensetzt), Stichwort: Kontext! In R lassen sich Boxplots und Scatterplots zum Glück gut kombinieren.
Schauen wir uns das mal am Beispiel für Amerika an. Jeder Punkt bezieht sich hierbei auf die Anzahl der Plastikstücke für ein bestimmtes Land aus Amerika. Die statistischen Werte können aus diesem, auf der Seite liegenden, Boxplot ausgelesen werden:
![Boxplot mit statistischen Kennzahlen](https://github.com/CorrelAid/lernplattform/blob/main/abbildungen/04_daten-verstehen/Boxplot_Stat.png?raw=true){#id .class width="100%" height="100%"}
Der **Median** (hier in grün) stellt die **wahre Mitte der Verteilung** dar und ist die Beobachtung, die die Reihe aller enthaltenen Werte, also aller Länder, genau in zwei Hälften teilt: In Amerika haben 7 Länder an **Break Free From Plastic** teilgenommen. Die Anzahl an Plastikstücken des vierten Landes in der imaginären Aufreihung ist der Median.
Die **Spannweite** ist die Differenz aus Minimum und Maximum: 100% oder schlicht "alle" beobachten Werte liegen darin. Allein hat sie allerdings nur eine geringe Aussagekraft. Eine hohe Spannweite kann auf eine erklärbare Varianz hinweisen (beispielsweise, dass in Amerika manche Länder extrem viel gesammelt haben, und andere dafür gar nicht) - aber eine hohe Spannweite kann auch ein Zeichen dafür sein, dass die Daten von anderen Faktoren abhängig sind. Eine geringe Spannweite zeugt davon, dass die Datenpunkte in sich eher homogen sind.
Wie schauen die anderen Kontinente in der **Boxplotdarstellung** aus? Versucht mal die statistischen Kennzahlen für die Kontinente zu beschreiben - und was sich daraus für Schlussfolgerungen ergeben!
*(Hinweis: wie Ihr auch so einen Boxplot erstellen könnt, lernt Ihr in der Lektion zu Datenvisualisierung! Hier geht's ja erstmal darum, zu sehen, wie uns R helfen kann Daten zu lesen, zu kontextualisieren und zu interpretieren.)*
```{r boxplot_plastik}
# Erstellung eines Boxplots mit Scatterplot zur Anzahl gesammelter Plastikstücke pro Kontinent
ggplot(data = community,
aes(x = continent, # x-Achse
y = n_pieces, # y-Achse
fill = continent)) + # Farb-füll-Variable
geom_boxplot(alpha = 0.6) + # Hinzufügen des Boxplots
geom_point(size = 3, # Größe der Punkte
alpha = 0.4, # Transparenz der Punkte
width = 0.1) + # Breite der Punkt-jitter pro Kategorie
coord_cartesian(ylim = c(0, median(community$n_pieces) + 2 * IQR(community$n_pieces))) + # Festlegung der Achsenlänge der y-Achse abhängig von Median und Standardabweichung
labs(
title = "Die Anzahl gesammelter Plastikstücke von 'Break Free From Plastic' ..." ,
subtitle = "... unterscheidet sich nach Kontinent.",
y = "Anzahl gefundener Plastikstücke",
x = "Kontinent",
caption = "Einige Ausreißer wurden zur Lesbarkeit des Graphen ausgeklammert. \nDatenquelle: TidyTuesday und BFFP") + # Festlegung der Achsenbezeichungen, Überschriften und Titel
theme_minimal() + # Festlegung des Layout-Designs
theme(legend.position="none") + # Ausblenden der Legende
scale_fill_manual(values = c("#C9DFE6", "#94C0CD", "#4E97AC", "#366978", "#2E5A67")) # Anwendung der BFFP-Farben
```
```{r quantile}
quiz(caption = NULL,
question("Was trifft nicht auf das 50%-Quantil zu?",
answer("Auch als Median bekannt."),
answer("Nicht so sensibel Ausreißern gegenüber wie das arithmetische Mittel."),
answer("Entspricht stets dem arithmetischem Mittel.", correct = TRUE),
answer("50% aller Werte sind kleiner (gleich) diesem Wert."),
correct = "Richtig!",
incorrect = "Leider falsch: Median und Mittelwert können bei symmetrischen Verteilungen identisch sein, in der Regel unterscheiden sie sich aber.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen",
random_answer_order = TRUE
),
question("Was trifft auf Boxplots zu?",
answer("Wir können daraus den Mittelwert ablesen."),
answer("Alle Beobachtungen liegen innerhalb der 'Box'."),
answer("Sie fassen 5 Punkte einer Verteilung zusammen.", correct = TRUE),
answer("Boxplots kann man auch auf nominalskalierte Variablen wie Kontinente anwenden."),
correct = "Richtig!",
incorrect = "Leider falsch: Boxplot ist nur auf mindestens ordinalskalierte Variablen anwendbar und geben den Median aus. Ausreißer können auch außerhalb der Whisker abgetragen sein.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen",
random_answer_order = TRUE
),
question("Was sind die fünf Punkte einer Verteilung, welche im Boxplot immer dargestellt werden?",
answer("Minimum", correct = TRUE),
answer("25%-Quantil", correct = TRUE),
answer("Mittelwert"),
answer("Median", correct = TRUE),
answer("75%-Quantil", correct = TRUE),
answer("Maximum", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: nur wenn Mittelwert und Median identisch sind, wird auch der Mittelwert erfasst.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen",
random_answer_order = TRUE
)
)
```
---
<details>
<summary><h4>➡ Exkurs: Beziehungen zwischen Variablen</h4></summary>
<br>
<h4><b>Exkurs: Beziehungen zwischen Variablen</b></h4>
Bisher haben wir uns vor allem der **univariaten** (= eine Variable) Verteilung von Plastikstücken gewidmet. Nun möchten wir die Daten weiter nutzen, um **bivariat** (= zwei Variablen) herauszuarbeiten: Welche Faktoren beeinflussen möglicherweise die Unterschiede in der Anzahl an Plastikstücken, die gesammelt wurden? Vielleicht die Zahl an Events? Oder ist es vielleicht eher die Zahl an Freiwilligen im Land?
Für Fragestellungen zu möglichen Korrelationen zwischen zwei Variablen kann uns ein Scatterplot Aufschluss geben. Hier testen wir, ob die Anzahl an Events und/oder die Anzahl an Freiwilligen möglicherweise die Anzahl der gefundenen Plastikstücke beeinflusst. Eine Hilfslinie zeigt die Korrelation dieser beiden Variablen. Vergleichen wir mal...
<div style='float: left; width: 50%;'>
```{r scatter_plot_n_events, fig.width=4,fig.height=3}
# Optional: Erstellung eines Punktediagramms mit der Anzahl gesammelter Plastikstücke pro Kontinent
ggplot(data = community, aes( x = n_events,
y = n_pieces)) +
geom_point(size = 3,
alpha = 0.5,
color = "darkgrey") +
geom_smooth(method = "lm",
colour = "darkred",
alpha = 0.5,
size = 1.5,
se = F) + # Trendlinie hinzufügen, ohne Standardabweichung (se)
coord_cartesian(xlim = c(0, median(community$n_events) + 2 * IQR(community$n_events)),
ylim = c(0, median(community$n_pieces) + 2 * IQR(community$n_pieces))) +
# Festlegung der Achsenlänge der y-Achse abhängig von Median und Interquartilabstand
labs(
title = "Anzahl gesammelter Plastiksstücke bei \n'Break Free From Plastic' ..." ,
subtitle = "... in Abhängigkeit von der Eventanzahl.",
x = "Events",
y = "Anzahl gefundener Plastikstücke",
caption = "Einige Ausreißer wurden zur Lesbarkeit des Graphen ausgeklammert. \nDatenquelle: TidyTuesday und BFFP") + # Festlegung der Achsenbezeichungen, Überschriften und Titel
theme_minimal() # Festlegung des Layout-Designs
```
</div>
<div style='float: right; width: 50%;'>
```{r scatter_plot_n_volunteers, fig.width=4,fig.height=3}
# Optional: Erstellung eines Punktediagramms mit der Anzahl gesammelter Plastikstücke pro Kontinent
ggplot(data = community, aes( x = n_volunteers,
y = n_pieces)) +
geom_point(size = 3,
alpha = 0.5,
color = "darkgrey") +
geom_smooth(method = "lm",
colour = "darkred",
alpha = 0.5,
size = 1.5,
se = F) + # Trendlinie hinzufügen, ohne Standardabweichung (se)
coord_cartesian(xlim = c(0, median(community$n_volunteers) + 2 * IQR(community$n_volunteers)),
ylim = c(0, median(community$n_pieces) + 2 * IQR(community$n_pieces))) +
# Festlegung der Achsenlänge der y-Achse abhängig von Median und Interquartilabstand
labs(
title = "Anzahl gesammelter Plastiksstücke bei \n'Break Free From Plastic' ..." ,
subtitle = "... in Abhängigkeit von der Anzahl der Freiwilligen",
x = "Freiwillige Helfer*innen",
y = "Anzahl gefundener Plastikstücke",
caption = "Einige Ausreißer wurden zur Lesbarkeit des Graphen ausgeklammert. \nDatenquelle: TidyTuesday und BFFP") + # Festlegung der Achsenbezeichungen, Überschriften und Titel
theme_minimal() # Festlegung des Layout-Designs
```
</div>
Wenn wir uns das Punktediagramm ansehen, dass die Anzahl an Plastikstücken der Anzahl an Freiwilligen gegenüberstellt, ist ein etwas deutlicherer Zusammenhang als bei der Anzahl an Events erkenntlich: die Trendlinie zeigt an, dass mit Zunahme von einem Faktor, auch der andere ansteigt. Aber Achtung, denn unser Diagramm sagt nicht mit Sicherheit aus, dass mehr Freiwillige die *Ursache* für mehr gesammelte Plastikstücken sind. Wir beobachten sie lediglich gleichzeitig. Außerdem muss auch hier wieder beachtet werden, dass die Aussage nur auf Länderebene getroffen werden kann: es kann nicht geschlossen werden, dass Events mit mehr Freiwilligen mehr Plastikstücke sammeln. Wir erinnern uns an das Stichwort "Ökologischer Fehlschluss" von oben.
Was nehmen wir aus dieser bivariaten Analyse mit? Die Anzahl an Events korreliert nur sehr schwach positiv mit der Anzahl gesammelter Plastikstücke. Die Anzahl der Freiwilligen korreliert stark positiv mit der Anzahl an gesammelten Plastikstücken. Für diesen Zusammenhang kann es viele Ursachen geben, die wir in unseren Daten überhaupt nicht betrachten, zum Beispiel die Bevölkerungsanzahl oder auch die Zeit, welche einzelene Freiwillige investiert haben.
Welche "Störfaktoren" fallen Euch noch ein?
</details>
---
### **Und jetzt Ihr**
Diese Woche möchten wir die Präsenzzeit nutzen, um die folgenden Übungen zu besprechen. Ergänzt unseren Input gerne zudem mit Euren **Ideen, Fragen, Anregungen oder Kommentaren**. Es ist nicht schlimm, falls diese Woche noch gar nichts (komplexes) klappt, da wir das Gelernte in den nächsten Wochen wiederholen und vertiefen werden.
1. Beantwortet anhand der präsentierten Datenanalyse die vorgestellten **Fragen**: <br>
- Wie viel Plastik wurde insgesamt gesammelt? <br>
- Wie viel Plastik wurde durchschnittlich je Kontinent gesammelt? <br>
- Welche Faktoren beeinflussen möglicherweise diese Unterschiede? <br>
2. Überlegt: Mit welchen Daten und Datenanalysen könnte die Frage "Wie erfolgreich war der Audit?" noch beantwortet werden? Wie könnte eine Visualisierung oder eine zusammenfassende Statistik dabei helfen? Skizziert Eure Fragen gerne schriftlich.
3. Versucht, das zugehörige **R Markdown: 06_daten-verstehen-mit-r-uebung.Rmd** (im [Übungsordner](https://download-directory.github.io/?url=https://github.com/CorrelAid/lernplattform/tree/main/uebungen){target="_blank"} unter 06_daten-verstehen-mir-r) zum Laufen zu bringen und es nachzuvollziehen.
4. In der ersten Einheit haben wir uns bei der Visualisierung vor allem der **n_pieces Variable** gewidmet. Nun blicken wir auf die **n_volunteers**: Wie sehr unterscheiden sich die Freiwilligenzahlen nach Kontinenten? Erstellt in dem heruntergeladenen RMarkdown ein **Punktediagramm** (Scatterplot) mit dem Datensatz `community` für diesen Blickwinkel auf den Erfolg der "Break Free from Plastic" Aktion. Die Graphik soll `n_volunteers`, die **Anzahl der Freiwilligen** auf der y-Achse und die **Kontinente** auf der x-Achse zeigen. *Hinweis: Versucht dazu im RMarkdown in der finalen Version der Graphik die entsprechenden Variablen auszutauschen (und sonst erstmal nichts).*
5. Interpretiert die Graphik. Was könnt Ihr ablesen?
### **Zusätzliche Ressourcen**
- Die kostenlosen Kurse des [Statistischen Bundesamts](https://www.destatis.de/DE/Service/Statistik-Campus/E-Learning/eLearning-statistik.html){target="_blank"}
- Stocker T. C. und Steinke I. (2017): Statistik – Grundlagen und Methodik [verfügbar z.B. hier](https://www.beck-shop.de/stocker-steinke-de-gruyter-studium-statistik/product/32926361){target="_blank"}
- [R for Data Science (engl.)](https://r4ds.had.co.nz/){target="_blank"}
- [Statistics Fundamentals in R](https://app.dataquest.io/course/statistics-fundamentals-r){target="_blank"} auf DataQuest (engl.)
- [Lernvideos](https://www.youtube.com/watch?v=RRIsBFW8ovc){target="_blank"} zur Inferenzstatistik (dt.)