library(tibble)
# Beispiel-Datensatz erzeugen
dat <- tibble(
Alter = c(28, 34, 23, 45)
)
# Durchschnittsalter berechnen
mean(dat$Alter)
[1] 32.5
Martin C. Arnold
Christoph Hanck
10. September 2024
Hinweis
Für eine optimale technische Stabilität empfehlen wir, dieses Online-Lehrbuch auf einem Notebook oder Desktop-Computer zu nutzen. Die interaktiven Komponente, insbesondere die R-Konsole (WebR), sind rechenintensiv und funktionieren auf mobilen Geräten nur eingeschränkt.
Letztes Update: 13. März 2025
Die zunehmende Verfügbarkeit großer Datenmengen und entsprechend komplexer werdende Forschungsfragen erfordern den Einsatz fortschrittlicher statistischer Verfahren in den empirischen Wirtschaftswissenschaften, die über traditionelle Regressionsansätze hinausgehen. Insbesondere Methoden der Kausalanalyse und des maschinellen Lernens haben sich in den letzten Jahren als Teil eines modernen Methoden-Baukastens etabliert und gewinnen auch jenseits des akademischen Bereichs stetig an Bedeutung: Die Fähigkeit mit statistischer Analyse in Produktivumgebungen fundierte Aussagen über Ursache-Wirkungs-Zusammenhänge zu treffen und leistungsfähige Vorhersagemodelle zu erstellen, ist für Absolventen wirtschaftswissenschaftlicher Studiengänge zu einer arbeitsmarktrelevanten Qualifikation in vielen Berufsfeldern geworden.
Dieses Online-Kompendium, Kausalanalyse und Maschinelles Lernen mit R (KMLR), bietet Studierenden eine interaktive Lernplattform, die es erlaubt in quantitativen Lehrveranstaltungen vermittelte Inhalte im Selbststudium zu vertiefen und praktisch anzuwenden. KMLR bietet eine Vielzahl dynamischer Elemente, darunter interaktive Grafiken und Anwendungen mit Illustrationen statistischer Konzepte in Observable, sowie eine mit webR erzeugte R-Konsole.1 Hiermit können Studierende R-Code direkt im Browser ausführen, um statistische Analysen in Fallstudien eigenständig zu replizieren, die Ergebnisse nachzuvollziehen und zu lernen, wie datengetriebene Forschung reproduzierbar dokumentiert werden kann – ein wesentlicher Bestandteil moderner wissenschaftlicher Praxis. Für ein besseres Verständnis quantitativer Konzepte kann der vorgegebene R-Code modifiziert werden (beispielsweise zur Anpassung der Parameter von Schätzfunktionen oder Simulationen), um durch eigenständiges Experimentieren ein tieferes Verständnis der behandelten Methoden zu erlangen.
1 KMLR wird mit dem Publikationssystem Quarto erzeugt.
Als offene Bildungsressource (open educational resource, OER) ermöglichen wir Dozierenden, ihre bestehenden Lehrveranstaltungen durch den Einsatz von KMLR um relevante Themen zu erweitern und ihren Studierenden eine innovative und praxisnahe Lernerfahrung zu bieten.
Dieses Lehrbuch ist in drei Abschnitte gegliedert: Grundlagen, Kausale Inferenz und Machine Learning.
Grundlagen (Kapitel 2–5)
Der erste Teil ist eine Einführung in wesentliche Werkzeuge und Techniken für die statistische Datenanalyse mit R und bildet die methodische Basis für die Durchführung von Studien mit statistischer Programmierung, auf der die weiterführenden Kapitel aufbauen. In Kapitel 2 werden zentrale Funktionen des tidyverse für die Datenmanipulation und Visualisierung vorgestellt. Kapitel 3 betrachtet Komponenten des R-Ökosystems für reproduzierbare Forschung, einschließlich Reporting mit Rmarkdown sowie der Grundlagen interaktiver Web-Anwendungen mit Shiny. Kapitel 4 zeigt die Schätzung grundlegender Regressionstechniken in R und diskutiert generalisierte lineare Modelle. Kapitel 5 führt Simulationstechniken wie Monte-Carlo-Studien und Bootstrap-Verfahren ein.
Kausale Inferenz (Kapitel 6-12)
Der zweite Teil widmet sich etablierten Methoden zur Schätzung kausaler Effekte in wirtschaftswissenschaftlichen und polit-ökonomischen Studien anhand nicht-experimenteller Daten. Kapitel 6 führt in Matching-Verfahren ein, welche die statistische Vergleichbarkeit von Behandlungs- und Kontrollbeobachtungen anstreben, um Confounding bei der Schätzung von Behandlungseffekten zu vermeiden. Das 7. Kapitel behandelt Methoden für Panel-Daten und zeigt u.a. wie in kausale Effekte in Längsschnittstudien durch Kontrolle für unbeobachtbare Heterogenitäten ermittelt werden können. Kapitel 8 stellt IV-Regression vor, ein Ansatz zur Kontrolle für endogene Variablen mithilfe von Instrumentalvariablen. In Kapitel 9 erläutern wir Difference-in-Differences-Ansätze bei denen kausale Effekte durch Veränderungen der Outcome-Variable in der behandelten Gruppe im Vergleich zu einer beobachteten Kontrollgruppe über die Zeit hinweg geschätzt werden. Kapitel 10 zeigt, wie in Event Studies die kausalen Auswirkungen spezifischer Ereignisse auf ökonomische Variablen durch eine Analyse der Veränderungen der Zielvariable nahe des Ereigniszeitpunkts gemessen werden können. Regression Discontinuity Designs, bei denen die Zuweisung zur Behandlung durch das Überschreiten oder Unterschreiten eines festgelegten Schwellenwerts einer Laufvariable bestimmt wird, ermöglichen die Schätzung kausale Interventionseffekte nahe dieses Punktes. Wir behandeln solche Verfahren in Kapitel 11. Kapitel 12 führt Synthetic-Control ein. Diese Methode ermöglicht es, kausale Effekte von Interventionen zu schätzen, indem die zeitliche Entwicklung einer synthetisch generierte Kontrollgruppe als kontrafaktische Schätzung für einen Vergleich zur behandelten Einheit herangezogen wird.
Machine Learning (Kapitel 13–16)
Der dritte Abschnitt behandelt Vorhersagen und Kausalanalysen mit ausgewählten Methoden des Machine Learning. Kapitel 13 stellt regularisierte Regressionsschätzer vor und zeigt unter anderem, wie Variablenselektion mit Lasso in linearen Regressionsmodellen für eine konsistente Schätzung von Behandlungseffekten bei vielen potentiellen Confoundern eingesetzt werden kann. Kapitel 14 erläutert, Support Vector Machines für nicht-lineare Klassifikationsprobleme mit hoch-dimensionalen Datensätzen. Kapitel 15 führt Baum-basierte Methoden wie Entscheidungsbäume, Random Forests und Boosting für Regression und Klassifikation bei nicht-linearen Zusammenhängen ein. Wir zeigen, wie diese Ansätze die Interpretierbarkeit und die Beurteilung der Relevanz von Regressoren erleichtern und diskutieren jüngere Weiterentwicklungen zur Anwendung für kausale Analysen (Causal Trees und Causal Forests). Kapitel 16 schließt mit einer Einführung in neuronale Netzwerke.
Manche Kapitel enthalten Abschnitte, in denen anspruchsvollere mathematische oder statistische Konzepte besprochen werden und/oder fortgeschrittene R-Programmierung verwendet werden. Diese Abschnitte sind mit dem Symbol gekennzeichnet. Studierenden empfehlen wir, diese Abschnitte zunächst zu überspringen und später nach der Bearbeitung der Kerninhalte erneut aufzurufen, um ein tiefergehendes Verständnis aufzubauen. Lehrende können diese Passagen gezielt einsetzen, um besonders interessierten Studierenden vertiefende Inhalte anzubieten.
Wir verwenden folgende Konventionen hinsichtlich der Formatierung und Einbindung von R-Code:
Mit so formatiertem Text
referenzieren wir einzeilige Bestandteile komplexerer Code-Statements, häufig R-Objekte oder Funktionsargumente. Solcher Inline-Code wird häufig im Fließtext verwendet, um nicht ausführbare und ausführbare Code-Anweisungen besser unterscheidbar zu machen und insbesondere letztere zu erläutern.
Grundsätzlich wird ausführbarer mehrzeiliger R-Code in Form von Blöcken dargestellt, die als Code-Chunks bezeichnet werden. In Code-Chunks wird gezeigt, wie die im Fließtext beschriebenen Schritte einer Analyse mit R umgesetzt werden können. Für eine bessere Nachvollziehbarkeit einzelner Bestandteile des Codes werden durch #
gekennzeichnete # Kommentare
verwendet.2
2 Code-Chunks können per Klick auf das Clipboard-Symbol (bei mouse-over) in die Zwischenablage kopiert werden.
Beispiel: Der nächste Code-Chunk definiert das tibble
-Objekt dat
mit vier Beobachtungen der Variable Alter
und berechnet das Durchschnittsalter.
library(tibble)
# Beispiel-Datensatz erzeugen
dat <- tibble(
Alter = c(28, 34, 23, 45)
)
# Durchschnittsalter berechnen
mean(dat$Alter)
[1] 32.5
Das Ergebnis der Berechnung wird direkt unterhalb des Code-Chunks dargestellt. Der gezeigte Output eines Chunks entspricht typischerweise einer solchen Ausgabe in der R-Konsole oder einer Grafik, wie im nächsten Beispiel.
# Alter plotten
plot(dat$Alter)
plot(dat$Alter)
erzeugte Grafik
WebR
Ein Großteil des gezeigten R-Codes wird in WebR-Chunks eingebunden. Ein WebR-Chunk kann am besten als ein interaktiver R-Editor verstanden werden: R-Code kann per Klick auf Run Code zur Auswertung an eine im Hintergrund laufende R-Session übergeben werden.3 Wie bei “normalen” Code-Chunks werden die Ergebnisse direkt unter dem Webr-Chunk angezeigt. Der in einem WebR-Chunk vorgegebene Code kann beliebig angepasst werden. Ein Klick auf Start Over stellt den ursprünglichen Zustand wieder her.
3 Eine Alternative ist die aus RStudio bekannte shortcut CTRL+Enter (MacOS: CMD+Enter).
Der nachfolgende WebR-Chunk macht die Definition von dat
und die Berechnung des Durchschnittsalters unmittelbar im Browser reproduzierbar.
Bei der Interaktion mit WebR-Chunks ist Folgendes zu beachten:
Die WebR-Session wird lokal im Browser ausgeführt. Die Performanz bei komplexeren Berechnungen ist daher von dem verwendeten Browser und der Hardware des genutzten Endgerätes abhängig. Auch hinsichtlich typischer Limitationen von Mobilgeräten empfehlen wir, KMLR auf einem Notebook oder PC aufzurufen.
Die WebR-Chunks werden bei jeder Aktualisierung des Browser-Tabs auf den durch uns (die Autoren) definierten Zustand zurückgesetzt. Das Bedeutet, dass durch den Nutzer geschriebener Code, berechnete Ergebnisse und definierte Objekte bei einer Aktualisierung gelöscht werden.
Innerhalb eines Kapitels sind die WebR-Chunks durch die im Hintergrund laufende R-Session verknüpft und greifen damit auf denselben Speicher für R-Objekte zu. Wir nutzen diese Eigenschaft für prozedurale Analysen, in denen bspw. zunächst ein Datensatz geladen und aufbereitet wird, um im folgenden Chunk ein ökonometrisches Modell zu schätzen.4
4 Sämtliche in diesem Buch verwendete Datensätze sind in diesem Github-Repository verfügbar.
5 Eine Installation weiterer Pakete durch Nutzer*innen ist möglich, sofern diese Pakete in einer WebR-kompatiblen Version vorliegen. Installation und Laden eines Pakets erfolgen mit library(Paketname)
.
Sämtliche für die Analyse nötigen Pakete sind bereits vorinstalliert und müssen nicht durch den Nutzer installiert werden.5
WebR-Chunks und “nicht-interaktiver” R-Code sind nicht miteinander verknüpft: R-Objekte, die wir in normalen Code-Chunks definieren, sind nicht notwendigerweise in WebR-Chunks verfügbar. In WebR-Chunks ausgeführter Code überschreibt keine statischen R-Outputs.
Insbesondere in Fallstudien werden WebR-Chunks oft automatisch beim Laden des Kapitels ausgeführt, um die unmittelbare Nachvollziehbarkeit der Erläuterungen im Fließtext zu gewährleisten. Hierzu werden nach dem Aufrufen eines Kapitels die relevanten R-Pakete heruntergeladen, installiert und entsprechende Berechnungen durchgeführt. Sämtliche WebR-Chunks sind erst nach Abschluss dieses Prozesses interaktiv. Der Status des Installationsprozesses wird unten rechts im Browser-Fenster angezeigt. Bei laufenden Berechnung erscheint in der Kopfzeile aller Chunks ein Indikator.6
6 Laufende Vorbereitungen und Berechnungen werden durch den Indikator angezeigt.
Hier ein Beispiel: Der nächste Code-Chunk simuliert (nach einem Klick auf Run Code) eine für 5 Sekunden laufende Berechnung und die anschließende Ausgabe eines Ergebnisses.
Interaktive Visualisierungen
In theorielastigen Abschnitten des Kompendiums nutzen wir regelmäßig interaktive Grafiken und Applikationen (Apps), um komplexere mathematische Konzepte zu veranschaulichen. Diese meist in Observable-Notebooks implementierten Grafiken können durch Variation der Parameter über verschiedene Input-Elemente (meist Slider) angepasst werden.7 Die nachfolgende Visualisierung ist ein Beispiel aus Kapitel 4.
7 Der Quellcode dieser Grafiken ist unter den eingebetteten Links in Observable-Notebooks verfügbar. Die Notebooks sind ebenfalls OER und können in HTML-Lehrmaterialien eingebettet werden.
Oftmals geben wir detaillierte Erläuterungen zu der voreingestellten Parameterkombination und ergänzen diese um Beispiele zu interessanten Eigenschaften des gezeigten Studienobjekts, die für bestimmte Parameter beobachtet werden können.8 Diese Beispiele sind selten erschöpfend und wir laden Lehrende und Studierende herzlich zum Experimentieren ein!
8 Hier zum Beispiel ist der Schnittpunkt der gezeigten Wahrscheinlichkeitsfunktionen lediglich für \(\beta_0 = 0\) unabhängig von \(\beta_1\).
Um die Qualität und Aktualität dieser Ressource zu verbessern, sind wir auf Hinweise unserer Leser angewiesen. Sollten Ihnen beim Lesen Tippfehler, Unstimmigkeiten oder technische Fehler auffallen, oder möchten Sie uns anderweitige Anregungen zur Verbesserung des Materials mitteilen, freuen wir uns über die Erstellung eines Issues auf GitHub, oder ggf. eines Verbesserungsvorschlags im Quellcode als Pull Request. So tragen Sie dazu bei, das Material für alle Nutzer zu optimieren.9
9 Mit einem Klick auf “ Seite editieren” links unten im Scroll-Menü gelangen Sie direkt zu der entsprechenden Datei im GitHub-Repository.
KMLR und die verlinkten Lehrmaterialien sind im Rahmen des von der Stiftung Innovation in der Hochschullehre geförderten Projekts Kausalanalyse, Maschinelles Lernen und Reproduzierbare Forschung im Förderprogramm Freiraum 2022 entstanden. Wir bedanken uns herzlich für die finanzielle Unterstützung.
Wir danken Ilona Braun herzlich für ihre unverzichtbare Unterstützung in der Projektadministration. Jens Klenke und Lennard Maßmann gilt unser Dank für ihre inspirierenden Anregungen sowie ihre Mithilfe bei der Erprobung und Evaluation der Materialien im Lehrbetrieb. Ein großes Dankeschön geht auch an unsere wissenschaftlichen Hilfskräfte für ihre Unterstützung bei der Überarbeitung der Materialien. Besonders dankbar sind wir unseren Studierenden für ihr wertvolles Feedback.
© 2025 Dieses Werk ist lizenziert unter der Creative Commons Attribution 4.0 International License.
---
format: live-html
engine: knitr
webr:
packages:
- tibble
---
{{< include ./_extensions/r-wasm/live/_knitr.qmd >}}
Letztes Update: {{< meta last-modified >}}
# Einleitung
```{r}
#| echo: false
# Formatierung von gt-Tabellen
tabopts <- function(x) {
fmt_number(x, decimals = 3, drop_trailing_zeros = T) %>%
tab_options(table_body.hlines.color = "white",
column_labels.border.bottom.color = "black",
column_labels.border.top.color = "black",
table_body.border.bottom.color = "black",
column_labels.font.weight = "bold",
table.font.color = "black", table.font.size = 14)
}
```
Die zunehmende Verfügbarkeit großer Datenmengen und entsprechend komplexer werdende Forschungsfragen erfordern den Einsatz fortschrittlicher statistischer Verfahren in den empirischen Wirtschaftswissenschaften, die über traditionelle Regressionsansätze hinausgehen. Insbesondere Methoden der Kausalanalyse und des maschinellen Lernens haben sich in den letzten Jahren als Teil eines modernen Methoden-Baukastens etabliert und gewinnen auch jenseits des akademischen Bereichs stetig an Bedeutung: Die Fähigkeit mit statistischer Analyse in Produktivumgebungen fundierte Aussagen über Ursache-Wirkungs-Zusammenhänge zu treffen und leistungsfähige Vorhersagemodelle zu erstellen, ist für Absolventen wirtschaftswissenschaftlicher Studiengänge zu einer arbeitsmarktrelevanten Qualifikation in vielen Berufsfeldern geworden.
Dieses Online-Kompendium, *Kausalanalyse und Maschinelles Lernen mit R* (KMLR), bietet Studierenden eine interaktive Lernplattform, die es erlaubt in quantitativen Lehrveranstaltungen vermittelte Inhalte im Selbststudium zu vertiefen und praktisch anzuwenden. KMLR bietet eine Vielzahl dynamischer Elemente, darunter interaktive Grafiken und Anwendungen mit Illustrationen statistischer Konzepte in [Observable](https://observablehq.com/), sowie eine mit [webR](https://docs.r-wasm.org/webr) erzeugte R-Konsole.^[KMLR wird mit dem Publikationssystem [Quarto](https://quarto.org/) erzeugt.] Hiermit können Studierende R-Code direkt im Browser ausführen, um statistische Analysen in Fallstudien eigenständig zu replizieren, die Ergebnisse nachzuvollziehen und zu lernen, wie datengetriebene Forschung reproduzierbar dokumentiert werden kann – ein wesentlicher Bestandteil moderner wissenschaftlicher Praxis. Für ein besseres Verständnis quantitativer Konzepte kann der vorgegebene R-Code modifiziert werden (beispielsweise zur Anpassung der Parameter von Schätzfunktionen oder Simulationen), um durch eigenständiges Experimentieren ein tieferes Verständnis der behandelten Methoden zu erlangen.
Als [offene Bildungsressource](https://github.com/mca91/kasa_book) (open educational resource, OER) ermöglichen wir Dozierenden, ihre bestehenden Lehrveranstaltungen durch den Einsatz von KMLR um relevante Themen zu erweitern und ihren Studierenden eine innovative und praxisnahe Lernerfahrung zu bieten.
## Aufbau des Kompendiums
Dieses Lehrbuch ist in drei Abschnitte gegliedert: *Grundlagen*, *Kausale Inferenz* und *Machine Learning*.
**Grundlagen (Kapitel 2–5)**
Der erste Teil ist eine Einführung in wesentliche Werkzeuge und Techniken für die statistische Datenanalyse mit R und bildet die methodische Basis für die Durchführung von Studien mit statistischer Programmierung, auf der die weiterführenden Kapitel aufbauen. In Kapitel 2 werden zentrale Funktionen des *tidyverse* für die Datenmanipulation und Visualisierung vorgestellt. Kapitel 3 betrachtet Komponenten des R-Ökosystems für reproduzierbare Forschung, einschließlich Reporting mit *Rmarkdown* sowie der Grundlagen interaktiver Web-Anwendungen mit *Shiny*. Kapitel 4 zeigt die Schätzung grundlegender Regressionstechniken in R und diskutiert generalisierte lineare Modelle. Kapitel 5 führt Simulationstechniken wie Monte-Carlo-Studien und Bootstrap-Verfahren ein.
**Kausale Inferenz (Kapitel 6-12)**
Der zweite Teil widmet sich etablierten Methoden zur Schätzung kausaler Effekte in wirtschaftswissenschaftlichen und polit-ökonomischen Studien anhand nicht-experimenteller Daten. Kapitel 6 führt in Matching-Verfahren ein, welche die statistische Vergleichbarkeit von Behandlungs- und Kontrollbeobachtungen anstreben, um Confounding bei der Schätzung von Behandlungseffekten zu vermeiden. Das 7. Kapitel behandelt Methoden für Panel-Daten und zeigt u.a. wie in kausale Effekte in Längsschnittstudien durch Kontrolle für unbeobachtbare Heterogenitäten ermittelt werden können. Kapitel 8 stellt *IV-Regression* vor, ein Ansatz zur Kontrolle für endogene Variablen mithilfe von Instrumentalvariablen. In Kapitel 9 erläutern wir *Difference-in-Differences*-Ansätze bei denen kausale Effekte durch Veränderungen der Outcome-Variable in der behandelten Gruppe im Vergleich zu einer beobachteten Kontrollgruppe über die Zeit hinweg geschätzt werden. Kapitel 10 zeigt, wie in *Event Studies* die kausalen Auswirkungen spezifischer Ereignisse auf ökonomische Variablen durch eine Analyse der Veränderungen der Zielvariable nahe des Ereigniszeitpunkts gemessen werden können. *Regression Discontinuity Designs*, bei denen die Zuweisung zur Behandlung durch das Überschreiten oder Unterschreiten eines festgelegten Schwellenwerts einer Laufvariable bestimmt wird, ermöglichen die Schätzung kausale Interventionseffekte nahe dieses Punktes. Wir behandeln solche Verfahren in Kapitel 11. Kapitel 12 führt *Synthetic-Control* ein. Diese Methode ermöglicht es, kausale Effekte von Interventionen zu schätzen, indem die zeitliche Entwicklung einer synthetisch generierte Kontrollgruppe als kontrafaktische Schätzung für einen Vergleich zur behandelten Einheit herangezogen wird.
**Machine Learning (Kapitel 13–16)**
Der dritte Abschnitt behandelt Vorhersagen und Kausalanalysen mit ausgewählten Methoden des *Machine Learning*. Kapitel 13 stellt *regularisierte Regressionsschätzer* vor und zeigt unter anderem, wie Variablenselektion mit *Lasso* in linearen Regressionsmodellen für eine konsistente Schätzung von Behandlungseffekten bei vielen potentiellen Confoundern eingesetzt werden kann. Kapitel 14 erläutert, *Support Vector Machines* für nicht-lineare Klassifikationsprobleme mit hoch-dimensionalen Datensätzen. Kapitel 15 führt *Baum-basierte Methoden* wie *Entscheidungsbäume*, *Random Forests* und *Boosting* für Regression und Klassifikation bei nicht-linearen Zusammenhängen ein. Wir zeigen, wie diese Ansätze die Interpretierbarkeit und die Beurteilung der Relevanz von Regressoren erleichtern und diskutieren jüngere Weiterentwicklungen zur Anwendung für kausale Analysen (*Causal Trees* und *Causal Forests*). Kapitel 16 schließt mit einer Einführung in *neuronale Netzwerke*.
Manche Kapitel enthalten Abschnitte, in denen anspruchsvollere mathematische oder statistische Konzepte besprochen werden und/oder fortgeschrittene R-Programmierung verwendet werden. Diese Abschnitte sind mit dem Symbol {{< fa stairs >}} gekennzeichnet. Studierenden empfehlen wir, diese Abschnitte zunächst zu überspringen und später nach der Bearbeitung der Kerninhalte erneut aufzurufen, um ein tiefergehendes Verständnis aufzubauen. Lehrende können diese Passagen gezielt einsetzen, um besonders interessierten Studierenden vertiefende Inhalte anzubieten.
## Konventionen und Hinweise
Wir verwenden folgende Konventionen hinsichtlich der Formatierung und Einbindung von R-Code:
Mit `so formatiertem Text` referenzieren wir einzeilige Bestandteile komplexerer Code-Statements, häufig R-Objekte oder Funktionsargumente. Solcher *Inline-Code* wird häufig im Fließtext verwendet, um nicht ausführbare und ausführbare Code-Anweisungen besser unterscheidbar zu machen und insbesondere letztere zu erläutern.
Grundsätzlich wird ausführbarer mehrzeiliger R-Code in Form von Blöcken dargestellt, die als *Code-Chunks* bezeichnet werden. In Code-Chunks wird gezeigt, wie die im Fließtext beschriebenen Schritte einer Analyse mit R umgesetzt werden können. Für eine bessere Nachvollziehbarkeit einzelner Bestandteile des Codes werden durch `#` gekennzeichnete `# Kommentare` verwendet.^[Code-Chunks können per Klick auf das Clipboard-Symbol <i class="bi bi-clipboard"></i> (bei mouse-over) in die Zwischenablage kopiert werden.]
Beispiel: Der nächste Code-Chunk definiert das `tibble`-Objekt `dat` mit vier Beobachtungen der Variable `Alter` und berechnet das Durchschnittsalter.
```{r}
library(tibble)
# Beispiel-Datensatz erzeugen
dat <- tibble(
Alter = c(28, 34, 23, 45)
)
# Durchschnittsalter berechnen
mean(dat$Alter)
```
Das Ergebnis der Berechnung wird direkt unterhalb des Code-Chunks dargestellt. Der gezeigte *Output* eines Chunks entspricht typischerweise einer solchen Ausgabe in der R-Konsole oder einer Grafik, wie im nächsten Beispiel.
```{r}
#| fig-cap: "Die mit `plot(dat$Alter)` erzeugte Grafik"
#| label: fig-replotex
# Alter plotten
plot(dat$Alter)
```
**WebR**
Ein Großteil des gezeigten R-Codes wird in WebR-Chunks eingebunden. Ein WebR-Chunk kann am besten als ein interaktiver R-Editor verstanden werden: R-Code kann per Klick auf *Run Code* zur Auswertung an eine im Hintergrund laufende R-Session übergeben werden.^[Eine Alternative ist die aus *RStudio* bekannte shortcut *CTRL+Enter* (MacOS: *CMD+Enter*).] Wie bei "normalen" Code-Chunks werden die Ergebnisse direkt unter dem Webr-Chunk angezeigt. Der in einem WebR-Chunk vorgegebene Code kann beliebig angepasst werden. Ein Klick auf *Start Over* stellt den ursprünglichen Zustand wieder her.
Der nachfolgende WebR-Chunk macht die Definition von `dat` und die Berechnung des Durchschnittsalters unmittelbar im Browser reproduzierbar.
```{webr}
#| autorun: false
#| completion: true
library(tibble)
# Beispiel-Datensatz erzeugen
dat <- tibble(
Alter = c(28, 34, 23, 45)
)
# Durchschnittsalter berechnen
mean(dat$Alter)
```
Bei der Interaktion mit WebR-Chunks ist Folgendes zu beachten:
Die WebR-Session wird lokal im Browser ausgeführt. Die Performanz bei komplexeren Berechnungen ist daher von dem verwendeten Browser und der Hardware des genutzten Endgerätes abhängig. Auch hinsichtlich typischer Limitationen von Mobilgeräten empfehlen wir, KMLR auf einem Notebook oder PC aufzurufen.
Die WebR-Chunks werden bei jeder Aktualisierung des Browser-Tabs auf den durch uns (die Autoren) definierten Zustand zurückgesetzt. Das Bedeutet, dass durch den Nutzer geschriebener Code, berechnete Ergebnisse und definierte Objekte *bei einer Aktualisierung gelöscht werden*.
Innerhalb eines Kapitels sind die WebR-Chunks durch die im Hintergrund laufende R-Session verknüpft und greifen damit auf denselben Speicher für R-Objekte zu. Wir nutzen diese Eigenschaft für prozedurale Analysen, in denen bspw. zunächst ein Datensatz geladen und aufbereitet wird, um im folgenden Chunk ein ökonometrisches Modell zu schätzen.^[Sämtliche in diesem Buch verwendete Datensätze sind in [diesem Github-Repository](https://github.com/mca91/kausal_data) verfügbar.]
Sämtliche für die Analyse nötigen Pakete sind bereits vorinstalliert und müssen *nicht* durch den Nutzer installiert werden.^[Eine Installation weiterer Pakete durch Nutzer*innen ist möglich, sofern diese Pakete in einer WebR-kompatiblen Version vorliegen. Installation und Laden eines Pakets erfolgen mit `library(Paketname)`.]
WebR-Chunks und "nicht-interaktiver" R-Code sind *nicht* miteinander verknüpft: R-Objekte, die wir in normalen Code-Chunks definieren, sind nicht notwendigerweise in WebR-Chunks verfügbar. In WebR-Chunks ausgeführter Code überschreibt keine statischen R-Outputs.
Insbesondere in Fallstudien werden WebR-Chunks oft automatisch beim Laden des Kapitels ausgeführt, um die unmittelbare Nachvollziehbarkeit der Erläuterungen im Fließtext zu gewährleisten. Hierzu werden nach dem Aufrufen eines Kapitels die relevanten R-Pakete heruntergeladen, installiert und entsprechende Berechnungen durchgeführt. Sämtliche WebR-Chunks sind erst nach Abschluss dieses Prozesses interaktiv. Der Status des Installationsprozesses wird unten rechts im Browser-Fenster angezeigt. Bei laufenden Berechnung erscheint in der Kopfzeile aller Chunks ein Indikator.^[Laufende Vorbereitungen und Berechnungen werden durch den Indikator <span class="exercise-editor-eval-indicator spinner-grow spinner-grow-sm" role="status"></span> angezeigt.]
Hier ein Beispiel: Der nächste Code-Chunk simuliert (nach einem Klick auf *Run Code*) eine für 5 Sekunden laufende Berechnung und die anschließende Ausgabe eines Ergebnisses.
```{webr}
#| autorun: false
# Die Laufzeit dieser Zeile beträgt 5 Sekunden
Sys.sleep(time = 5) # 5 Sekunden nichts tun
# Leser*innen begrüßen
cat("Hey, willkommen bei KMLR!")
```
**Interaktive Visualisierungen**
In theorielastigen Abschnitten des Kompendiums nutzen wir regelmäßig interaktive Grafiken und Applikationen (Apps), um komplexere mathematische Konzepte zu veranschaulichen. Diese meist in [Observable](https://observablehq.com/)-Notebooks implementierten Grafiken können durch Variation der Parameter über verschiedene Input-Elemente (meist Slider) angepasst werden.^[Der Quellcode dieser Grafiken ist unter den eingebetteten Links in Observable-Notebooks verfügbar. Die Notebooks sind ebenfalls OER und können in HTML-Lehrmaterialien [eingebettet werden](https://observablehq.com/documentation/embeds/).] Die nachfolgende Visualisierung ist ein Beispiel aus @sec-regression.
<iframe width="100%" height="682" frameborder="0" class="box-shadow" src="https://observablehq.com/embed/@mca91/latent-variable-cdf?cells=plot%2Cviewof+beta0%2Cviewof+beta"></iframe>
Oftmals geben wir detaillierte Erläuterungen zu der voreingestellten Parameterkombination und ergänzen diese um Beispiele zu interessanten Eigenschaften des gezeigten Studienobjekts, die für bestimmte Parameter beobachtet werden können.^[Hier zum Beispiel ist der Schnittpunkt der gezeigten Wahrscheinlichkeitsfunktionen lediglich für $\beta_0 = 0$ unabhängig von $\beta_1$.] Diese Beispiele sind selten erschöpfend und wir laden Lehrende und Studierende herzlich zum Experimentieren ein!
## Verschiedenes und Danksagungen
Um die Qualität und Aktualität dieser Ressource zu verbessern, sind wir auf Hinweise unserer Leser angewiesen. Sollten Ihnen beim Lesen Tippfehler, Unstimmigkeiten oder technische Fehler auffallen, oder möchten Sie uns anderweitige Anregungen zur Verbesserung des Materials mitteilen, freuen wir uns über die Erstellung eines [Issues auf GitHub](https://github.com/mca91/kasa_book/issues), oder ggf. eines Verbesserungsvorschlags im Quellcode als [Pull Request](https://github.com/mca91/kasa_book/pulls). So tragen Sie dazu bei, das Material für alle Nutzer zu optimieren.^[Mit einem Klick auf "<i class="fa-brands fa-github"></i> Seite editieren" links unten im Scroll-Menü gelangen Sie direkt zu der entsprechenden Datei im GitHub-Repository.]
KMLR und die verlinkten Lehrmaterialien sind im Rahmen des von der [*Stiftung Innovation in der Hochschullehre*](https://stiftung-hochschullehre.de) geförderten Projekts *Kausalanalyse, Maschinelles Lernen und Reproduzierbare Forschung* im Förderprogramm [*Freiraum 2022*](https://stiftung-hochschullehre.de/foerderung/freiraum/) entstanden. Wir bedanken uns herzlich für die finanzielle Unterstützung.
Wir danken Ilona Braun herzlich für ihre unverzichtbare Unterstützung in der Projektadministration. Jens Klenke und Lennard Maßmann gilt unser Dank für ihre inspirierenden Anregungen sowie ihre Mithilfe bei der Erprobung und Evaluation der Materialien im Lehrbetrieb. Ein großes Dankeschön geht auch an unsere wissenschaftlichen Hilfskräfte für ihre Unterstützung bei der Überarbeitung der Materialien. Besonders dankbar sind wir unseren Studierenden für ihr wertvolles Feedback.
::: {style="font-size: 0.9em; text-align: center; margin-top: 20px;"}
© `r Sys.Date() |> format("%Y")` Dieses Werk ist lizenziert unter der
[Creative Commons Attribution 4.0 International License](https://creativecommons.org/licenses/by/4.0/).
:::