R Statistik: Auswertung, Pakete & Einstieg für Mediziner
R für statistische Auswertung in der Medizin: Installation, wichtige Pakete, deskriptive Statistik, Hypothesentests und Grafiken mit ggplot2. Einsteigerfreundlich, mit Codebeispielen.
R ist die leistungsfähigste frei verfügbare Statistik-Software der Welt — Goldstandard in der Biostatistik, der Bioinformatik und der akademischen Forschung. Anders als SPSS ist R keine Menü-Software, sondern eine Programmiersprache. Das schreckt viele ab — zu Unrecht. Denn mit den richtigen Paketen und einer strukturierten Einführung ist R auch für Einsteiger schnell nutzbar.
Dieser Leitfaden zeigt dir den Einstieg in R für die statistische Auswertung: Installation, die wichtigsten Pakete, deskriptive und inferenzstatistische Analysen und publikationsfertige Grafiken.
Warum R?
R hat gegenüber SPSS und anderen kommerziellen Programmen mehrere entscheidende Vorteile.
Kostenlos und Open Source. Keine Lizenzkosten, keine Einschränkungen. Perfekt für Studierende, Doktoranden und Forschungsgruppen.
Reproduzierbarkeit. Jede Analyse ist in einem Skript dokumentiert. Du (oder jemand anderes) kann die Analyse jederzeit exakt reproduzieren — ein zentrales Kriterium in der modernen Wissenschaft.
Pakete für alles. Über 20.000 Pakete auf CRAN (dem offiziellen Paket-Repository): von klassischen Tests bis zu Machine Learning, Bayesianischer Statistik, Netzwerkanalysen und Genomik.
Grafiken. ggplot2 ist das beste Paket für wissenschaftliche Grafiken — flexibel, elegant und publikationsfertig. Kein anderes Tool produziert so schöne Abbildungen mit so wenig Aufwand.
Karriere. R-Kenntnisse sind in der Forschung, der Pharma-Industrie, in Biotech und in der Data Science hochgefragt.
Installation und Einrichtung
R installieren
R herunterladen von cran.r-project.org. Wähle dein Betriebssystem (Windows, macOS, Linux) und installiere die aktuelle Version.
RStudio installieren
RStudio ist die komfortable Entwicklungsumgebung für R. Herunterladen von posit.co/download/rstudio-desktop. RStudio hat vier Bereiche: Skript-Editor (oben links — hier schreibst du deinen Code), Konsole (unten links — hier wird der Code ausgeführt), Umgebung/History (oben rechts — zeigt deine Variablen), Dateien/Plots/Pakete/Hilfe (unten rechts).
Wichtige Pakete installieren
# Einmalig ausführen:
install.packages(c("tidyverse", "psych", "car", "rstatix",
"ggpubr", "survival", "lme4", "effectsize"))
Die wichtigsten Pakete im Überblick: tidyverse (dplyr, ggplot2, tidyr — Datenmanipulation und Grafiken), psych (deskriptive Statistik, Reliabilitätsanalyse), car (Voraussetzungstests), rstatix (pipe-freundliche Statistik), ggpubr (publikationsfertige Grafiken), survival (Überlebensanalysen), lme4 (gemischte Modelle), effectsize (Effektstärken).
Daten importieren
library(tidyverse)
# CSV importieren
daten <- read_csv("meine_daten.csv")
# Excel importieren
library(readxl)
daten <- read_excel("meine_daten.xlsx", sheet = 1)
# SPSS-Datei importieren
library(haven)
daten <- read_sav("meine_daten.sav")
# Erster Überblick
glimpse(daten)
summary(daten)
head(daten)
Datenmanipulation mit dplyr
dplyr ist das Schweizer Taschenmesser der Datenaufbereitung in R. Die fünf Kernfunktionen:
# Zeilen filtern
daten_maennlich <- daten %>% filter(geschlecht == "männlich")
# Variablen auswählen
daten_klein <- daten %>% select(id, alter, geschlecht, blutdruck)
# Neue Variablen erstellen
daten <- daten %>% mutate(
bmi = gewicht / (groesse / 100)^2,
altersgruppe = case_when(
alter < 30 ~ "jung",
alter < 60 ~ "mittel",
TRUE ~ "alt"
)
)
# Gruppierte Zusammenfassungen
daten %>%
group_by(geschlecht) %>%
summarise(
n = n(),
mittel_alter = mean(alter, na.rm = TRUE),
sd_alter = sd(alter, na.rm = TRUE)
)
# Sortieren
daten %>% arrange(desc(blutdruck))
Der Pipe-Operator %>% verkettet Befehle — lies ihn als "und dann". Das macht den Code lesbar und nachvollziehbar.
Deskriptive Statistik
library(psych)
# Vollständige deskriptive Übersicht
describe(daten)
# Für einzelne Variablen
describe(daten$alter)
# Gruppiert
describeBy(daten$blutdruck, group = daten$geschlecht)
# Häufigkeitstabellen
table(daten$geschlecht)
prop.table(table(daten$geschlecht))
# Kreuztabelle
table(daten$geschlecht, daten$raucher)
Normalverteilung prüfen
# Shapiro-Wilk-Test (n < 50)
shapiro.test(daten$blutdruck)
# QQ-Plot
ggplot(daten, aes(sample = blutdruck)) +
stat_qq() +
stat_qq_line() +
theme_minimal() +
labs(title = "QQ-Plot Blutdruck")
# Histogramm mit Normalverteilungskurve
ggplot(daten, aes(x = blutdruck)) +
geom_histogram(aes(y = after_stat(density)), bins = 20, fill = "#2E86C1", alpha = 0.7) +
stat_function(fun = dnorm,
args = list(mean = mean(daten$blutdruck, na.rm = TRUE),
sd = sd(daten$blutdruck, na.rm = TRUE)),
color = "#154360", linewidth = 1) +
theme_minimal()
Hypothesentests
T-Test
# Ungepaarter t-Test
t.test(blutdruck ~ geschlecht, data = daten, var.equal = TRUE)
# Welch-t-Test (robuster, Standard in R)
t.test(blutdruck ~ geschlecht, data = daten)
# Gepaarter t-Test
t.test(daten$blutdruck_vorher, daten$blutdruck_nachher, paired = TRUE)
# Effektstärke
library(effectsize)
cohens_d(blutdruck ~ geschlecht, data = daten)
Mann-Whitney-U-Test
wilcox.test(blutdruck ~ geschlecht, data = daten)
ANOVA
# Einfaktorielle ANOVA
modell <- aov(blutdruck ~ gruppe, data = daten)
summary(modell)
# Post-hoc (Tukey)
TukeyHSD(modell)
# Effektstärke
library(effectsize)
eta_squared(modell)
Kruskal-Wallis
kruskal.test(blutdruck ~ gruppe, data = daten)
# Post-hoc (Dunn)
library(rstatix)
dunn_test(daten, blutdruck ~ gruppe, p.adjust.method = "bonferroni")
Chi-Quadrat-Test
tabelle <- table(daten$geschlecht, daten$raucher)
chisq.test(tabelle)
# Bei erwarteten Häufigkeiten < 5:
fisher.test(tabelle)
Korrelation und Regression
# Pearson-Korrelation
cor.test(daten$alter, daten$blutdruck, method = "pearson")
# Spearman-Rangkorrelation
cor.test(daten$alter, daten$blutdruck, method = "spearman")
# Korrelationsmatrix
library(psych)
corr.test(daten[, c("alter", "bmi", "blutdruck")])
# Lineare Regression
modell <- lm(blutdruck ~ alter + bmi + geschlecht, data = daten)
summary(modell)
confint(modell) # Konfidenzintervalle
# Voraussetzungen prüfen
par(mfrow = c(2, 2))
plot(modell)
# Logistische Regression
modell_log <- glm(krank ~ alter + bmi + raucher, data = daten, family = binomial)
summary(modell_log)
exp(coef(modell_log)) # Odds Ratios
exp(confint(modell_log)) # OR-Konfidenzintervalle
Überlebensanalysen
library(survival)
library(survminer)
# Kaplan-Meier
fit <- survfit(Surv(zeit, ereignis) ~ gruppe, data = daten)
ggsurvplot(fit, data = daten,
pval = TRUE, risk.table = TRUE,
palette = c("#2E86C1", "#E74C3C"),
xlab = "Zeit (Monate)", ylab = "Überlebenswahrscheinlichkeit")
# Log-Rank-Test
survdiff(Surv(zeit, ereignis) ~ gruppe, data = daten)
# Cox-Regression
cox_modell <- coxph(Surv(zeit, ereignis) ~ alter + geschlecht + stadium, data = daten)
summary(cox_modell)
Grafiken mit ggplot2
ggplot2 folgt einer Grammatik der Grafiken: Du kombinierst Daten, ästhetische Zuordnungen (welche Variable auf welche Achse) und geometrische Objekte (Punkte, Linien, Balken).
library(ggplot2)
# Boxplot: Blutdruck nach Geschlecht
ggplot(daten, aes(x = geschlecht, y = blutdruck, fill = geschlecht)) +
geom_boxplot(alpha = 0.7) +
scale_fill_manual(values = c("#2E86C1", "#E74C3C")) +
theme_minimal() +
labs(x = "Geschlecht", y = "Systolischer Blutdruck (mmHg)",
title = "Blutdruck nach Geschlecht") +
theme(legend.position = "none")
# Streudiagramm mit Regressionsgerade
ggplot(daten, aes(x = alter, y = blutdruck)) +
geom_point(color = "#2E86C1", alpha = 0.6) +
geom_smooth(method = "lm", color = "#154360") +
theme_minimal() +
labs(x = "Alter (Jahre)", y = "Systolischer Blutdruck (mmHg)")
# Balkendiagramm mit Fehlerbalken
zusammenfassung <- daten %>%
group_by(gruppe) %>%
summarise(m = mean(blutdruck, na.rm = TRUE),
se = sd(blutdruck, na.rm = TRUE) / sqrt(n()))
ggplot(zusammenfassung, aes(x = gruppe, y = m, fill = gruppe)) +
geom_col(alpha = 0.8) +
geom_errorbar(aes(ymin = m - se, ymax = m + se), width = 0.2) +
theme_minimal()
# Grafik als PDF speichern (publikationsfertig)
ggsave("abbildung_1.pdf", width = 8, height = 5, dpi = 300)
Von SPSS zu R wechseln: Übersetzungstabelle
Für den Umstieg eine Gegenüberstellung der häufigsten Operationen:
Häufigkeiten berechnen: In SPSS über Analysieren → Deskriptive Statistiken → Häufigkeiten. In R mit table(daten$variable). Mittelwert und SD: In SPSS über Deskriptive Statistiken. In R mit mean() und sd() oder describe() aus psych. T-Test: In SPSS über Mittelwerte vergleichen. In R mit t.test(). ANOVA: In SPSS über Einfaktorielle ANOVA. In R mit aov(). Korrelation: In SPSS über Bivariat. In R mit cor.test(). Regression: In SPSS über Linear. In R mit lm(). Boxplot: In SPSS über Diagrammerstellung. In R mit ggplot() + geom_boxplot().
Wann R auswerten lassen?
R ist mächtig, aber die Lernkurve ist real. Es ist sinnvoll, sich Hilfe zu holen, wenn du unter Zeitdruck stehst und R nicht erst lernen kannst, wenn deine Analyse fortgeschrittene Methoden erfordert (Mehrebenenmodelle, Bayesianische Statistik, Machine Learning), wenn du reproduzierbare Analyse-Pipelines für eine Arbeitsgruppe brauchst, oder wenn du für ein Journal reviewen musst und der R-Code bereits steht, aber nicht funktioniert.
Zusammenfassung
R ist das beste Tool für statistische Auswertungen in der Forschung — kostenlos, reproduzierbar, unbegrenzt erweiterbar. Der Einstieg erfordert eine Investition, aber mit tidyverse, ggplot2 und den richtigen Paketen bist du schnell produktiv. Für Studierende, die eine Karriere in der Forschung anstreben, ist R die wichtigste Investition neben dem Fachwissen.
Sie brauchen professionelle Hilfe mit R oder möchten Ihre Daten auswerten lassen? Unsere Biostatistik & Forschungsanalyse übernimmt die vollständige statistische Auswertung in R — von der Datenaufbereitung über die Analyse bis zu publikationsfertigen Grafiken. Kostenloses Erstgespräch.
🔬 Teste dein Wissen zu diesem Thema
MC-Fragen nach IMPP-Katalog mit Erklärungen zu jeder Antwortoption. Von Fachärzten geprüft.
14 Tage kostenlos testen Keine Kreditkarte erforderlich