Einführung in R

Autorin: Jule Rieß

knitr::opts_chunk$set(
  echo = TRUE,
  include = TRUE,
  message = FALSE,
  warning = FALSE,
  fig.align = "center"
)

Inhaltsverzeichnis

  1. Aufbau und Funktionsweise von R Studio & Quarto
  • 1.1 Aufbau R-Studio
  • 1.2 Ausführen eines Codes
  • 1.3 Überschriften in Quarto
  • 1.4 Hervorhebungen in Quarto
  • 1.5 Listen
  • 1.6 Syntax für einen R-Code-Chunk
  • 1.7 Globale Chunk-Optionen
  • 1.8 Die „R-Sprache“
  1. Erste Schritte in R
  • 2.1 Variablen zuweisen
  • 2.2 Grundlegende Datentypen
  • 2.3 Grundlegende Operationen
  • 2.4 Datenstrukturen
  • 2.4.1 Vektoren
  • 2.4.2 Data Frames
  • 2.5 Weitere grundlegende Operationen
  • 2.5.1 Mathematische Operationen
  • 2.5.2 Logische Operationen
  • 2.6 Funktionen definieren
  • 2.7 Kontrollstrukturen
  • 2.7.1 If-Else Bedingungen
  • 2.7.2 Schleifen
  1. Packages in R
  • 3.1 Packages installieren und laden
  • 3.2 Häufig verwendete Packages
  1. Statistische Analysen
  • 4.1 Deskriptive Statistik
  • 4.2 Korrelation berechnen
  • 4.3 Datenvisualisierung mit ggplot2
  1. Aufgabenstellung Skill - Basic R
  2. Literaturverzeichnis

1. Aufbau und Funktionsweise von R Studio & Quarto

1.1 Aufbau R Studio

  • console oben = permanent

  • console unten = temporär

  • environment (oben rechts): zeigt alle aktuell geladenen Objekte an (=Arbeitsspeicher)

  • multifunktionales Fenster unten rechts: Files, Plots, Packages, Help, Viewer, Presentation

1.2 Ausführen eines Codes in Quarto

Indem man auf die Schaltfläche „Render“ klickt, wird ein Dokument erstellt, das sowohl den Inhalt als auch die Ausgabe des eingebetteten Codes enthält. Der Code wird wie folgt eingebettet:

1 + 1
[1] 2

1.3 Überschriften in Quarto

Mit dem Symbol # können Überschriften gemacht werden. Die Anzahl an # Symbolen bestimmt das Level der Überschrift:

# Heading Level 1
## Heading Level 2
### Heading Level 3

1.4 Hervorhebungen in Quarto

  • kursiv: Der Text wird mit einem Sternchen oder Unterstrich umbrochen: *kursiv* oder _kursiv_
  • fett: Der Text wird mit zwei Sternchen oder Unterstrichen umbrochen: **fett** oder __fett__
  • Kursiv und fett: Kombination von beiden: ***kursiv und fett***

1.5 Listen

  • Ungeordnete Listen: -, *, oder + gefolgt von einem Leerzeichen:

    - Item 1
    - Item 2
  • geordnete Listen: Zahlen gefolgt von einem Punkt:

    1. First item
    2. Second item

