In unserem ersten Beispiel wollen wir uns verschiedene Daten von Hundeflöhen (eng. dog flea) anschauen. Unter anderem sind dies die Sprungweite eines Hundeflohs, die Anzahl an Haaren am rechten Bein eines Hundeflohs, die Boniturnoten auf einer Flohmesse sowie der Infektionsstatus mit Flohschnupfen. Hier nochmal detailliert dargestellt, was wir uns im Folgenden immer wieder anschauen wollen.
Erst einmal die Zahlen, so wie du die Messwerte dann auf einen karierten Zettel aus deinem Collegeblock schreiben würdest. Ich empfehle immer Papier auf dem Feld, Gewächshaus oder Stall. Ein Pad geht da mal schnell kaputt. Dann habe ich zu deinen Notizen noch die mathematischen Schreibweise sowie die Schreibweise in R ergänzt. In R nutze ich auch schon gleich ein Objekt um die Zahlen zu speichern.
Je nachdem was wir messen, nimmt andere Zahlenräume an. Wir bezeichnen unser gemessenes auch gerne als Messwert, Outcome oder Endpunkt. Wir können die Sprungweite eben sehr einfach mit einer Kommazahl messen. Dafür benötigen wir nur ein Lineal. Das geht schlecht, wenn wir messen, ob einer unserer Hundeflöhe nieste und somit Flohschnupfen hat. Ein Lineal hilft uns hier nicht weiter. Was ähnliches haben wir auch bei der Anzahl der Flohhaare auf dem rechten Flohbein vorliegen. Hier zählen wir und können somit keine halben Flohhaare messen.
Wir sagen, folgt einer Verteilung. Die Sprungweite eines Hundeflohs ist normalverteilt, die Anzahl an Flöhen folgt einer Poisson Verteilung, die Boniturnoten sind multinominal/ordinal bzw. kategoriell verteilt. Der Infektionsstatus ist binomial verteilt. Wir werden uns später die Verteilungen anschauen und visualisieren. Das können wir hier aber noch nicht. Wichtig ist, dass du schon mal gehört hast, dass unterschiedlich verteilt ist, je nachdem welche Dinge wir messen. Die Tabelle 5.1 zeigt dir die Darstellung der Daten von oben in einer einzigen Tabelle. Bitte beachte, dass genau eine Zeile für eine Beobachtung, in diesem Fall einem Floh, vorgesehen ist.
Tabelle 5.1— Tabelle von sieben Hundeflöhen mit der Sprunglänge [cm], Anzahl an Haaren am rechten Flohbein, Gewicht der Flöhe, Boniturnote sowie der Infektionsstatus für Flohschnupfen. Die erste Spalte animal gibt an, dass wir es hier mit Hundeflöhe zu tun haben. Die Tabelle ist im Long-Format dargestellt.
animal
jump_length
flea_count
weight
grade
infected
dog
5.7
18
2.1
8
0
dog
8.9
22
2.3
8
1
dog
11.8
17
2.8
6
1
dog
5.6
12
2.4
8
0
dog
9.1
23
1.2
7
1
dog
8.2
18
4.1
7
0
dog
7.6
21
3.2
9
0
Datei für von Flöhen und Hunden
Du findest die Datei flea_dog.xlsx auf GitHub jkruppa.github.io/data/ als Excel oder auch als CSV.
5.2 Von Flöhen auf Hunden und Katzen
Wir wollen jetzt das Beispiel von den Hundeflöhen um eine weitere Spezies erweitern. Wir nehmen noch die Katzen mit dazu und fragen uns, wie sieht es mit der Sprungfähigkeit von Katzenflöhen aus? Konzentrieren wir uns hier einmal auf die Sprungweite. Wir können wie in dem vorherigen Beispiel mit den Hundeflöhen die Sprungweiten [cm] der Katzenflöhe wieder in der gleichen Weise aufschreiben:
Wenn wir jetzt die Sprungweiten der Hundeflöhe mit den Katzenflöhen vergleichen wollen haben wir ein Problem. Beide Zahlenvektoren heißen gleich, nämlich . Wir könnten jeweils in die Indizes noch und schreiben als und und erhalten folgende Vektoren. In der Mathematik würden wir jetzt Indizes vergeben, aber das macht die Sachlage nur begrenzt übersichtlicher.
Durch mehr Spezies werden die Indizes immer länger und unübersichtlicher. Auch das einfach oder zu nennen ist keine Lösung - wir wollen uns vielleicht später nicht nur die Sprungweite zwischen den Hunde- und Katzenflöhen vergleichen, sondern vielleicht auch die Anzahl an Flohhaaren oder den Infektionsstatus. Dann stünden wir wieder vor dem Problem die für die verschiedenen Outcomes zu unterscheiden. Daher erstellen wir uns die Tabelle 5.2. Wir haben jetzt eine Datentabelle vorliegen in der die Sprungweiten von sieben Hunden und sieben Katzen dargestellt sind.
Tabelle 5.2— Sprunglängen [cm] für Hunde- und Katzenflöhe. Die Tabelle ist im Wide-Format dargestellt.
dog
cat
5.7
3.2
8.9
2.2
11.8
5.4
5.6
4.1
9.1
4.3
8.2
7.9
7.6
6.1
Intuitiv ist die obige Tabelle 5.2 übersichtlich und beinhaltet die Informationen die wir wollten. Wir würden sowas auch schnell in Excel bauen. Für sehr kleine Tabellen ist das auch okay, aber wir werden uns später sehr schnell mit komplexeren Fragestellungen beschäftigen und dann funktioniert das alles nicht mehr. Wir haben nämlich das Problem, das wir in dieser Tabelle 5.2 nicht noch weitere Outcomes angeben können. Wir könnten die Anzahl an Flohhaaren auf den Hunde- und Katzenflöhen nicht einfach so in dieser Form darstellen. Als Lösung ändern wir die Tabelle 5.2 in das Long-Format und erhalten die folgende Tabelle 5.3. Jede Beobachtung belegt nun eine Zeile. Dies ist sehr wichtig im Kopf zu behalten, wenn du eigene Daten in z.B. Excel erstellst.
Tabelle 5.3— Tabelle von sieben Hunde- und Katzenflöhen mit der Sprunglänge [cm], Anzahl an Haaren am rechten Flohbein, Gewicht der Flöhe, Boniturnote sowie der Infektionsstatus für Flohschnupfen. Die erste Spalte animal gibt an, dass wir es hier mit Hunde- und Katzenflöhe zu tun haben. Die Tabelle ist im Long-Format dargestellt.
animal
jump_length
flea_count
weight
grade
infected
dog
5.7
18
2.1
8
0
dog
8.9
22
2.3
8
1
dog
11.8
17
2.8
6
1
dog
5.6
12
2.4
8
0
dog
9.1
23
1.2
7
1
dog
8.2
18
4.1
7
0
dog
7.6
21
3.2
9
0
cat
3.2
12
1.1
7
1
cat
2.2
13
2.1
5
0
cat
5.4
11
2.4
7
0
cat
4.1
12
2.1
6
0
cat
4.3
16
1.5
6
1
cat
7.9
9
3.7
6
0
cat
6.1
7
2.9
5
0
Das Datenformat in der obigen Tabelle nennen wir auch tidy (deu. sauber) nach dem R Paket tidyr was dann auch später mit die Basis für unsere Analysen in R sein wird. Wenn ein Datensatz tidy ist, dann erfüllt er folgende Bedingungen.
Jede Variable ist eine Spalte; jede Spalte ist eine Variable.
Jede Beobachtung ist eine Zeile; jede Zeile ist eine Beobachtung.
Jeder Wert ist eine Zelle; jede Zelle ist ein einziger Wert.
Nach diesen Regeln bauen wir dann jeden Datensatz auf, den wir in einem Experiment gemessen haben.
Datei für von Flöhen, Hunden und Katzen
Du findest die Datei flea_dog_cat.xlsx auf GitHub jkruppa.github.io/data/ als Excel oder auch als CSV.
5.3 Von wiederholten Flöhen auf Hunden
Dann brauchen wir noch einen Datensatz für wiederholte Messungen der Sprungweite in [cm]. Das heitß wir haben nur fünf Hundeflöhe und messen die Sprungweite der Hundeflöhe zu zwei Zeitpunkten. Wir messen einmal wie weit die Flöhe springen würden, wenn die Flöhe hungrig sind. Dann messen wir nochmal die gleichen Flöhe, wenn sich die Flöhe satt gegessen haben. Wir erhalten damit folgende Tabelle.
Tabelle 5.4— Tabelle der Sprunglängen [cm] von fünf Hundeflöhen zu zwei Zeitpunkten. Einmal wurde die Sprungweite mit den hungrigen Flöhen und einmal mit den gleichen satten Flöhen bestimmt.
id
hungrig
satt
1
5.2
6.1
2
4.1
5.2
3
3.5
3.9
4
3.2
4.1
5
4.6
5.3
Manchmal sind die Daten schwer zu verstehen, wenn wir nur die Datentabelle vorliegen haben. Deshalb habe ich dir in der folgenden Abbildung nochmal die Daten als Dotplot mit den verbundenen Messungen an den Flöhen dargestellt. Wie du siehst messen wir jeden Floh zweimal.
Abbildung 5.1— Dotplot der Sprungweiten [cm] für Hundeflöhe in zwei verschiedenen Ernährungszuständen gemessen an zwei Zeitpunkten. Die Linien verbinden die Messung an dem gleichen Floh. Die Zahlen stellen die Floh-ID dar.
5.4 Von Flöhen auf Hunden, Katzen und Füchsen
Wir wollen jetzt das Beispiel von den Hunde- und Katzenflöhen um eine weitere Spezies erweitern. Warum machen wir das? Später wollen wir uns anschauen, wie sich verschiedene Gruppen oder Behandlungen voneinander unterscheiden. Wir brauchen also mehr Spezies. Wir nehmen noch die Füchse mit dazu und fragen uns, wie sieht es mit der Sprungfähigkeit und den anderen Messwerten von Hunde-, Katzen- und Fuchsflöhen aus?
Tabelle 5.5— Tabelle von sieben Hunde-, Katzen und Fuchsflöhen mit der Sprunglänge [cm], Anzahl an Haaren am rechten Flohbein, Gewicht der Flöhe, Boniturnote sowie der Infektionsstatus für Flohschnupfen. Die erste Spalte animal gibt an, welche Flohspezies gemessen wurde. Die Tabelle ist im Long-Format dargestellt.
animal
jump_length
flea_count
weight
grade
infected
dog
5.7
18
2.1
8
0
dog
8.9
22
2.3
8
1
dog
11.8
17
2.8
6
1
dog
5.6
12
2.4
8
0
dog
9.1
23
1.2
7
1
dog
8.2
18
4.1
7
0
dog
7.6
21
3.2
9
0
cat
3.2
12
1.1
7
1
cat
2.2
13
2.1
5
0
cat
5.4
11
2.4
7
0
cat
4.1
12
2.1
6
0
cat
4.3
16
1.5
6
1
cat
7.9
9
3.7
6
0
cat
6.1
7
2.9
5
0
fox
7.7
21
3.1
5
1
fox
8.1
25
4.2
4
1
fox
9.1
31
5.1
4
1
fox
9.7
12
3.5
5
1
fox
10.6
28
3.2
4
0
fox
8.6
18
4.6
4
1
fox
10.3
19
3.7
3
0
Der Datensatz in Tabelle 5.5 beginnt schon recht groß zu werden. Deshalb brauchen wir auch die Statistiksoftware R als Werkzeug um große Datensätze auswerten zu können.
Datei für von Flöhen auf Tieren
Du findest die Datei flea_dog_cat_fox.xlsx auf GitHub jkruppa.github.io/data/ als Excel oder auch als CSV.
5.5 Von Flöhen auf Tieren in Habitaten
Wir schauen uns in diesem Beispiel wiederum drei Tierarten an: Hunde, Katzen und Füchse. Auf diesen Tierarten messen wir die Sprunglänge von jeweils zehn Tieren, lassen aber den Rest einmal weg. Im Vergleich zu dem vorherigen Beispiel erweitern wir die Daten um eine Spalte site in der wir vier verschiedene Messorte protokollieren. Es ergibt sich folgende Tabelle 5.6 und die dazugehörige Abbildung 5.2.
Tabelle 5.6— Sprunglängen [cm] für Hunde-, Katzen- und Fuchsflöhe in verschiedenen Habitaten.
animal
site
rep
jump_length
cat
city
1
12.04
cat
city
2
11.98
cat
city
3
16.1
cat
city
4
13.42
cat
city
5
12.37
cat
city
6
16.36
…
…
…
…
fox
field
5
16.38
fox
field
6
14.59
fox
field
7
14.03
fox
field
8
13.63
fox
field
9
14.09
fox
field
10
15.52
Die Datentabelle ist in dieser Form schon fast nicht mehr überschaubar. Daher hilft hier die explorative Datenanalyse weiter. Wir schauen uns daher die Daten einmal als einen Boxplot in Abbildung 5.2 an. Wir sehen hier, dass wir drei Tierarten an vier Orten die Sprungweite in [cm] gemessen haben.
Abbildung 5.2— Boxplot der Sprungweiten [cm] für Hunde-, Katzen- und Fuchsflöhe in verschiedenen Habitaten.
Datei für von Flöhen auf Tieren in Habitaten
Du findest die Datei flea_dog_cat_fox_site.xlsx auf GitHub jkruppa.github.io/data/ als Excel oder auch als CSV.
5.6 Von vielen Flöhen auf Hunden und Katzen
Wir schauen uns in diesem Beispiel wiederum nur zwei Tierarten an: Hunde und Katzen. Auf diesen Tierarten messen wir wieder die Sprunglänge in [cm] von jeweils 400 Tieren. Im Vergleich zu dem vorherigen Beispiel erweitern wir die Daten um eine Spalte jump_weight in [mg] sowie sex [male, female]. Bei Versuch wurde noch in der Variable hatch_time gemessen, wie lange die Flöhe in Stunden zum Schlüpfen brauchen. Es ergibt sich folgende Tabelle 5.7 mit den ersten zehn Beobachtungen und die dazugehörige Abbildung 5.3.
Tabelle 5.7— Sprunglängen [cm], Gewichte [mg], Geschecht [sex] und Schlüpfzeit [h] für Hunde- und Katzenflöhe.
animal
sex
weight
jump_length
flea_count
hatch_time
cat
male
6.02
15.79
5
483.60
cat
male
5.99
18.33
1
82.56
cat
male
8.05
17.58
1
296.73
cat
male
6.71
14.09
3
140.90
cat
male
6.19
18.22
1
162.20
cat
male
8.18
13.49
1
167.47
cat
male
7.46
16.28
1
291.20
cat
male
5.58
14.54
0
112.58
cat
male
6.19
16.36
1
143.97
cat
male
7.53
15.08
1
766.31
Die Datentabelle ist in dieser Form schon fast nicht mehr überschaubar. Daher hilft hier die explorative Datenanalyse weiter. Wir schauen uns daher die Daten einmal als einen Scatterplot in Abbildung 5.3 an. Wir sehen hier, dass wir das mit dem Gewicht [mg] der Flöhe auch die Sprungweite in [cm] steigt.
Abbildung 5.3— Scatterplot der Sprunglängen [cm] und Gewichte [mg] für Hunde- und Katzenflöhe.
Datei für von vielen Flöhen auf Hunden und Katzen
Du findest die Datei flea_dog_cat_length_weight.xlsx auf GitHub jkruppa.github.io/data/ als Excel oder auch als CSV.
5.7 Von der Modellierung von Flöhen
Wenn wir uns später komplexere Modelle anschauen, dann brauchen wir auch etwas komplexere Daten. Im Folgenden habe ich einmal die Flohdaten erweitert. Wir fragen uns hier, ob die Fütterung der Flöhe einen Unterschied auf die Sprungweite hat. Darüber hinaus schauen wir uns auch noch verschiedene Entwicklungsstadien der Flöhe an. Daher haben wir hier ein zweifaktorielles Design vorliegen. Zusätzlich haben wir noch das Gewicht der Flöhe bestimmt und mit wie vielen Flöhen der einzelne Floh geschlüpft ist. Wir haben also folgende Faktoren und Einflussfaktoren vorliegen.
Die Art der Fütterungfeeding mit den Leveln Blut blood mit [50g/ml], Zuckerwasser als Kontrolle sugar_water mit [25g/ml] und Ketchup ketchup mit [1ml] pro Fütterung.
Den Entwicklungsstandstage mit den zwei Leveln für juvenile Flöhe juvenile und ausgewachsenen Flöhen adult.
Das Gewichtweight in [mg] der einzelnen Flöhe zum Zeitpunkt der Messung.
Die Brutgrößehatched des einzelnen Flohes. Damit auch die Anzahl an Geschwistern in dem jeweiligen Wurf aus dem der Floh stammt.
Im Weiteren haben wir unterschiedliche Outcomes gemessen. Zum einen die Sprungweite in [cm], die Exterieurbeurteilung der Flöhe als Bonitur, die Anzahl an Haaren an dem rechten Bein sowie der Infektionsstatus der Flöhe mit Flohschnupfen. Alle vier Messwerte folgen damit dann auch einer anderen Verteilung und haben somit auch einen anderen Zahlenraum.
Die Sprungweitejump_length gemessen in [cm] gesprungen.
Die Anzahl an Haaren am rechten Beincount_leg, als ein weiterer Indikator für Gesundheit und Aerodynamik.
Die Exterieurbeurteilungbonitur auf einer Likert Skala von 1 bis 9, wobei 9 die stärkste Ausprägung und damit den gesundesten Floh darstellt.
Der Infektionsstatus mit Flohschnupfen infected auf einer Skala von infiziert und nicht infiziert .
Es ergibt sich dann die folgende Abbildung der drei Endpunkte für die Sprungweite, Anzahl an Haaren am rechten Bein auf der log-Skala sowie die Exterieurbeurteilung. Der binäre Endpunkt mit dem Infektionsstatus lässt sich immer schwerer in einer Abbilung darstellen. Daher ergänze ich dazu noch die Tabelle 53.2 für eine bessere Übersicht.
Abbildung 5.4— Visualisierung der drei Messwerte Sprungweite, Anzahl an Beinhaaren sowie der Boniturnoten für die Faktoren Ernährungsform und Entwicklungsstand.
Die folgende Tabelle zeigt nochmal die Verteilung der gesunden und kranken Flöhe mit Flohschnupfen aufgeteilt für die Faktoren Ernährungsform sowie Entwicklungsstand. Dazu kommt dann noch das mittlere Gewicht in den beiden Infektionsgruppen sowie die mittlere Anzahl an Geschwistern in dem entsprechenden Wurf. Wir haben eine ungefähre Gleichverteilung von gesunden zu kranken Flöhen.
Tabelle 5.8— Deskriptive Statistik des Infektionsstatus (0 = nein / 1 = ja) mit Flohschnupfen aufgeteilt nach den Faktoren und anderen Variablen.
Characteristic
0, N = 211
1, N = 271
feeding
blood
3 / 21 (14%)
13 / 27 (48%)
ketchup
9 / 21 (43%)
7 / 27 (26%)
sugar_water
9 / 21 (43%)
7 / 27 (26%)
stage
adult
14 / 21 (67%)
10 / 27 (37%)
juvenile
7 / 21 (33%)
17 / 27 (63%)
weight
11.18 (5.88)
9.00 (5.05)
hatched
478.63 (249.99)
455.82 (194.37)
1 n / N (%); Mean (SD)
Nach dem Ende der Laufzeit unseres Experiments haben wir dann auch noch jedem Floh einmal Blut abgenommen und geschaut wie die Laborwerte aussehen. Dazu haben wir dann aber natürlich nur eine Auswahl an sechs Laborwerten genommen. Wir haben folgende sechs Werte aus dem Blut der Flöhe bestimmt.
Den Kalium-Wert in .
Den Magnesium-Wert in .
Das C-reaktive Protein in , wobei ein Wert unter 5 unauffällig ist.
Der Hämoglobin-Wert in .
Die Blutsenkung in .
Die Midi-Chlorianer als Anzahl gemessen. Bei Menschen ist ein Wert von mindestens 5000 notwendig um die Macht zu spüren.
Es ergeben sich dann folgende Boxplots in der Abbildung 5.5. Auf den ersten Blick sehen die kontinuierlichen Laborwerte alle sehr unterschiedlich aus. Den noch magst du einwenden, dass eventuell die Laborwerte doch irgendwie zusammenhängen könnten. So könnte man annehmen, dass eventuell auch hohe Kaliumwerte mit hohen Magnesiumwerten einhergehen. Solche Korrelationen werden wir uns dann in den folgenden Kapiteln anschauen.
Abbildung 5.5— Boxplots der sechs Laborwerte für die beoden Faktoren Ernährungsform der Flöhe sowie deren Entwicklungsstand.
Dann haben wir einmal einen komplexen Datensatz, den wir uns dann detaillierter anschauen können. Du findest dann den Datensatz auch auf GitHub, wie du im folgenden Kasten siehst.
Cadiergues, M.-C., Joubert, C., & Franc, M. (2000). A comparison of jump performances of the dog flea, Ctenocephalides canis (Curtis, 1826) and the cat flea, Ctenocephalides felis felis (Bouché, 1835). Veterinary parasitology, 92(3), 239–241.
```{r echo = FALSE}pacman::p_load(tidyverse, readxl, knitr, kableExtra, openxlsx, see, patchwork, gtsummary, ggmosaic, ggpubr)```# Von Flöhen auf Tieren*Letzte Änderung am `r format(fs::file_info("example-fleas-dogs-cats.qmd")$modification_time, '%d. %B %Y um %H:%M:%S')`*> *"I am fond of pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." --- Winston S. Churchill*Die ursprüngliche Idee zu den Sprungweiten der Hunde- und Katzenflöhe stammt von @cadiergues2000comparison aus der entsprechenden Veröffentlichung [A comparison of jump performances of the dog flea, Ctenocephalides canis (Curtis, 1826) and the cat flea, Ctenocephalides felis felis (Bouché, 1835)](https://www.sciencedirect.com/science/article/pii/S0304401700002740). Wir bauen uns hier kleinere Datensätze mit einer ähnlichen Fragestellung nach, die wir dann in den folgenden Kapiteln immer wieder nutzen. Dabei begleiten uns die Hunde- und Katzenflöhe eher in den Einführungskapiteln. Später schauen wir uns dann noch komplexere Datensätze mit einem klaren Anwendungsbezug an.## Von Flöhen auf Hunden {#sec-example-1}{{< video https://youtu.be/XTRUg0iBodo >}}```{r echo = FALSE}y_jump_dog <- c(5.7, 8.9, 11.8, 5.6, 9.1, 8.2, 7.6)y_count_dog <- c(18, 22, 17, 12, 23, 18, 21)y_weight_dog <- c(2.1, 2.3, 2.8, 2.4, 1.2, 4.1, 3.2)y_grade_dog <- c(8, 8, 6, 8, 7, 7, 9)y_infected_dog <- c(0, 1, 1, 0, 1, 0, 0)```In unserem ersten Beispiel wollen wir uns verschiedene Daten von Hundeflöhen (eng. *dog flea*) anschauen. Unter anderem sind dies die Sprungweite eines Hundeflohs, die Anzahl an Haaren am rechten Bein eines Hundeflohs, die Boniturnoten auf einer Flohmesse sowie der Infektionsstatus mit Flohschnupfen. Hier nochmal detailliert dargestellt, was wir uns im Folgenden immer wieder anschauen wollen.Erst einmal die Zahlen, so wie du die Messwerte dann auf einen karierten Zettel aus deinem Collegeblock schreiben würdest. Ich empfehle immer Papier auf dem Feld, Gewächshaus oder Stall. Ein Pad geht da mal schnell kaputt. Dann habe ich zu deinen Notizen noch die mathematischen Schreibweise sowie die Schreibweise in R ergänzt. In R nutze ich auch schon gleich [ein Objekt](#sec-basics) um die Zahlen zu speichern.**Sprungweite** in \[cm\] von verschiedenen Flöhen:::: panel-tabset## Handschriftlich{fig-align="center" width="100%"}## Mathematik$$Y_{jump} = \{`r str_c(y_jump_dog, collapse = ", ")`\}.$$## R (built-in)```{r}y_jump_dog <-c(5.7, 8.9, 11.8, 5.6, 9.1, 8.2, 7.6)y_jump_dog```:::**Anzahl an Haaren am rechten Bein** von verschiedenen Flöhen:::: panel-tabset## Handschriftlich{fig-align="center" width="100%"}## Mathematik$$Y_{count} = \{`r str_c(y_count_dog, collapse = ", ")`\}.$$## R (built-in)```{r}y_count_dog <-c(18, 22, 17, 12, 23, 18, 21)y_count_dog```:::**Gewicht des gesprungenen Flohes** in \[mg\] von verschiedenen Flöhen:::: panel-tabset## Handschriftlich{fig-align="center" width="100%"}## Mathematik$$Y_{weight} = \{`r str_c(y_weight_dog, collapse = ", ")`\}.$$## R (built-in)```{r}y_weight_dog <-c(2.1, 2.3, 2.8, 2.4, 1.2, 4.1, 3.2)y_weight_dog```:::**Boniturnoten** \[1 = schwächste bis 9 = stärkste Ausprägung\] von verschiedenen Flöhen:::: panel-tabset## Handschriftlich{fig-align="center" width="100%"}## Mathematik$$Y_{grade} = \{`r str_c(y_grade_dog, collapse = ", ")`\}.$$## R (built-in)```{r}y_grade_dog <-c(8, 8, 6, 8, 7, 7, 9)y_grade_dog```:::**Infektionstatus** \[0 = gesund, 1 = infiziert\] mit Flohschnupfen von verschiedenen Flöhen:::: panel-tabset## Handschriftlich{fig-align="center" width="100%"}## Mathematik$$Y_{infected} = \{`r str_c(y_infected_dog, collapse = ", ")`\}.$$## R (built-in)```{r}y_infected_dog <-c(0, 1, 1, 0, 1, 0, 0)y_infected_dog```:::Je nachdem was wir messen, nimmt $Y$ andere Zahlenräume an. Wir bezeichnen unser gemessenes $Y$ auch gerne als Messwert, Outcome oder Endpunkt. Wir können die Sprungweite eben sehr einfach mit einer Kommazahl messen. Dafür benötigen wir nur ein Lineal. Das geht schlecht, wenn wir messen, ob einer unserer Hundeflöhe nieste und somit Flohschnupfen hat. Ein Lineal hilft uns hier nicht weiter. Was ähnliches haben wir auch bei der Anzahl der Flohhaare auf dem rechten Flohbein vorliegen. Hier zählen wir und können somit keine halben Flohhaare messen.Wir sagen, $Y$ folgt einer Verteilung. Die Sprungweite eines Hundeflohs ist normalverteilt, die Anzahl an Flöhen folgt einer Poisson Verteilung, die Boniturnoten sind multinominal/ordinal bzw. kategoriell verteilt. Der Infektionsstatus ist binomial verteilt. Wir werden uns später die Verteilungen anschauen und visualisieren. Das können wir hier aber noch nicht. Wichtig ist, dass du schon mal gehört hast, dass $Y$ unterschiedlich *verteilt* ist, je nachdem welche Dinge wir messen. Die @tbl-dog-long zeigt dir die Darstellung der Daten von oben in einer einzigen Tabelle. Bitte beachte, dass genau eine Zeile für eine Beobachtung, in diesem Fall einem Floh, vorgesehen ist.```{r echo = FALSE}#| label: tbl-dog-long#| tbl-cap: "Tabelle von sieben Hundeflöhen mit der Sprunglänge [cm], Anzahl an Haaren am rechten Flohbein, Gewicht der Flöhe, Boniturnote sowie der Infektionsstatus für Flohschnupfen. Die erste Spalte `animal` gibt an, dass wir es hier mit Hundeflöhe zu tun haben. Die Tabelle ist im Long-Format dargestellt."data_tbl <- tibble(dog = y_jump_dog) |> gather(animal, jump_length) |> mutate(flea_count = c(y_count_dog), weight = c(y_weight_dog), grade = c(y_grade_dog), infected = c(y_infected_dog))write.csv2(data_tbl, "data/flea_dog.csv", row.names = FALSE)write.xlsx(data_tbl, "data/flea_dog.xlsx", rowNames = FALSE)data_tbl |> kable(align = "c", "pipe")```::: callout-tip## Datei für von Flöhen und HundenDu findest die Datei `flea_dog.xlsx` auf GitHub [jkruppa.github.io/data/](https://github.com/jkruppa/jkruppa.github.io/tree/master/data) als Excel oder auch als CSV.:::## Von Flöhen auf Hunden und Katzen {#sec-example-2}{{< video https://youtu.be/4X9lHO_hRCU >}}```{r echo = FALSE}y_jump_dog <- c(5.7, 8.9, 11.8, 5.6, 9.1, 8.2, 7.6)y_count_dog <- c(18, 22, 17, 12, 23, 18, 21)y_weight_dog <- c(2.1, 2.3, 2.8, 2.4, 1.2, 4.1, 3.2)y_grade_dog <- c(8, 8, 6, 8, 7, 7, 9)y_infected_dog <- c(0, 1, 1, 0, 1, 0, 0)y_jump_cat <- c(3.2, 2.2, 5.4, 4.1, 4.3, 7.9, 6.1)y_count_cat <- c(12, 13, 11, 12, 16, 9, 7)y_weight_cat <- c(1.1, 2.1, 2.4, 2.1, 1.5, 3.7, 2.9)y_grade_cat <- c(7, 5, 7, 6, 6, 6, 5)y_infected_cat <- c(1, 0, 0, 0, 1, 0, 0)```Wir wollen jetzt das Beispiel von den Hundeflöhen um eine weitere Spezies erweitern. Wir nehmen noch die Katzen mit dazu und fragen uns, wie sieht es mit der Sprungfähigkeit von Katzenflöhen aus? Konzentrieren wir uns hier einmal auf die Sprungweite. Wir können wie in dem vorherigen Beispiel mit den Hundeflöhen die Sprungweiten \[cm\] der Katzenflöhe wieder in der gleichen Weise aufschreiben:$$Y_{jump} = \{`r str_c(y_jump_cat, collapse = ", ")`\}.$$Wenn wir jetzt die Sprungweiten der Hundeflöhe mit den Katzenflöhen vergleichen wollen haben wir ein Problem. Beide Zahlenvektoren heißen gleich, nämlich $Y_{jump}$. Wir könnten jeweils in die Indizes noch $dog$ und $cat$ schreiben als $Y_{jump,\, dog}$ und $Y_{jump,\, cat}$ und erhalten folgende Vektoren. In der Mathematik würden wir jetzt Indizes vergeben, aber das macht die Sachlage nur begrenzt übersichtlicher.$$\begin{align}Y_{jump,\, dog} &= \{`r str_c(y_jump_dog, collapse = ", ")`\}\\Y_{jump,\, cat} &= \{`r str_c(y_jump_cat, collapse = ", ")`\}\end{align}$$Durch mehr Spezies werden die Indizes immer länger und unübersichtlicher. Auch das $Y$ einfach $Y_{dog}$ oder $Y_{cat}$ zu nennen ist keine Lösung - wir wollen uns vielleicht später nicht nur die Sprungweite zwischen den Hunde- und Katzenflöhen vergleichen, sondern vielleicht auch die Anzahl an Flohhaaren oder den Infektionsstatus. Dann stünden wir wieder vor dem Problem die $Y$ für die verschiedenen Outcomes zu unterscheiden. Daher erstellen wir uns die @tbl-dog-cat-wide. Wir haben jetzt eine *Daten*tabelle vorliegen in der die Sprungweiten von sieben Hunden und sieben Katzen dargestellt sind.```{r echo = FALSE}#| label: tbl-dog-cat-wide#| tbl-cap: "Sprunglängen [cm] für Hunde- und Katzenflöhe. Die Tabelle ist im Wide-Format dargestellt."tibble(dog = y_jump_dog, cat = y_jump_cat) |> kable(align = "c", "pipe")```Intuitiv ist die obige @tbl-dog-cat-wide übersichtlich und beinhaltet die Informationen die wir wollten. Wir würden sowas auch schnell in Excel bauen. Für sehr kleine Tabellen ist das auch okay, aber wir werden uns später sehr schnell mit komplexeren Fragestellungen beschäftigen und dann funktioniert das alles nicht mehr. Wir haben nämlich das Problem, das wir in dieser @tbl-dog-cat-wide nicht noch weitere Outcomes angeben können. Wir könnten die *Anzahl an Flohhaaren* auf den Hunde- und Katzenflöhen nicht einfach so in dieser Form darstellen. Als Lösung ändern wir die @tbl-dog-cat-wide in das Long-Format und erhalten die folgende @tbl-dog-cat-long. Jede Beobachtung belegt nun eine Zeile. Dies ist sehr wichtig im Kopf zu behalten, wenn du eigene Daten in z.B. Excel erstellst.```{r }#| echo: false#| label: tbl-dog-cat-long#| tbl-cap: "Tabelle von sieben Hunde- und Katzenflöhen mit der Sprunglänge [cm], Anzahl an Haaren am rechten Flohbein, Gewicht der Flöhe, Boniturnote sowie der Infektionsstatus für Flohschnupfen. Die erste Spalte `animal` gibt an, dass wir es hier mit Hunde- und Katzenflöhe zu tun haben. Die Tabelle ist im Long-Format dargestellt."data_tbl <- tibble(dog = y_jump_dog, cat = y_jump_cat) |> gather(animal, jump_length) |> mutate(flea_count = c(y_count_dog, y_count_cat), weight = c(y_weight_dog, y_weight_cat), grade = c(y_grade_dog, y_grade_cat), infected = c(y_infected_dog, y_infected_cat))write.csv2(data_tbl, "data/flea_dog_cat.csv", row.names = FALSE)write.xlsx(data_tbl, "data/flea_dog_cat.xlsx", rowNames = FALSE)data_tbl |> kable(align = "c", "pipe")```Das Datenformat in der obigen Tabelle nennen wir auch *tidy* (deu. *sauber*) nach dem [R Paket `tidyr`](https://tidyr.tidyverse.org/) was dann auch später mit die Basis für unsere Analysen in R sein wird. Wenn ein Datensatz *tidy* ist, dann erfüllt er folgende Bedingungen.1. Jede Variable ist eine Spalte; jede Spalte ist eine Variable.2. Jede Beobachtung ist eine Zeile; jede Zeile ist eine Beobachtung.3. Jeder Wert ist eine Zelle; jede Zelle ist ein einziger Wert.Nach diesen Regeln bauen wir dann jeden Datensatz auf, den wir in einem Experiment gemessen haben.::: callout-tip## Datei für von Flöhen, Hunden und KatzenDu findest die Datei `flea_dog_cat.xlsx` auf GitHub [jkruppa.github.io/data/](https://github.com/jkruppa/jkruppa.github.io/tree/master/data) als Excel oder auch als CSV.:::## Von wiederholten Flöhen auf HundenDann brauchen wir noch einen Datensatz für wiederholte Messungen der Sprungweite in \[cm\]. Das heitß wir haben nur fünf Hundeflöhe und messen die Sprungweite der Hundeflöhe zu zwei Zeitpunkten. Wir messen einmal wie weit die Flöhe springen würden, wenn die Flöhe hungrig sind. Dann messen wir nochmal die gleichen Flöhe, wenn sich die Flöhe satt gegessen haben. Wir erhalten damit folgende Tabelle.```{r}#| message: false#| echo: false#| tbl-cap: "Tabelle der Sprunglängen [cm] von fünf Hundeflöhen zu zwei Zeitpunkten. Einmal wurde die Sprungweite mit den hungrigen Flöhen und einmal mit den gleichen satten Flöhen bestimmt."#| label: tbl-data-ttest-pairedpaired_raw_tbl <-tibble(id =1:5,hungrig =c(5.2, 4.1, 3.5, 3.2, 4.6),satt =c(6.1, 5.2, 3.9, 4.1, 5.3)) paired_raw_tbl |>kable(align ="c", "pipe")write.xlsx(paired_raw_tbl, "data/flea_dog_cat_repeated.xlsx", rowNames =FALSE)```Manchmal sind die Daten schwer zu verstehen, wenn wir nur die Datentabelle vorliegen haben. Deshalb habe ich dir in der folgenden Abbildung nochmal die Daten als Dotplot mit den verbundenen Messungen an den Flöhen dargestellt. Wie du siehst messen wir jeden Floh zweimal.```{r}#| message: false#| echo: false#| fig-align: center#| fig-height: 4#| fig-width: 6#| fig-cap: "Dotplot der Sprungweiten [cm] für Hundeflöhe in zwei verschiedenen Ernährungszuständen gemessen an zwei Zeitpunkten. Die Linien verbinden die Messung an dem gleichen Floh. Die Zahlen stellen die Floh-ID dar."#| label: fig-example-pairedpaired_raw_tbl |>pivot_longer(cols = hungrig:satt,values_to ="jump_length",names_to ="trt") |>ggplot(aes(trt, jump_length, fill = trt)) +theme_minimal() +geom_line(aes(group = id), color ="gray50") +geom_point(shape =21, size =4) +scale_fill_okabeito() +geom_text(aes(label = id), position =position_nudge(x =0.04, y =-0.05),size =3) +theme(legend.position ="none") +labs(x ="Ernährungszustand",y ="Sprungweite in [cm]")```## Von Flöhen auf Hunden, Katzen und Füchsen {#sec-example-3}```{r }#| echo: false#| message: falsedata_tbl <- read_csv2("data/flea_dog_cat.csv")```Wir wollen jetzt das Beispiel von den Hunde- und Katzenflöhen um eine *weitere* Spezies erweitern. Warum machen wir das? Später wollen wir uns anschauen, wie sich verschiedene Gruppen oder Behandlungen voneinander unterscheiden. Wir brauchen also mehr Spezies. Wir nehmen noch die Füchse mit dazu und fragen uns, wie sieht es mit der Sprungfähigkeit und den anderen Messwerten von Hunde-, Katzen- und Fuchsflöhen aus?```{r echo = FALSE}#| label: tbl-dog-cat-fox#| tbl-cap: "Tabelle von sieben Hunde-, Katzen und Fuchsflöhen mit der Sprunglänge [cm], Anzahl an Haaren am rechten Flohbein, Gewicht der Flöhe, Boniturnote sowie der Infektionsstatus für Flohschnupfen. Die erste Spalte `animal` gibt an, welche Flohspezies gemessen wurde. Die Tabelle ist im Long-Format dargestellt."y_jump_fox <- c(7.7, 8.1, 9.1, 9.7, 10.6, 8.6, 10.3)y_grade_fox <- c(5, 4, 4, 5, 4, 4, 3)y_count_fox <- c(21, 25, 31, 12, 28, 18, 19)y_weight_fox <- c(3.1, 4.2, 5.1, 3.5, 3.2, 4.6, 3.7)y_infected_fox <- c(1, 1, 1, 1, 0, 1, 0)data_tbl <- rbind(data_tbl, tibble(fox = y_jump_fox) |> gather(animal, jump_length) |> mutate(flea_count = c(y_count_fox), weight = c(y_weight_fox), grade = c(y_grade_fox), infected = c(y_infected_fox)))write.csv2(data_tbl, "data/flea_dog_cat_fox.csv", row.names = FALSE)write.xlsx(data_tbl, "data/flea_dog_cat_fox.xlsx", rowNames = FALSE)data_tbl |> kable(align = "c", "pipe")```Der Datensatz in @tbl-dog-cat-fox beginnt schon recht groß zu werden. Deshalb brauchen wir auch die Statistiksoftware R als Werkzeug um große Datensätze auswerten zu können.::: callout-tip## Datei für von Flöhen auf TierenDu findest die Datei `flea_dog_cat_fox.xlsx` auf GitHub [jkruppa.github.io/data/](https://github.com/jkruppa/jkruppa.github.io/tree/master/data) als Excel oder auch als CSV.:::## Von Flöhen auf Tieren in Habitaten {#sec-example-4}Wir schauen uns in diesem Beispiel wiederum drei Tierarten an: Hunde, Katzen und Füchse. Auf diesen Tierarten messen wir die Sprunglänge von jeweils zehn Tieren, lassen aber den Rest einmal weg. Im Vergleich zu dem vorherigen Beispiel erweitern wir die Daten um eine Spalte `site` in der wir vier verschiedene Messorte protokollieren. Es ergibt sich folgende @tbl-example-4 und die dazugehörige @fig-example-4.```{r }#| message: false#| echo: falseset.seed(20220812)data_tbl <- expand_grid(animal = 1:3, site = 1:4, rep = 1:10) |> mutate(jump_length = round(8 + 5 * animal + 2.5 * site - 1.5 * animal * site + rnorm(n(), 0, 2), 2), animal = factor(animal, labels = c("cat", "dog", "fox")), site = factor(site, labels = c("city", "smalltown", "village", "field")))write.csv2(data_tbl, "data/flea_dog_cat_fox_site.csv", row.names = FALSE)write.xlsx(data_tbl, "data/flea_dog_cat_fox_site.xlsx", rowNames = FALSE)``````{r}#| message: false#| echo: false#| tbl-cap: "Sprunglängen [cm] für Hunde-, Katzen- und Fuchsflöhe in verschiedenen Habitaten."#| label: tbl-example-4data_raw_tbl <- data_tbl |>mutate(animal =as.character(animal),site =as.character(site))rbind(head(data_raw_tbl),rep("...", times =ncol(data_raw_tbl)),tail(data_raw_tbl)) |>kable(align ="c", "pipe")```Die Datentabelle ist in dieser Form schon fast nicht mehr überschaubar. Daher hilft hier die explorative Datenanalyse weiter. Wir schauen uns daher die Daten einmal als einen Boxplot in @fig-example-4 an. Wir sehen hier, dass wir drei Tierarten an vier Orten die Sprungweite in \[cm\] gemessen haben.```{r}#| message: false#| echo: false#| fig-align: center#| fig-height: 4#| fig-width: 6#| fig-cap: "Boxplot der Sprungweiten [cm] für Hunde-, Katzen- und Fuchsflöhe in verschiedenen Habitaten."#| label: fig-example-4ggplot(data_tbl, aes(animal, jump_length, fill = site)) +geom_boxplot() +labs(x ="Tierart", y ="Sprungweite [cm]", fill ="Messort") +theme_minimal() +scale_fill_okabeito()```::: callout-tip## Datei für von Flöhen auf Tieren in HabitatenDu findest die Datei `flea_dog_cat_fox_site.xlsx` auf GitHub [jkruppa.github.io/data/](https://github.com/jkruppa/jkruppa.github.io/tree/master/data) als Excel oder auch als CSV.:::## Von vielen Flöhen auf Hunden und Katzen {#sec-example-5}Wir schauen uns in diesem Beispiel wiederum nur zwei Tierarten an: Hunde und Katzen. Auf diesen Tierarten messen wir wieder die Sprunglänge in \[cm\] von jeweils 400 Tieren. Im Vergleich zu dem vorherigen Beispiel erweitern wir die Daten um eine Spalte `jump_weight` in \[mg\] sowie `sex`\[male, female\]. Bei Versuch wurde noch in der Variable `hatch_time` gemessen, wie lange die Flöhe in Stunden zum Schlüpfen brauchen. Es ergibt sich folgende @tbl-example-5 mit den ersten zehn Beobachtungen und die dazugehörige @fig-example-5.```{r }#| message: false#| echo: falseset.seed(20220812)data_tbl <- expand_grid(animal = 1:3, sex = 1:2, rep = 1:100) |> mutate(weight = round(5 + 2 * sex + rnorm(n(), 0, 1), 2), jump_length = round(8 + 2.5 * animal + 5 * sex + rnorm(n(), 0, 2), 2), animal = factor(animal, labels = c("cat", "dog", "fox")), sex = factor(sex, labels = c("male", "female")), flea_count = rpois(n(), 2), hatch_time = round(rlnorm(n(), 5, 1), 2)) |> select(-rep)write.csv2(data_tbl, "data/flea_dog_cat_length_weight.csv", row.names = FALSE)write.xlsx(data_tbl, "data/flea_dog_cat_length_weight.xlsx", rowNames = FALSE)``````{r}#| message: false#| echo: false#| tbl-cap: "Sprunglängen [cm], Gewichte [mg], Geschecht [sex] und Schlüpfzeit [h] für Hunde- und Katzenflöhe."#| label: tbl-example-5data_tbl |>head(10) |>kable(align ="c", "pipe")```Die Datentabelle ist in dieser Form schon fast nicht mehr überschaubar. Daher hilft hier die explorative Datenanalyse weiter. Wir schauen uns daher die Daten einmal als einen Scatterplot in @fig-example-5 an. Wir sehen hier, dass wir das mit dem Gewicht \[mg\] der Flöhe auch die Sprungweite in \[cm\] steigt.```{r}#| message: false#| echo: false#| fig-align: center#| fig-height: 4#| fig-width: 6#| fig-cap: "Scatterplot der Sprunglängen [cm] und Gewichte [mg] für Hunde- und Katzenflöhe."#| label: fig-example-5ggplot(data_tbl, aes(weight, jump_length)) +geom_point() +labs(x ="Gewicht [mg]", y ="Sprungweite [cm]") +theme_minimal() ```::: callout-tip## Datei für von vielen Flöhen auf Hunden und KatzenDu findest die Datei `flea_dog_cat_length_weight.xlsx` auf GitHub [jkruppa.github.io/data/](https://github.com/jkruppa/jkruppa.github.io/tree/master/data) als Excel oder auch als CSV.:::## Von der Modellierung von Flöhen```{r}#| message: false#| warning: false#| echo: falseflea_model_tbl <-read_excel("data/fleas_model_data_backup.xlsx") |>mutate(norm_bonitur = (bonitur -min(bonitur))/(max(bonitur) -min(bonitur)) +0.001,bin_bonitur =cut(norm_bonitur, breaks =seq(0, 1.005, length.out =10),labels =1:9),bonitur =as_factor(bin_bonitur),norm_infected = (infected -min(infected))/(max(infected) -min(infected)) +0.001,bin_infected =cut(norm_infected, breaks =c(0, 0.55, 1.005)),infected =factor(bin_infected, labels =0:1)) |>select(.id, feeding, stage, weight, hatched, jump_length, count_leg, bonitur, infected) |>mutate_if(is.numeric, round, 2) ```Wenn wir uns später komplexere Modelle anschauen, dann brauchen wir auch etwas komplexere Daten. Im Folgenden habe ich einmal die Flohdaten erweitert. Wir fragen uns hier, ob die Fütterung der Flöhe einen Unterschied auf die Sprungweite hat. Darüber hinaus schauen wir uns auch noch verschiedene Entwicklungsstadien der Flöhe an. Daher haben wir hier ein zweifaktorielles Design vorliegen. Zusätzlich haben wir noch das Gewicht der Flöhe bestimmt und mit wie vielen Flöhen der einzelne Floh geschlüpft ist. Wir haben also folgende Faktoren und Einflussfaktoren vorliegen.- Die **Art der Fütterung** `feeding` mit den Leveln Blut `blood` mit \[50g/ml\], Zuckerwasser als Kontrolle `sugar_water` mit \[25g/ml\] und Ketchup `ketchup` mit \[1ml\] pro Fütterung.- Den **Entwicklungsstand** `stage` mit den zwei Leveln für juvenile Flöhe `juvenile` und ausgewachsenen Flöhen `adult`.- Das **Gewicht** `weight` in \[mg\] der einzelnen Flöhe zum Zeitpunkt der Messung.- Die **Brutgröße** `hatched` des einzelnen Flohes. Damit auch die Anzahl an Geschwistern in dem jeweiligen Wurf aus dem der Floh stammt.Im Weiteren haben wir unterschiedliche Outcomes $y$ gemessen. Zum einen die Sprungweite in \[cm\], die Exterieurbeurteilung der Flöhe als Bonitur, die Anzahl an Haaren an dem rechten Bein sowie der Infektionsstatus der Flöhe mit Flohschnupfen. Alle vier Messwerte folgen damit dann auch einer anderen Verteilung und haben somit auch einen anderen Zahlenraum.- Die **Sprungweite** `jump_length` gemessen in \[cm\] gesprungen.- Die **Anzahl an Haaren am rechten Bein** `count_leg`, als ein weiterer Indikator für Gesundheit und Aerodynamik.- Die **Exterieurbeurteilung** `bonitur` auf einer Likert Skala von 1 bis 9, wobei 9 die stärkste Ausprägung und damit den gesundesten Floh darstellt.- Der **Infektionsstatus** mit Flohschnupfen `infected` auf einer Skala von infiziert $(ja/1)$ und nicht infiziert $(nein/0)$.Es ergibt sich dann die folgende Abbildung der drei Endpunkte für die Sprungweite, Anzahl an Haaren am rechten Bein auf der log-Skala sowie die Exterieurbeurteilung. Der binäre Endpunkt mit dem Infektionsstatus lässt sich immer schwerer in einer Abbilung darstellen. Daher ergänze ich dazu noch die @tbl-infected-model-fleas für eine bessere Übersicht.```{r}#| message: false#| echo: false#| fig-align: center#| fig-height: 5#| fig-width: 10#| fig-cap: "Visualisierung der drei Messwerte Sprungweite, Anzahl an Beinhaaren sowie der Boniturnoten für die Faktoren Ernährungsform und Entwicklungsstand."#| label: fig-example-6p1 <-ggplot(flea_model_tbl, aes(x = feeding, y = jump_length, fill = stage)) +theme_minimal() +geom_boxplot() +scale_fill_okabeito() +theme(legend.position ="top") +labs(x ="Ernährungsform", y ="Sprungweite in [cm]",fill ="") +scale_x_discrete(guide =guide_axis(n.dodge=2))p2 <-ggplot(flea_model_tbl, aes(x = feeding, y =log(count_leg), fill = stage)) +theme_minimal() +geom_boxplot() +scale_fill_okabeito() +theme(legend.position ="top") +labs(x ="Ernährungsform", y ="Anzahl Beinhaare [log]",fill ="") +scale_x_discrete(guide =guide_axis(n.dodge=2))p3 <-ggplot(flea_model_tbl, aes(x = feeding, y = bonitur, fill = stage)) +theme_minimal() +geom_dotplot(binaxis ="y", stackdir ="center") +facet_wrap(~stage) +scale_fill_okabeito() +theme(legend.position ="none") +labs(x ="Ernährungsform", y ="Boniturnoten",fill ="") +scale_x_discrete(guide =guide_axis(n.dodge=2))p1 + p2 + p3 +plot_layout(ncol =3, widths =c(1.25, 1.25, 2)) +plot_annotation(tag_levels ='A', tag_prefix ='(', tag_suffix =')') &theme(plot.tag =element_text(size =16, face ="bold"))```Die folgende Tabelle zeigt nochmal die Verteilung der gesunden und kranken Flöhe mit Flohschnupfen aufgeteilt für die Faktoren Ernährungsform sowie Entwicklungsstand. Dazu kommt dann noch das mittlere Gewicht in den beiden Infektionsgruppen sowie die mittlere Anzahl an Geschwistern in dem entsprechenden Wurf. Wir haben eine ungefähre Gleichverteilung von gesunden zu kranken Flöhen.```{r}#| echo: false#| message: false#| warning: false#| label: tbl-infected-model-fleas#| tbl-cap: "Deskriptive Statistik des Infektionsstatus (0 = nein / 1 = ja) mit Flohschnupfen aufgeteilt nach den Faktoren und anderen Variablen."flea_model_tbl |>select(infected, feeding, stage, weight, hatched) |>tbl_summary(by = infected,statistic =list(all_continuous() ~"{mean} ({sd})",all_categorical() ~"{n} / {N} ({p}%)" ),digits =all_continuous() ~2,#label = count_color ~ "Anzahl Farben",missing_text ="(Missing)" )```Nach dem Ende der Laufzeit unseres Experiments haben wir dann auch noch jedem Floh einmal Blut abgenommen und geschaut wie die Laborwerte aussehen. Dazu haben wir dann aber natürlich nur eine Auswahl an sechs Laborwerten genommen. Wir haben folgende sechs Werte aus dem Blut der Flöhe bestimmt.- Den **Kalium**-Wert in $mmol/l$.- Den **Magnesium**-Wert in $mmol/l$.- Das **C-reaktive Protein** in $mg/l$, wobei ein Wert unter 5 unauffällig ist.- Der **Hämoglobin**-Wert in $mg/l$.- Die **Blutsenkung** in $mm$.- Die **Midi-Chlorianer** als Anzahl gemessen. Bei Menschen ist ein Wert von mindestens 5000 notwendig um die Macht zu spüren.Es ergeben sich dann folgende Boxplots in der @fig-example-7. Auf den ersten Blick sehen die kontinuierlichen Laborwerte alle sehr unterschiedlich aus. Den noch magst du einwenden, dass eventuell die Laborwerte doch irgendwie zusammenhängen könnten. So könnte man annehmen, dass eventuell auch hohe Kaliumwerte mit hohen Magnesiumwerten einhergehen. Solche Korrelationen werden wir uns dann in den folgenden Kapiteln anschauen.```{r}#| message: false#| warning: false#| echo: falselibrary(mvtnorm)set.seed(20220812)sigma <-matrix(c(40, 4, 3, 1, 2, 1,4, 4, 3, 2, 3, 0, 3, 3, 4, 3, 4, 0,1, 2, 3, 40, 1, 0,2, 3, 4, 1, 4, 5,1, 0, 0, 0, 5, 4), ncol=6, byrow =TRUE)lab_tbl <-rbind(rmvnorm(n =8, mean =c(40, 20, 10, 110, 50, 3), sigma = sigma),rmvnorm(n =8, mean =c(30, 10, 5, 120, 60, 3), sigma = sigma),rmvnorm(n =8, mean =c(20, 20, 5, 120, 20, 15), sigma = sigma),rmvnorm(n =8, mean =c(40, 10, 10, 140, 20, 4), sigma = sigma),rmvnorm(n =8, mean =c(20, 20, 15, 100, 15, 5), sigma = sigma),rmvnorm(n =8, mean =c(30, 20, 15, 80, 15, 20), sigma = sigma)) |>as_tibble() |>set_names(c("K", "Mg", "CRP", "Hb", "BSG", "M")) |>mutate(M =abs(M) *1000) |>round(2)``````{r}#| message: false#| warning: false#| echo: falsecbind(flea_model_tbl, lab_tbl) |>select(.id, feeding, stage, weight, hatched, K:BSG, everything()) |>write.xlsx("data/fleas_model_data.xlsx")``````{r}#| message: false#| echo: false#| fig-align: center#| fig-height: 10.5#| fig-width: 7#| fig-cap: "Boxplots der sechs Laborwerte für die beoden Faktoren Ernährungsform der Flöhe sowie deren Entwicklungsstand."#| label: fig-example-7p1 <-cbind(flea_model_tbl, lab_tbl) |>ggplot(aes(y = K, x = feeding, fill = stage)) +theme_minimal() +geom_boxplot() +scale_fill_okabeito() +theme(legend.position ="top") +labs(x ="Ernährungsform", y ="Kalium",fill ="") p2 <-cbind(flea_model_tbl, lab_tbl) |>ggplot(aes(y = Mg, x = feeding, fill = stage)) +theme_minimal() +geom_boxplot() +scale_fill_okabeito() +theme(legend.position ="top") +labs(x ="Ernährungsform", y ="Magnesium",fill ="") p3 <-cbind(flea_model_tbl, lab_tbl) |>ggplot(aes(y = CRP, x = feeding, fill = stage)) +theme_minimal() +geom_boxplot() +scale_fill_okabeito() +theme(legend.position ="top") +labs(x ="Ernährungsform", y ="C-reaktive Protein",fill ="") p4 <-cbind(flea_model_tbl, lab_tbl) |>ggplot(aes(y = Hb, x = feeding, fill = stage)) +theme_minimal() +geom_boxplot() +scale_fill_okabeito() +theme(legend.position ="top") +labs(x ="Ernährungsform", y ="Hämoglobin",fill ="") p5 <-cbind(flea_model_tbl, lab_tbl) |>ggplot(aes(y = BSG, x = feeding, fill = stage)) +theme_minimal() +geom_boxplot() +scale_fill_okabeito() +theme(legend.position ="top") +labs(x ="Ernährungsform", y ="Blutsenkung",fill ="") p6 <-cbind(flea_model_tbl, lab_tbl) |>ggplot(aes(y = M, x = feeding, fill = stage)) +theme_minimal() +geom_boxplot() +scale_fill_okabeito() +theme(legend.position ="top") +labs(x ="Ernährungsform", y ="Midi-Chlorianer",fill ="") p1 + p2 + p3 + p4 + p5 + p6 +plot_layout(ncol =2) +plot_annotation(tag_levels ='A', tag_prefix ='(', tag_suffix =')') &theme(plot.tag =element_text(size =16, face ="bold"))```Dann haben wir einmal einen komplexen Datensatz, den wir uns dann detaillierter anschauen können. Du findest dann den Datensatz auch auf GitHub, wie du im folgenden Kasten siehst.::: callout-tip## Datei für die Modellierung von FlöhenDu findest die Datei `fleas_model_data.xlsx` auf GitHub [jkruppa.github.io/data/](https://github.com/jkruppa/jkruppa.github.io/tree/master/data) als Excel.:::## Referenzen {.unnumbered}