ie Funktionen zur Ermittlung der Kennzahlen von Datenrahmen werden durch die Bibliothek rstatix bereitgestellt. rstatix ist eine Bibliothek, die die am häufigsten verwendeten statistischen Operationen und Tests in Abstimmung mit den tidyverse-Bibliotheken bereitstellt.
Achtung
rstatix ist eine eigenständige Bibliothek und muss separat mit install.packages() oder pak::pkg_install() installiert werden.
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.1
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(rstatix)
Attache Paket: 'rstatix'
Das folgende Objekt ist maskiert 'package:stats':
filter
17.1 Universelle Kennwerte
In R ergibt sich dieser Wert direkt aus dem Datenrahmen: Der Stichprobenumfang entspricht der Anzahl der Datensätze in unserem Stichprobenobjekt. Diese Anzahl bestimmen wir mit Hilfe der count()-Funktion oder innerrhalb einer Transforrmation mit mutate() mit Hilfe der n()-Funktion.
Beispiel 17.1 (Beispieldaten für die universellen Kennwerte)
stichprobe =read_csv2('data_ab_missing.csv')
ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
Rows: 156 Columns: 4
── Column specification ────────────────────────────────────────────────────────
Delimiter: ";"
chr (1): Angebot
dbl (3): Punkte, Interesse, Bedeutung
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Der Stichprobenumfang ist einer der drei allgemeinen Kennwerte, die jede Stichprobe beschreiben. Wir bestimmen zuerst die numerischen Kennwerte unserer Beispielstichprobe.
Wichtig
Die beiden universellen Kennwerte werden beim Import ebenfalls angezeigt. Diese Werte stehen für das automatisierte Reporting nicht zur Verfügung. Deshalb müssen diese Kennwerte noch einmal bestimmt werden.
Dabei erkennen wir, dass der Stichprobenumfang 156 beträgt. Wir erkennen zusätzlich, dass wir 4 Vektoren in unserem Stichprobenobjekt vorliegen haben. Die Funktion dim() funktioniert auch für Datenrahmen, so dass die beiden Kennwerte auch mit dieser Funktion bestimmt werden können. Das Ergebnis dim() Funktion gibt als ersten Wert immer den Stichprobenumfang und als zweiten Wert den Umfang der Umfang der Vektoren zurück.
stichprobe |>dim()
[1] 156 4
17.2 Variablenumfang und fehlende Werte
Neben dem Stichprobenumfang werden zusätzlich die Variablenumfänge ermittelt. Der Variablenumfang bezeichnet die Anzahl der gemessenen Merkmalsausprägungen. Damit ist die Gesamtzahl der gemessenen Werte für ein Merkmal in einem Vektor gemeint. Für diesen Wert müssen die nicht vorhandene Werte aus der Variable entfernt werden. Diese Werte sind in R mit dem Wert NA gekennzeichnet.
Die NA-Werte werden in R mithilfe der drop_na()-Funktion aus einem Datenrahmen entfernt. Die Funktion drop_na() entfernt alle Datensätze, in denen ein Vektor keinen Wert enthält. Das ist für den Variblenumfang nicht erwünscht.
Statdessen werden die fehlenden Werte bei einer Aggregaion mit na.omit() ausgeblendet.
Praxis
Die Variablenumfänge werden normalerweise gemeinsam mit den Lagemassen des Merkmals präsentiert.
stichprobe |>summarise(n_Punkte = Punkte |>na.omit() |>length(),n_Angebot = Angebot |>na.omit() |>length(),n_Interesse = Interesse |>na.omit() |>length(),n_Bedeutung = Bedeutung |>na.omit() |>length() )
R stellt als Programmiersprache für die Data Sciences zentrale Funktionen zur Beschreibung von Daten direkt bereit. Es ist deshalb in der Regel nicht notwendig, die Formeln für die Lagemasse zu implementieren. Tabelle 17.1 liestet die Funktionen für die einzelnen Lagemasse.
Werden die Lagemasse für für mehrere Merkmale gleichzeitig bestimmt, dann handelt es sich um eine gruppierte Operation. Der Index dieser Operation wird über die Vektornamen gebildet. Dabei dürfen nur Vektoren von gleichen Datentyp zusammengefasst werden.
Merke
Alle Lagemasse sind Aggregationen.
Tabelle 17.1: R-Funktionen für die Lagemasse
Mass
Funktion
Mittelwert
mean()
Median
median()
Standardabweichung
sd()
Varianz
var()
Interquartilsabstand
IQR()
Mittlere Absolute Abweichung
mad()
Quartile
quantile()
Standardfehler
sd(x) / sqrt(length(x))
Der Standardfehler hat in Base-R keine eigene Funktion, sondern muss über die Standardabweichung hergeleitet werden.
Die statistischen Kennwerte lassen sich also leicht mit der Aggregation in Beispiel 17.2 bestimmen.
Beispiel 17.2 (Alle Kennwerte bestimmen)
stichprobe |>summarise(n = Punkte |>na.omit() |>length(),mn = Punkte |>mean(na.rm =TRUE),sd = Punkte |>sd(na.rm =TRUE),se = sd/sqrt(n),min = Punkte |>min(na.rm =TRUE),max = Punkte |>max(na.rm =TRUE),q1 = Punkte |>quantile(.25, na.rm =TRUE),md = Punkte |>median(na.rm =TRUE),q3 = Punkte |>quantile(.75, na.rm =TRUE),mad = Punkte |>mad(na.rm =TRUE),iqr = Punkte |>IQR(na.rm =TRUE) )
# A tibble: 1 × 11
n mn sd se min max q1 md q3 mad iqr
<int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 153 199. 69.7 5.64 16.5 395. 158. 196. 250. 68.8 92.2
Noch einfacher lassen sich die Kennwerte mit der Funktion get_summary_stats() aus der Bibliothek rstatix ermitteln (Beispiel 17.3). Ein wichtiger Vorteil dieser Funktion ist, dass sie ungültige Werte korrekt entfernt.
Beispiel 17.3 (Alle Kennwerte mit rstatix bestimmen)
stichprobe |>get_summary_stats(Punkte)
# A tibble: 1 × 13
variable n min max median q1 q3 iqr mad mean sd se
<fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Punkte 153 16.5 395. 196. 158. 250. 92.2 68.8 199. 69.7 5.64
# ℹ 1 more variable: ci <dbl>
Für ordinalskalierte Daten sind nicht alle Kennwerte zulässig. Deshalb dürfen für diese Daten nur die zulässigen Werte berichtet werden. Der Funktion get_summary_stats() müssen deshalb die zulässigen Kennwerte angegeben werden (Beispiel 17.4).
Beispiel 17.4 (Alle Kennwerte für ordinalskalierte Daten bestimmen)
# A tibble: 2 × 9
variable n min max median mad iqr q1 q3
<fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Interesse 151 1 7 4 1.48 1.5 3 4.5
2 Bedeutung 150 1 6 3 1.48 2 2 4
Wichtig
Ordinalskalierte Daten müssen als numerische Werte kodiert vorliegen, damit die Kennwerte bestimmt werden können. Damit die Kennwerte interpretiert werden können, müssen alle verwendeten Kodierungstabelle ebenfalls berichtet werden.
17.3.1 Kennwerte über das Datenschema bestimmen
Das Datenschema ist ein zentraler Teil der technischen Dokumentation eines Projekts. Liegt das Datenschema als Tabelle vor und die Skalierungen sind in einer eigenen Spalte dokumentiert, dann kann das Datenschema zur Beschreibung der Daten eingesetzt werden.
Beispiel 17.5 zeigt ein reduziertes Datenschema für die geladenen Daten. Normalerweise würde dieses Schema aus einer Datei geladen werden.
Beispiel 17.5 (Reduziertes Datenschema für die Daten)
Nachdem das Schema geladen wurde, können die Namen der Vektoren des gleichen Skalenniveaus gefiltert werden und an die Selektorfunktion all_of() übergeben werden (s. Beispiel 17.6). Auf diese Weise wird der Funktion get_summary_stats() mitgeteilt, für welche Vektoren die Kennwerte bestimmt werden sollen.
Beispiel 17.6 (Verwendung des Datenschames zur Beschreibung der Daten)
# A tibble: 1 × 13
variable n min max median q1 q3 iqr mad mean sd se
<fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Punkte 153 16.5 395. 196. 158. 250. 92.2 68.8 199. 69.7 5.64
# ℹ 1 more variable: ci <dbl>
# A tibble: 2 × 9
variable n min max median mad iqr q1 q3
<fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Interesse 151 1 7 4 1.48 1.5 3 4.5
2 Bedeutung 150 1 6 3 1.48 2 2 4
17.4 Kontinenztabellen erstellen
In Kapitel 13 wurden Kontingenztabellen eingeführt und die Funktion table() für zwei unabhängige Vektoren vorgestellt.
Für Datenrahmen ist die Funktion freq_table() etwas flexibler und unterliegt nicht der Beschränkung auf zwei Vektoren. Ausserdem bestimmt die Funktion freq_table() automatisch die relativen Häufigkeiten.
Beispiel 17.7 (Kontingenztabelle für ein Merkmal)
stichprobe |>freq_table(Angebot)
# A tibble: 2 × 3
Angebot n prop
<chr> <int> <dbl>
1 A 69 45.4
2 B 83 54.6
Beispiel 17.8 (Kontingenztabelle für zwei Merkmale)
stichprobe |>freq_table(Angebot, Bedeutung)
# A tibble: 12 × 4
Angebot Bedeutung n prop
<chr> <dbl> <int> <dbl>
1 A 1 5 7.5
2 A 2 15 22.4
3 A 3 12 17.9
4 A 4 15 22.4
5 A 5 14 20.9
6 A 6 6 9
7 B 1 11 13.9
8 B 2 12 15.2
9 B 3 18 22.8
10 B 4 22 27.8
11 B 5 8 10.1
12 B 6 8 10.1
Vorteilhaft ist auch, dass das Ergebnis der Funktion freq_table() ein Datenrahmen ist. Dadurch können weitere Datenrahmen-Operationen verkettet werden. Im Beispiel 17.9 werden die relativen Werte in einer Kreuztabelle so gegenübergestellt, dass die unterschiedliche Bewertung der Bedeutung für die beiden Angebote leichter verglichen werden können.
Beispiel 17.9 (Kontingenztabelle für zwei Merkmale als Kreuztabelle)