1.6 Syntax für einen R-Code-Chunk

  • Die drei Backticks ````` starten und schließen den Code-Chunk

  • {r} zeigt an, dass der Code in R geschrieben ist

  • Innerhalb des Blocks schreibt man einen R-Code.
  • Beim Rendern wird der Code ausgeführt und die Ausgabe eingefügt

  • Beispiel:

    ::: {.cell layout-align=“center”}

    # Dies ist ein R-Code 

    :::

1.7 Globale Chunk-Optionen

  • Um zu vermeiden, dass dieselben Chunk-Optionen (wie echo = FALSE, message = FALSE usw.) in jedem Code-Block wiederholt werden, kann man mit der Funktion knitr::opts_chunk$set() die Chunk-Optionen global am Anfang des Dokuments festsetzen. Dies geschieht in einem Setup-Chunk, der in der Regel in der Ausgabe nicht angezeigt wird:
#siehe oben

1.8 Die “R-Sprache”

  • Innerhalb eines Codes kennzeichnet man Kommentare mit einer Raute (s. u.)
  • um Hilfe zu sämtlichen Funktionen in R zu erhalten kann man ein Fragezeichen oder “help” vor die Funktion/ das Paket o.ä. setzen
  • bei zwei Fragezeichen erfolgt eine globale Suche
?mean        #Hilfe erhalten zur 'mean' Funktion
help("sum")  #Alternative zum Fragezeichen
??psych     #globale Suchanfrage zu einem Package

2. Erste Schritte in R

2.1 Variablen zuweisen

In R kann man Werte in Variablen speichern. Dies geschieht mit dem Zuweisungsoperator <- oder =.

# Einfache Zuweisung
name <- "Max"
alter = 25

# Numerische Zuweisung
x <- 10
y <- 20

# Mehrere Werte als Vektor
zahlen <- c(1, 2, 3, 4, 5)

x <- 10      #nach Konventionen empfohlene Zuweisung
10 -> y      #nach Konvention nicht verwenden
z = 5        #erlaubt aber weniger üblich (nicht verwenden)

2.2 Grundlegende Datentypen

R kennt verschiedene Datentypen:

# Numerisch
zahl <- 42.5
# Character/String
text <- "Hallo Welt"
# Logisch
wahr <- TRUE
falsch <- FALSE
# Integer
ganzzahl <- 42L

2.3 Grundlegende Operationen

a <- 2 + 3  # arithmetisch
b <- 5 ^ 2  # Potenzierung
c <- a > b  # Vergleich

2.4 Datenstrukturen

2.4.1 Vektoren

# Numerischer Vektor
zahlen <- c(1, 2, 3, 4, 5)

# Character Vektor
namen <- c("Anna", "Ben", "Clara")

# Vektor-Operationen
zahlen + 2  # Addiert 2 zu jedem Element
[1] 3 4 5 6 7
zahlen * 3  # Multipliziert jedes Element mit 3
[1]  3  6  9 12 15

2.4.2 Data Frames

# Data Frame erstellen
df <- data.frame(
  name = c("Max", "Lisa", "Tom"),
  alter = c(25, 30, 28),
  groesse = c(180, 165, 175)
)

# Data Frame anzeigen
print(df)
  name alter groesse
1  Max    25     180
2 Lisa    30     165
3  Tom    28     175
# Spalte auswählen
df$name
[1] "Max"  "Lisa" "Tom" 
df[["alter"]]
[1] 25 30 28

2.5 Grundlegende Operationen

2.5.1 Mathematische Operationen

# Grundrechenarten
summe <- 10 + 5
differenz <- 10 - 5
produkt <- 10 * 5
quotient <- 10 / 5

# Mathematische Funktionen
wurzel <- sqrt(16)
potenz <- 2^3

2.5.2 Logische Operationen

# Vergleichsoperatoren
x <- 5
y <- 10

x < y    # kleiner als
[1] TRUE
x <= y   # kleiner oder gleich
[1] TRUE
x == y   # gleich
[1] FALSE
x != y   # ungleich
[1] TRUE

2.6 Funktionen definieren

# Eigene Funktion erstellen
quadrat <- function(x) {
  return(x^2)
}

# Funktion verwenden
ergebnis <- quadrat(5)
print(ergebnis)
[1] 25

2.7 Kontrollstrukturen

2.7.1 If-Else Bedingungen

# Einfache if-else Struktur
x <- 10
if (x > 5) {
  print("x ist größer als 5")
} else {
  print("x ist kleiner oder gleich 5")
}
[1] "x ist größer als 5"

2.7.2 Schleifen

# For-Schleife
for (i in 1:5) {
  print(paste("Durchlauf:", i))
}
[1] "Durchlauf: 1"
[1] "Durchlauf: 2"
[1] "Durchlauf: 3"
[1] "Durchlauf: 4"
[1] "Durchlauf: 5"
# While-Schleife
j <- 1
while (j <= 3) {
  print(j)
  j <- j + 1
}
[1] 1
[1] 2
[1] 3

3. Packages in R

3.1 Packages installieren und laden

R-Packages erweitern die Funktionalität von R. Man verwendet sie wie folgt:

# Package installieren (einmalig notwendig)
install.packages("tidyverse", repos = "https://cran.r-project.org")


# Package laden (in jeder neuen R-Session notwendig)
library(tidyverse)

3.2 Häufig verwendete Packages

# Datenmanipulation und Visualisierung
library(dplyr)
library(ggplot2)
# Datenbereinigung
library(tidyr)
# Statistik
library(stats)

# Daten einlesen
library(readr)
library(readxl) #Excel-Dateien
#Psychometrie/Deskriptivstatistik
library(psych)
#Regressionsdiagnostik
library(car)
#u.v.m.

4. Statistische Analysen

4.1 Deskriptive Statistik

# Beispieldaten
daten <- c(12, 15, 18, 22, 25, 28)

# Mittelwert
mean(daten)
[1] 20
# Median
median(daten)
[1] 20
# Standardabweichung
sd(daten)
[1] 6.09918
# Zusammenfassung
summary(daten)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  12.00   15.75   20.00   20.00   24.25   28.00 
#fehlende Werte prüfen
sum(is.na(data))
[1] 0

4.2 Korrelation berechnen

# Beispieldaten erstellen
x <- c(1, 2, 3, 4, 5)
y <- c(2, 4, 5, 4, 5)

# Korrelation berechnen
korrelation <- cor(x, y)
print(korrelation)
[1] 0.7745967
# Korrelationstest
cor.test(x, y)

    Pearson's product-moment correlation

data:  x and y
t = 2.1213, df = 3, p-value = 0.124
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.3400820  0.9842358
sample estimates:
      cor 
0.7745967 

4.3 Datenvisualisierung mit ggplot2

# Scatterplot
ggplot(df, aes(x = alter, y = groesse)) +
  geom_point() +
  labs(title = "Alter vs. Größe",
       x = "Alter",
       y = "Größe in cm")

# Balkendiagramm
ggplot(df, aes(x = name, y = alter)) +
  geom_bar(stat = "identity") +
  labs(title = "Alter nach Person")

5. Aufgabenstellung Skill - Basic R

  1. Lesen Sie sich in die oben genannten Punkte ein (Verstehen der Grundlagen von RStudio; dazu gehört bspw. ein neues Projekt und R; Skripte zu erstellen; Kenntnis der grundlegenden Datentypen von R (numeric, logical, character, vector, factor, data.frame); Kenntnis der grundlegenden numerischen und logischen Operatoren; Fähigkeit grundlegende statistische Verfahren mit R durchführen (Signifikanztest für Korrelation, t-Test, Regression, Varianzanalyse); Einsatz von R-Kommentaren und Coding-Style-Richtlinien, um R-Skripte verständlicher zu machen)

  2. Finden sie die Bedeutung des folgendem Skript heraus (s. folgender R-Chunk)

set.seed( 1234 ) #setzt den Zufallszahlengenerator auf einen festen Startwert.Dadurch wird die zufällige Datenerzeugung reproduzierbar – man bekommt bei jedem Lauf die gleichen Ergebnisse. 
daten <- data.frame( "y" = rnorm( 200, mean = 3, sd = 1 ), 
"x" = as.factor( rep( 0 : 1, each = 100 ) ),
"Gruppe" = ifelse( runif( 200 ) > .5, "A", "B" ) 
) # y = rnorm generiert 200 Zufallswerte aus einer Normalverteilung mit Mittelwert = 3, Standardabweichung = 1 
# x = as.factor erzeugt eine Faktorvariable mit zwei Gruppen : 0 und 1, je 100-mal wiederholt, 
# runif erzeugt 200 Zufallszahlen zwischen 0 und 1; mit ifelse wird daraus eine Zufallszuweisung zu den Gruppen "A" oder "B"

Fazit: Der R-Code erstellt einen zufälligen Datensatz mit 200 Beobachtungen, wobei einige Variablen simuliert werden. Das Ergebnis ist ein Data Frame mit drei Spalten.

  1. Modifizieren und ergänzen sie dieses Skript so dass … 3.1) Die Variable “Gruppe” im data.frame “daten” den neuen Namen “Bedingung” trägt
library(dplyr)

daten <- daten %>% 
  rename(Bedingung = Gruppe)

3.2) Nehmen sie an, “y” sei die AV und “x” die UV; führen sie einen Signifikanztest für deren Korrelation, einen t-Test, eine Varianzanalyse und eine Regression durch

daten$x_num <- as.numeric(as.character(daten$x)) #x als numerisch für Korrelation
cor.test(daten$y, daten$x_num) #Pearson-Korrelation & Test

    Pearson's product-moment correlation

data:  daten$y and daten$x_num
t = 1.3748, df = 198, p-value = 0.1707
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.04206727  0.23284097
sample estimates:
       cor 
0.09724129 
t.test(y ~ x, data = daten) #Mittelwertvergleich von y zwischen den Gruppen in x

    Welch Two Sample t-test

data:  y by x
t = -1.3748, df = 197.85, p-value = 0.1707
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
 -0.48202061  0.08601076
sample estimates:
mean in group 0 mean in group 1 
       2.843238        3.041243 
anova_model <- aov(y ~ x, data = daten) #einfaktorielle Varianzanalyse
summary(anova_model)
             Df Sum Sq Mean Sq F value Pr(>F)
x             1   1.96   1.960    1.89  0.171
Residuals   198 205.35   1.037               
lm_model <- lm(y ~ x, data = daten) #lineare Regression
summary(lm_model)

Call:
lm(formula = y ~ x, data = daten)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.8970 -0.6781 -0.1016  0.6007  3.0025 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   2.8432     0.1018  27.919   <2e-16 ***
x1            0.1980     0.1440   1.375    0.171    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.018 on 198 degrees of freedom
Multiple R-squared:  0.009456,  Adjusted R-squared:  0.004453 
F-statistic:  1.89 on 1 and 198 DF,  p-value: 0.1707

3.3) Schreiben sie einen R-Kommentar an das Ende ihres Skripts, der die Ergebnisse kurz zusammenfasst

  1. Pearson-Korrelation r = 0.097 (schwach positiv) p = 0.171 → nicht signifikant → Kein statistisch gesicherter Zusammenhang zwischen x und y.

  2. t-Test (Mittelwertvergleich) Mittelwert Gruppe 0: 2.84, Gruppe 1: 3.04 t = -1.37, p = 0.171 → Der Unterschied der Mittelwerte ist nicht signifikant.

  3. Varianzanalyse (ANOVA) F(1, 198) = 1.89, p = 0.171 → Kein signifikanter Unterschied der Mittelwerte zwischen den Gruppen.

  4. Lineare Regression lineare Regressionsgleichung: y = 2,8432 + 0,1980*x R² = 0.009 → Modell erklärt nur ca. 1 % der Varianz p = 0.171 → Regressionskoeffizient ist nicht signifikant

Fazit: Alle Verfahren (Korrelation, t-Test, ANOVA, Regression) kommen zum gleichen Ergebnis: Es gibt keinen signifikanten Zusammenhang zwischen der UV x und der AV y. Der Effekt ist klein und statistisch nicht bedeutsam.

6. Literaturverzeichnis

Fenn, J. (2025, Mai 16). The tiny Quarto guide [Unveröffentlichte Manuskriptversion].

Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. New York: Chapman; Hall/CRC. https://doi.org/10.1201/9781138359444.