| mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
| Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
| Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 |
2 Quarto und reproduzierbare Wissenschaft
2.1 Worum es geht
Wissenschaftliche Arbeit ist nur dann Wissenschaft, wenn andere sie nachvollziehen können. Wer eine Analyse veröffentlicht, sollte den Weg von den Daten zum Ergebnis vollständig offenlegen — ohne dass Leser:innen Zwischenschritte rekonstruieren oder Tabellen aus dem Output-Fenster nachformatieren müssen.
Quarto ist das Werkzeug, das diesen Anspruch praktisch einlöst. Es verbindet R-Code und Schriftbericht in einem einzigen Dokument: Du schreibst deine Hausarbeit, deinen Seminarbeitrag oder deine Bachelorarbeit zusammen mit dem Code, der die Zahlen produziert. Quarto rendert daraus HTML, PDF oder Word. Änderst du die Daten oder eine Methodenentscheidung, läuft das gesamte Dokument beim nächsten Render-Lauf frisch durch — Zahlen, Tabellen und Grafiken sind automatisch aktuell.
Dieses Kapitel führt dich von deinem ersten .qmd-Dokument bis zu einem reproduzierbaren Projekt nach den Standards offener Wissenschaft. Das Buch, das du gerade liest, ist selbst mit Quarto gebaut — du findest also überall in diesen Seiten das, was hier erklärt wird.
Forschungsjournal: Wo stehst du in deiner Mini-Studie? Du hast in Kapitel 1 die IDE aufgesetzt. Jetzt lernst du das Format kennen, in dem du am Ende deine Befunde zur Islamfeindlichkeit publizieren wirst — als reproduzierbarer Bericht, der Code, Tabellen und Grafiken in einem Dokument verbindet. Wenn du ab Kapitel 9 Coefficient-Plots und Regressionstabellen produzierst, möchtest du sie in einem Quarto-Dokument zusammenführen — nicht in Word kopieren.
Was du nach diesem Kapitel kannst
- Den Unterschied zwischen R-Skript, R Markdown und Quarto erklären.
- Ein
.qmd-Dokument anlegen, rendern und in HTML/PDF/Word exportieren. - Code-Chunks mit YAML-Optionen steuern (
echo,eval,fig-cap, …). - Inline-R-Code für reproduzierbare Zahlen im Fließtext nutzen.
- Tabellen und Grafiken mit Beschriftungen und Referenzen einbinden.
- Literatur über BibTeX und Zotero zitieren.
- Open-Science-Prinzipien (Reproduzierbarkeit, FAIR, OSF, Pre-Registration) auf dein Projekt anwenden.
- Ein Projekt sauber strukturieren (
data/,R/,output/) und mit Git versionieren.
2.2 Warum Quarto? — vom Skript zum Bericht
Wenn du in SPSS arbeitest, kennst du den Ablauf: Du klickst durch die Menüs, der Output erscheint in einem separaten Fenster, und du kopierst Tabellen und Grafiken nach Word, wo du sie noch einmal formatierst. Wenn dir später auffällt, dass du eine Variable falsch rekodiert hast, beginnt der ganze Prozess von vorn.
In Quarto trennst du nicht mehr zwischen Analyse und Bericht. Beides lebt im selben Dokument:
| SPSS-Workflow | Quarto-Workflow | |
|---|---|---|
| Wo wird gerechnet? | SPSS-Output-Fenster | Code-Chunk im .qmd
|
| Wo wird geschrieben? | Word | Lauftext im .qmd
|
| Wie kommen Tabellen rein? | Word (kopieren, manuell formatieren) | Quarto (automatisch beim Render) |
| Was passiert bei Datenänderung? | Alles neu kopieren | Render-Knopf — fertig |
| Wie reproduziert das jemand anderes? | Hoffen, dass die Klick-Reihenfolge dokumentiert ist |
.qmd plus Daten → identisches Ergebnis |
Quarto ist der Nachfolger von R Markdown. R Markdown war R-zentriert; Quarto ist mehrsprachig (R, Python, Julia, Observable) und vereinheitlicht die Konfiguration. Für unsere Zwecke benutzen wir Quarto mit R — alles, was du aus R-Markdown-Tutorials kennst, läuft fast unverändert in Quarto weiter.
Hintergrund: R Markdown, Quarto, knitr. Unter der Haube nutzt Quarto weiterhin knitr, die R-Engine, die Code-Chunks ausführt und in Markdown einbettet. Was Quarto neu macht, ist die Schicht darüber: ein einheitliches YAML-Format, eine konsistente Output-Architektur und Unterstützung für Bücher (wie dieses hier), Webseiten, Folien und Dashboards. Die meisten Beispiele aus R-Markdown-Tutorials funktionieren in Quarto identisch.
2.3 Dein erstes .qmd
In RStudio: File → New File → Quarto Document. Im Dialog gibst du Titel und Autor an, wählst HTML als Format und drückst Create. RStudio öffnet ein Beispiel-Dokument, das du mit dem Render-Knopf (oder cmd/strg + shift + K) sofort in HTML übersetzen kannst.
Ein minimales .qmd hat genau drei Bestandteile:
---
title: "Mein erster Bericht"
author: "Anna Schmidt"
format: html
---
## Einleitung
In diesem Bericht analysiere ich den ALLBUS 2023.
```{r}
mean(c(1, 2, 3, 4, 5))
```Du erkennst:
-
YAML-Header zwischen
----Linien — Metadaten und Format-Konfiguration. -
Markdown-Lauftext — Überschriften mit
#, Fettdruck mit**…**, Listen mit-. -
Code-Chunks in dreifachen Backticks mit
{r}— werden beim Rendern ausgeführt, ihr Output landet direkt im Bericht.
Das Ergebnis (gerendert) zeigt deinen Text, die Code-Zeile und deren Ausgabe (3) — alles in einer fertigen HTML-Datei. Genau dieser Workflow trägt dich von der Hausarbeit bis zur Dissertation.
2.4 YAML-Header: das Steuerpult
Der YAML-Header steuert das Verhalten deines Dokuments. Die wichtigsten Felder:
---
title: "Islamfeindlichkeit in Deutschland 2023"
subtitle: "Eine ALLBUS-basierte Analyse"
author:
- "Anna Schmidt"
- "Boris Müller"
date: today
date-format: "DD.MM.YYYY"
format:
html:
toc: true
toc-depth: 3
number-sections: true
code-tools: false
pdf:
documentclass: article
geometry: margin=2.5cm
docx: default
bibliography: literatur.bib
csl: apa.csl
execute:
echo: true
warning: false
message: false
lang: de
---Was die Felder tun:
-
formatlegt die Ausgabe fest. Mehrere Formate gleichzeitig sind erlaubt — Quarto produziert dann alle in einem Render-Lauf. -
tocschaltet das Inhaltsverzeichnis ein,number-sectionsnummeriert Abschnitte automatisch. -
bibliographyverweist auf eine BibTeX-Datei (siehe Kapitel 2.8). -
cslwählt den Zitationsstil — APA, Chicago, DGPs-konform usw. -
executesetzt Default-Optionen für alle Code-Chunks:echo: truezeigt den Code,warning: false/message: falseblendet R-Meldungen aus.
Vorsicht: YAML-Einrückung. YAML ist leerzeichensensitiv. Untergeordnete Felder werden mit zwei Leerzeichen eingerückt — Tabulatoren oder unregelmäßige Einrückung führen zu Render-Fehlern. Wenn ein Quarto-Render mit „yaml parsing error” abbricht, schaue zuerst auf die Einrückung.
2.5 Code-Chunks im Detail
Ein Code-Chunk hat zwei Teile: eine Header-Zeile mit Optionen und einen Code-Body.
```{r mein-chunk, echo=TRUE, warning=FALSE, fig.width=6}
mean(mtcars$mpg)
```Die wichtigsten Optionen:
| Option | Wirkung |
|---|---|
echo |
Code sichtbar? (TRUE zeigt, FALSE blendet aus) |
eval |
Code ausführen? (FALSE zeigt Code, ohne ihn auszuführen) |
include |
Code-Output ins Dokument? (FALSE versteckt beides, aber führt aus) |
warning, message
|
Warnungen/Meldungen anzeigen? |
fig-cap |
Bildunterschrift für Grafiken |
fig-width, fig-height
|
Größe der Grafik in Zoll |
fig-align |
"left", "center", "right"
|
Chunk-Labels (wie mein-chunk oben) müssen pro Dokument eindeutig sein. Sie dienen als Cache-Schlüssel und als Anker für Grafik-Referenzen.
Seit Quarto setzt sich der YAML-Stil für Chunk-Optionen durch — eleganter als die Header-Notation:
```{r mein-chunk}
#| echo: true
#| warning: false
#| fig-cap: "Verteilung der Lebenszufriedenheit"
mean(mtcars$mpg)
```Beide Schreibweisen sind erlaubt. In diesem Buch nutzen wir aus Lesbarkeitsgründen weiterhin die Header-Notation; in modernen Quarto-Beispielen im Web wirst du häufiger den #|-Stil sehen.
2.5.1 Setup-Chunk
Am Anfang jedes Dokuments steht typischerweise ein Setup-Chunk, der Pakete lädt und Defaults setzt — versteckt vor den Leser:innen mit include=FALSE:
```{r setup, include=FALSE}
library(tidyverse)
library(mariposa)
allbus <- read_spss("ALLBUS2023.sav")
```Alle nachfolgenden Chunks erben den geladenen Zustand. Das ist der Grund, warum du in den Kapiteln dieses Buchs tidyverse und mariposa nicht in jedem Chunk neu lädst — der Setup-Chunk oben hat schon alles bereitgestellt.
2.6 Inline-R-Code: Zahlen im Fließtext
Manchmal willst du nicht eine ganze Tabelle einbinden, sondern eine Zahl direkt im Satz nennen — den Stichprobenumfang, einen Mittelwert, einen p-Wert. Quarto erlaubt das über Inline-R-Code mit Backticks und einem vorangestellten r:
Die Stichprobe enthält 32 Fahrzeuge.
Der durchschnittliche Verbrauch liegt bei 20.1 mpg.Beim Rendern wird daraus:
Die Stichprobe enthält 32 Fahrzeuge. Der durchschnittliche Verbrauch liegt bei 20.1 mpg.
Inline-Code ist eines der wichtigsten Werkzeuge für reproduzierbare Berichte: Du nennst keine Zahl manuell, sondern lässt sie aus den Daten berechnen. Filterst du später anders oder spielst eine neue Datenwelle ein, sind alle Zahlen im Bericht beim nächsten Render automatisch aktuell — und keine bleibt versehentlich auf einem alten Wert stehen.
Tipp: round() nicht vergessen. R gibt Zahlen mit voller Maschinengenauigkeit aus (23.847395). Für den Fließtext rundest du auf so viele Nachkommastellen, wie es die Lesbarkeit verlangt — meist eine oder zwei.
2.7 Tabellen und Grafiken
2.7.1 Tabellen mit kable() und gt
Eine einfache Tabelle erzeugst du mit knitr::kable():
Für anspruchsvollere Formatierung (Spalten-Gruppen, bedingte Färbung, Stil-Themes) bietet das Paket gt einen tidyverse-nahen Tabellenbau:
kable() reicht für die meisten Hausarbeiten; gt lohnt sich, wenn die Tabelle das Endprodukt ist.
2.7.2 Grafiken
Jedes ggplot2-Objekt, das ein Chunk zurückgibt, landet als Grafik im Bericht. Mit Chunk-Optionen steuerst du Beschriftung und Größe:
```{r fig-mpg, fig.width=6, fig.height=4, fig-cap="Verbrauch nach Zylinderzahl"}
ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
geom_boxplot()
```Die fig-cap-Option erscheint als Bildunterschrift; bei number-sections: true wird die Grafik automatisch als „Abbildung 1.1” o. ä. nummeriert. Mit einem Chunk-Label wie fig-mpg kannst du im Fließtext per @fig-mpg darauf verweisen.
2.8 Literaturverweise mit BibTeX und Zotero
Quarto integriert Zitationen direkt in den Fließtext. Du brauchst zwei Dinge: eine BibTeX-Datei mit deinen Quellen und einen Verweis im YAML-Header.
1. BibTeX-Datei literatur.bib im Projektordner:
@article{Goodman2016,
author = {Goodman, Steven N. and Fanelli, Daniele and Ioannidis, John P. A.},
title = {What does research reproducibility mean?},
journal = {Science Translational Medicine},
year = {2016},
volume = {8},
number = {341},
pages = {341ps12}
}
@book{Wickham2023,
author = {Wickham, Hadley and Grolemund, Garrett},
title = {R for Data Science},
edition = {2},
year = {2023},
publisher = {O'Reilly}
}2. YAML-Header verweist auf die Datei:
bibliography: literatur.bib
csl: apa.csl # optional: Zitationsstil3. Zitieren im Text mit @key:
Wie @Goodman2016 zeigt, lässt sich Reproduzierbarkeit unterschiedlich definieren.
Für eine ausführliche Behandlung siehe auch [@Wickham2023].Quarto formatiert die Zitationen automatisch und hängt am Ende eine Literaturliste an. Wenn du sie an einer bestimmten Stelle willst, setze einfach ## Literatur ans Ende — Quarto füllt darunter.
Zotero-Integration. Die meisten Studierenden verwalten ihre Quellen in Zotero. Mit dem Plugin Better BibTeX for Zotero exportierst du deine Sammlung als .bib-Datei und hältst sie automatisch synchron. Im Quarto Visual Editor in RStudio kannst du außerdem über Insert → Citation Zotero-Quellen direkt nachschlagen.
2.9 Open Science: Reproduzierbarkeit als Standard
Quarto ist nicht nur Komfort — es ist die technische Grundlage einer Forschungspraxis, die sich seit etwa 2015 als Open Science etabliert hat. Drei Konzepte solltest du kennen.
2.9.1 Reproduzierbarkeit vs. Replizierbarkeit
Goodman, Fanelli & Ioannidis (2016) unterscheiden zwei Begriffe, die im Alltag gerne verwechselt werden:
- Reproduzierbar = gleicher Code + gleiche Daten → gleiches Ergebnis. Das ist die technische Mindestanforderung. Quarto liefert sie dir geschenkt.
- Replizierbar = gleiche Methode + neue Daten → ähnliches Ergebnis. Das ist die wissenschaftliche Frage — kann jemand anderes deinen Befund mit einer neuen Stichprobe bestätigen?
Reproduzierbarkeit ist Voraussetzung für Replizierbarkeit, aber nicht umgekehrt. Eine Studie kann perfekt reproduzierbar sein und trotzdem ein Ein-mal-Ergebnis (gerne mit p = .04) bleiben.
2.9.2 FAIR-Prinzipien
Die FAIR-Prinzipien beschreiben, was gute Forschungsdaten und gute Forschungssoftware ausmacht:
- Findable — auffindbar über persistente Identifier (z. B. DOI).
- Accessible — abrufbar über offene, dokumentierte Protokolle.
-
Interoperable — in standardisierten Formaten (
.csvstatt.xlsx-spezifischer Trickserei). - Reusable — mit ausreichender Dokumentation und klarer Lizenz weiternutzbar.
Für deine Hausarbeit reicht ein kleiner Schritt: lege Code und (wenn möglich) Daten auf eine Plattform wie OSF und vergib eine offene Lizenz.
2.9.3 Plattformen und Pre-Registration
- OSF — Open Science Framework — kostenlose Plattform für Forschungsprojekte. Du legst dort Code, Daten und Pre-Registrations ab.
- Zenodo — vergibt persistente DOIs für Code-Releases (häufig mit GitHub gekoppelt).
- Pre-Registration — Forschungsfrage, Hypothesen und Auswertungsplan werden vor Datenerhebung oder Auswertung schriftlich festgelegt. Das schützt vor p-hacking und HARKing (Hypothesizing After the Results are Known). Sinnvoll für konfirmatorische Studien; explorative Forschung markiert man entsprechend.
Hintergrund: Warum jetzt? Die replication crisis in der Psychologie und den empirischen Sozialwissenschaften (ab 2011, zugespitzt durch die Open Science Collaboration 2015) hat gezeigt, dass viele publizierte Befunde sich nicht reproduzieren lassen — teils, weil Methoden unsauber dokumentiert waren, teils, weil das Forschungs-Anreizsystem signifikante Ergebnisse über sorgfältige Methoden belohnte. Open Science, Pre-Registration und reproduzierbare Berichte (Quarto, R Markdown) sind die strukturelle Antwort darauf.
2.10 Projektstruktur und Versionskontrolle
Ein gut strukturiertes Quarto-Projekt sieht typischerweise so aus:
mein-projekt/
├── data/
│ ├── ALLBUS2023.sav # Rohdaten — niemals bearbeiten
│ └── README.md # Beschreibung der Quelle
├── R/
│ ├── _common.R # geteilte Theme-/Helper-Funktionen
│ └── prep.R # Datenpräp als Funktion
├── output/ # erzeugte Tabellen/Grafiken
├── literatur.bib
├── analyse.qmd # das Hauptdokument
└── mein-projekt.Rproj
Drei Regeln, die sich bewährt haben:
-
Rohdaten sind heilig. Du schreibst nie in
data/zurück. Bearbeitete Daten bleiben im Speicher (während der Analyse) oder landen als abgeleitete Datei inoutput/. -
Code, Daten und Dokument liegen zusammen. Niemals absolute Pfade (
/Users/anna/...) — sobald du teilst, sind sie kaputt. Mit RStudio-Projekten ist der Pfad automatisch relativ zum Projektordner. -
Geteilte Logik kommt in
R/. Wenn drei.qmd-Dateien dieselben Daten vorbereiten, gehört der Code inR/prep.Rund wird in jedem Dokument persource("R/prep.R")eingebunden.
2.10.1 Versionskontrolle mit Git
Git ist eine Software, die jeden Stand deines Projekts speichert und dir erlaubt, jederzeit zurückzuspringen. Jeder Commit ist ein Snapshot mit einer Begründung („Tabelle 1 korrigiert: Cronbachs α statt Pearson r”). RStudio bringt Git-Integration mit; im Reiter Git siehst du, was sich geändert hat, kannst Änderungen committen und auf einen Remote-Server (GitHub, GitLab) pushen.
Drei Grundbefehle reichen für den Anfang:
git add . # alle Änderungen vormerken
git commit -m "Datenpräp erweitert" # snapshot mit Begründung
git push # zum Remote schickenTipp: GitHub Student Developer Pack. Studierende bekommen über das GitHub Student Developer Pack kostenlos Zugang zu privaten Repositories und vielen weiteren Tools. Für eine Hausarbeit, die du nicht öffentlich machen willst, ist das die natürliche Wahl.
2.11 Publizieren: HTML, PDF, Word
Welches Output-Format das richtige ist, hängt vom Adressaten ab:
- HTML — für die eigene Webseite, für GitHub Pages, für interaktive Berichte mit Verlinkungen. Schnellster Render-Lauf.
- PDF — für Seminar-Abgaben und formale Berichte. Quarto nutzt LaTeX im Hintergrund; installiere einmalig:
install.packages("tinytex")
tinytex::install_tinytex()- Word — für Co-Autor:innen, die Kommentare über die Word-Review-Funktion einfügen wollen. Du verlierst etwas Layout-Kontrolle, gewinnst aber an Kollaboration.
Mehrere Formate parallel:
format:
html: default
pdf:
documentclass: article
docx: defaultQuarto rendert beim nächsten Lauf alle drei. Über quarto publish kannst du HTML-Outputs direkt zu GitHub Pages, Quarto Pub oder Netlify veröffentlichen — alles ohne Server-Setup.
Übungen
.qmd · Reproduktion
Lege in deinem RStudio-Projekt ein neues Quarto-Dokument an, schreibe einen kurzen Einleitungs-Absatz und füge einen Code-Chunk mit summary(mtcars) ein. Render das Dokument als HTML.
File → New File → Quarto Document → HTML wählen → Titel angeben → Render-Knopf.
Schreibe einen Methoden-Satz, der den Stichprobenumfang und den Mittelwert einer Variable aus mtcars per Inline-Code einbettet. Achte auf eine sinnvolle Rundung. (mtcars ist ein in R eingebauter Beispieldatensatz — du brauchst ihn nicht laden.)
Die Stichprobe umfasst 32 Fahrzeuge mit
einem durchschnittlichen Verbrauch von
20.1 Meilen pro Gallone.Lege eine Datei literatur.bib an, mit einem Eintrag zur Schulz-et-al.-Populismus-Skala (siehe Kapitel 5, Weiterführend) und einem Eintrag zum Goodman-Reproduzierbarkeits-Artikel. Referenziere beide in deinem .qmd mit @key und ergänze am Ende eine Überschrift ## Literatur.
@article{Schulz2017,
author = {Schulz, Anne and Müller, Philipp and Schemer, Christian
and Wirz, Dominique S. and Wettstein, Martin and Wirth, Werner},
title = {Measuring populist attitudes on three dimensions},
journal = {International Journal of Public Opinion Research},
year = {2018}
}
@article{Goodman2016,
author = {Goodman, Steven N. and Fanelli, Daniele and Ioannidis, John P. A.},
title = {What does research reproducibility mean?},
journal = {Science Translational Medicine},
year = {2016}
}Im YAML: bibliography: literatur.bib. Im Text: [@Schulz2017] und [@Goodman2016]. Render-Lauf, Literaturliste erscheint automatisch unter ## Literatur.
Skizziere die Struktur eines reproduzierbaren Forschungsberichts in einer eigenen .qmd-Datei: YAML-Header mit Titel, Autor:in, Datum; Abschnitte Einleitung, Daten und Methode, Ergebnisse, Diskussion, Literatur. Schreibe pro Abschnitt 2–3 Platzhalter-Sätze, was dort später hineinkommen wird — bezogen auf eine politik- oder sozialwissenschaftliche Frage, die dich interessiert. Speichere das Skelett — du wirst es im Lauf des Buchs füllen.
Keine Musterlösung — diese Übung gibt dir die Vorlage für dein eigenes Capstone-Projekt am Ende des Buchs.
Was du jetzt weißt
- Du erklärst, wie Quarto Analyse und Bericht in einem Dokument verbindet.
- Du baust ein
.qmdaus YAML-Header, Lauftext und Code-Chunks. - Du steuerst Chunk-Output mit
echo,eval,include,warning. - Du nutzt Inline-R-Code, um Zahlen reproduzierbar im Fließtext zu nennen.
- Du erzeugst Tabellen mit
kable()/gtund Grafiken mitfig-cap/fig-width. - Du zitierst mit BibTeX, optional gekoppelt an Zotero.
- Du kennst die Open-Science-Begriffe (Reproduzierbarkeit, FAIR, OSF, Pre-Registration) und kannst sie auf dein Projekt anwenden.
- Du strukturierst dein Projekt mit
data/,R/,output/und versionierst es mit Git. - Du publizierst in HTML, PDF oder Word.
Im nächsten Kapitel kommst du zur Programmiersprache R selbst — Variablen, Funktionen, Datentypen und der Pipe-Operator. Damit baust du die Grundlage für jede der folgenden Analysen.
Weiterführend
- Posit, Quarto-Dokumentation — Referenz für alle Output-Formate, YAML-Optionen und Erweiterungen.
- Garrett Grolemund & Hadley Wickham, R for Data Science (2e), Kapitel „Quarto” — kompakter Einstieg in den Workflow.
- Kieran Healy, The Plain Person’s Guide to Plain Text Social Science — wie sozialwissenschaftliche Forschung mit Plain-Text-Tools (Quarto, Git, BibTeX) durchgängig wird.
- Steven Goodman, Daniele Fanelli & John Ioannidis, „What Does Research Reproducibility Mean?” — Science Translational Medicine (2016) — die meistzitierte Definition.
- Open Science Collaboration, „Estimating the reproducibility of psychological science” — Science (2015) — die Studie, die die Replikationskrise ins Bewusstsein der Sozialwissenschaft brachte.
- Open Science Framework — Plattform für Daten, Code und Pre-Registrations.
- Better BibTeX for Zotero — der Schlüssel zur Zotero-Quarto-Brücke.