/
example-complex.qmd
200 lines (152 loc) · 9.96 KB
/
example-complex.qmd
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
# Von komplexeren Daten {#sec-example-complex}
```{r}
#| message: false
#| warning: false
#| echo: false
pacman::p_load(readxl, knitr, kableExtra, tidyverse, magrittr, conflicted, broom,
simstudy, openxlsx,
parameters, performance, gtsummary)
```
*Letzte Änderung am `r format(fs::file_info("example-complex.qmd")$modification_time, '%d. %B %Y um %H:%M:%S')`*
> *"The average teacher explains complexity; the gifted teacher reveals simplicity." --- Robert Breault*
Wir brauchen immer mal wieder etwas komplexere Daten und deshalb habe ich die Datensätze, die häufiger vorkommen, hier einmal gebündelt. Die komplexeren Datensätze werden dann in den Kapiteln zur Regressionsanalyse und Modellierung genutzt. Dafür brauchen wir dann größere Datensätze an denen wir dann auch was erkennen können.
## Von infizierten Ferkeln {#sec-example-pigs}
Im Folgenden schauen wir uns den anonymisierten Datensatz zu einer Ferkelinfektion an. Wir haben verschiedene Gesundheitsparameter an den Ferkeln gemessen und wollen an diesen Rückschließen, ob diese Gesundheitsparameter etwas mit der Infektion zu tun haben. Insgesamt haben wir gut $400$ Ferkel an vier verschiedenen Orten in Niedersachsen gemessen.
```{r}
#| message: false
#| warning: false
#| echo: false
set.seed(20220929)
## data generation
def <- defData(varname = "age", dist = "normal", formula = "60", variance = 20)
def <- defData(def, varname = "sex", formula = "0.4;0.6", dist = "categorical")
def <- defData(def, varname = "location", formula = "0.3;0.2;0.2;0.3",
dist = "categorical")
def <- defData(def, varname = "activity", formula = "10 + 2 * sex", variance = 2)
def <- defData(def, varname = "crp", formula = "20", variance = 2)
def <- defData(def, varname = "frailty", formula = "0.5;0.35;0.15", dist = "categorical")
def <- defData(def, varname = "bloodpressure", formula = "60 - 2 * sex", variance = 10)
def <- defData(def, varname = "weight", formula = "20 - 1 * sex", variance = 2)
def <- defData(def, varname = "creatinin", formula = "5", variance = 2)
def <- defData(def, varname = "infected", formula = "-10 + 0.5 * sex +
0.5 * frailty + 2 * crp + 0.05 * creatinin + 0.2 * bloodpressure + 0.01 * weight", dist = "normal", variance = 10)
pig_tbl <- genData(rpois(1, 400), def) |>
select(-id) |>
mutate(across(where(is.numeric), round, 2),
age = round(age),
sex = factor(sex, labels = c("female", "male")),
location = factor(location, labels = c("north", "northeast", "west", "northwest")),
frailty = factor(frailty, labels = c("robust", "pre-frail", "frail")),
infected = ifelse(infected >= 42, 1, 0))
write.xlsx(pig_tbl, "data/infected_pigs.xlsx", rowNames = FALSE)
```
```{r}
#| echo: false
#| message: false
#| warning: false
#| label: tbl-example-pigs
#| tbl-cap: Auszug aus dem Daten zu den kranken Ferkeln.
pig_tbl <- read_excel("data/infected_pigs.xlsx")
rbind(head(pig_tbl),
rep("...", times = ncol(pig_tbl)),
tail(pig_tbl)) |>
kable(align = "c", "pipe")
```
Auch hier haben wir nur eingeschränkte Informationen zu den erhobenen Variablen. Daher müssen wir schauen, dass die Variablen in etwa Sinn ergeben.
- **age**, das Alter in Lebenstagen der untersuchten Ferkel.
- **sex**, das bestimmte Geschlecht der Ferkel.
- **location**, anonymisierter Ort der Untersuchung. Wir unterscheiden zwischen Norden, Nordosten, West und Nordwest in Niedersachsen.
- **activity**, Minuten an Aktivität pro Stunde. Die Aktivität wurde über eine automatische Bilderkennung bestimmt. Dabei musste die Bewegung ein gewisses Limit übersteigen. Einfach rumgehen hat nicht gereicht um gezählt zu werden.
- **crp**, der CRP-Wert in mg/l aus der Blutprobe. Das Ausmaß des CRP-Anstiegs gibt einen Hinweis auf die Schwere der zugrundeliegenden Krankheit.
- **frailty**, die visuelle Einordnung des Gesundheitszustandes anhand der Beweglichkeit des Ferkels. Nach einem Punkteschema wurden die Ferkel in die drei Gruppen robust, pre-frail und frail eingeteilt.
- **bloodpressure**, gemessener Blutdruck der Ferkel.
- **weight**, das gemessene Gewicht der Ferkel in kg.
- **creatinin**, der Creatinin-Wert aus der Blutprobe. Zu hohe Kreatinin-Werte können auf eine Nierenschwäche, Verletzungen der Muskulatur oder eine Entzündung der Haut und Muskulatur hindeuten.
- **infected**, der Infektionsstatus zum Zeitpunkt der Untersuchung.
Wir nutzen den Datensatz unter anderem in der logistischen Regression in @sec-logistic.
::: callout-tip
## Datei von den infizierten Ferkeln
Du findest die Datei `infected_pigs.xlsx` auf GitHub [jkruppa.github.io/data/](https://github.com/jkruppa/jkruppa.github.io/tree/master/data) als Excel Datei.
:::
## Von langnasigen Hechten {#sec-example-longnose}
In der folgenden Datentabelle wollen wir uns die Anzahl an Hechten in verschiedenen nordamerikanischen Flüßen anschauen. Jede Zeile des Datensatzes steht für einen Fluss. Wir haben dann in jedem Fluss die Anzahl an Hechten gezählt und weitere Flussparameter erhoben. Wir fragen uns, ob wir anhand der Flussparameter eine Aussage über die Anzahl an Hechten in einem Fluss machen können.
::: column-margin
Die Daten zu den langnasigen Hechten stammt von [Salvatore S. Mangiafico - An R Companion for the Handbook of Biological Statistics](https://rcompanion.org/rcompanion/e_05.html).
:::
```{r}
#| echo: false
#| message: false
#| warning: false
#| label: tbl-example-longnose
#| tbl-cap: Auszug aus dem Daten zu den langnasigen Hechten.
longnose_tbl <- read_csv2("data/longnose.csv")
rbind(head(longnose_tbl),
rep("...", times = ncol(longnose_tbl)),
tail(longnose_tbl)) |>
kable(align = "c", "pipe")
```
Wie immer haben wir nicht so viele Informationen über die Daten vorliegen. Einiges können wir aber aus den Namen der Spalten in dem Datensatz ableiten. Wir haben in verschiedenen Flüssen die Anzahl an Hechten gezählt und noch weitere Flussparameter gemessen. Ein wenig müssen wir hier auch unsere eigene Geschichte spinnen.
- **stream**, beschreibt den Fluss, wo die Messung der Anzahl an langnasigen Hechten stattgefunden hat.
- **longnose**, die Anzahl der Hechte, die in einem Flussarm in einer definierten Zeit gezählet wurden.
- **area**, erfasste Oberfläche des Flusses in dem gemessenen Gebiet. Die Fläche wurde über Satelietenbilder bestimmt.
- **do2**, gemessener Partialdruck von Sauerstoiff $O_2$ im Wasser und damit auch der verfügbarer Sauerstoff (engl. *Oxygen-Delivery, DO2*) im Wasser.
- **maxdepth**, die maximale Tiefe des Flusses über mindestens einen Kilometer. Kürze Tiefen wurden nicht berücksichtigt.
- **no3**, die gemessene Nitratkonzentration im Wasser.
- **so4**, die gemessene Schwefelkonzentration im Wasser.
- **temp**, gemessene Temperatur in dem Flussarm zur Zeit der Zählung.
Wir nutzen den Datensatz unter anderem in der Poisson Regression in @sec-poisson.
::: callout-tip
## Datei von den langnasigen Hechten
Du findest die Datei `longnose.csv` auf GitHub [jkruppa.github.io/data/](https://github.com/jkruppa/jkruppa.github.io/tree/master/data) als Csv Datei.
:::
## Von den Kichererbsen in Brandenburg {#sec-example-chickpea}
Im Folgenden schauen wir uns die Daten eines Pilotprojektes zum Anbau von Kichererbsen in Brandenburg an. Wir haben an verschiedenen anonymisierten Bauernhöfen Kichererbsen angebaut und das Trockengewicht als Endpunkt bestimmt. Darüber hinaus haben wir noch andere Umweltparameter erhoben und wollen schauen, welche dieser Parameter einen Einfluss auf das Trockengewicht hat.
```{r}
#| message: false
#| echo: false
set.seed(20220929)
## data generation
def <- defData(varname = "temp", dist = "normal", formula = "25", variance = 5)
def <- defData(def, varname = "rained", formula = "0.3;0.7", dist = "categorical")
def <- defData(def, varname = "location", formula = "0.3;0.5;0.2",
dist = "categorical")
def <- defData(def, varname = "no3", formula = "6", variance = 2)
def <- defData(def, varname = "fe", formula = "3", variance = 1)
def <- defData(def, varname = "sand", formula = "60", variance = "20")
def <- defData(def, varname = "forest", formula = "0.7;0.3", dist = "categorical")
def <- defData(def, varname = "dryweight", formula = "10 + 2 * temp + 1.5 * rained + 1.1 * no3 + 3 * sand - 1.2 * forest", dist = "normal", variance = 30)
chickpea_tbl <- genData(rpois(1, 90), def) |>
select(-id) |>
mutate(across(where(is.numeric), round, 2),
dryweight = dryweight,
rained = factor(rained, labels = c("high", "low")),
location = factor(location, labels = c("north", "northeast", "west")),
forest = factor(forest, labels = c(">1000m", "<1000m")))
write.xlsx(chickpea_tbl, "data/chickpeas.xlsx", rowNames = FALSE)
```
```{r}
#| echo: false
#| message: false
#| warning: false
#| label: tbl-example-chickpea
#| tbl-cap: Auszug aus dem Daten zu den Kichererbsen in Brandenburg.
chickpea_tbl <- read_excel("data/chickpeas.xlsx")
rbind(head(chickpea_tbl),
rep("...", times = ncol(chickpea_tbl)),
tail(chickpea_tbl)) |>
kable(align = "c", "pipe")
```
Es ist ja schon fast Mode, aber auch hier haben wir wenig bis gar keine Informationen zu den erhobenen Variablen. Daher machen wir das Beste aus der Sachlage und überlegen uns was hier passen könnte.
- **temp**, die mittlere Temperatur über die Wachstumsperiode.
- **rained**, erfasste Regenmenge im Vergleich zum 10jähigen Mittel.
- **location**, anonymisierter Ort der Untersuchung.
- **no3**, die gemessene Nitratkonzentration im Boden.
- **so4**, die gemessene Eisenkonzentration im Boden.
- **sand**, der Anteil an Sand im Boden.
- **forest**, der Abstand zum nächsten geschlossenen Waldstück.
- **dryweight**, das Trockengewicht der Kichererbsen gemittelt über eine Hektar.
Wir nutzen den Datensatz unter anderem in der Gaussian Regression in @sec-gaussian.
::: callout-tip
## Datei von den Kichererbsen in Brandenburg
Du findest die Datei `chickpeas.xlsx` auf GitHub [jkruppa.github.io/data/](https://github.com/jkruppa/jkruppa.github.io/tree/master/data) als Excel Datei.
:::