3.2 Systematische Inspektion
1. Ist die Anzahl an Fällen und Variablen
plausibel?
Der dim() Befehl zeigt die Anzahl an Beobachtungen und
Merkmalen.
dim(kursdata_anon)
## [1] 54 28
Der glimpse() Befehl listet alle im Datensatz
enthaltenen Merkmale und Beobachtungen mit ihren Ausprägungen auf.
Zusätzlich werden die Variablenklassen angezeigt.
glimpse(kursdata_anon)
## Rows: 54
## Columns: 28
## $ id <dbl> 5, 6, 7, 8, 10, 12, 17, 19, 20, 21, 22, 23, 24, 26, 27…
## $ dispcode <dbl> 31, 31, 31, 32, 31, 32, 31, 31, 31, 31, 31, 31, 31, 31…
## $ lastpage <dbl> 135711, 135711, 135711, 135711, 135711, 135711, 135711…
## $ lezufr <dbl> 71, 84, 63, 55, 25, 70, -99, 61, 70, 63, 75, 98, 70, 6…
## $ alter <dbl> 20, 21, 25, 20, 19, 25, 26, 24, 25, 21, 26, 25, 26, 20…
## $ geschlecht <chr> "weiblich", "weiblich", "weiblich", "weiblich", "weibl…
## $ qm <dbl> 56, 64, 14, 49, 18, 42, 53, NA, 59, 30, 25, 57, 31, 48…
## $ rauchen <dbl+lbl> 1, 1, 1, 3, 1, 2, 3, 2, 1, 3, 3, 3, 3, 1, 3, 3, 3,…
## $ rauchen_aktuell <dbl+lbl> -99, 1, 1, 0, 1, 0, 0, 0, 1, 0, …
## $ konsum <dbl+lbl> 2, NA, 1, 1, 2, 1, 1, NA, 1, 1, 2, 1, 2…
## $ leftright <dbl> 50, 50, 100, 20, 4, 20, 30, 30, 30, 5, 20, 50, 50, 50,…
## $ intgender <dbl+lbl> 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 2, 2,…
## $ intmig <dbl+lbl> 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 2, 2, 1, 2,…
## $ llezufr <dbl> 77, 80, 47, 50, 17, 80, 40, 50, 60, 86, 30, 53, 20, 0,…
## $ trust <dbl> 4, 1, 4, 4, 4, 3, 4, 3, 4, 4, 4, 3, 3, 3, 4, 3, 3, 4, …
## $ eltern <dbl+lbl> 3, 1, 2, 1, 2, 1, 1, 3, 3, 3, 3, 1, 2, 1, 3, 3, 1,…
## $ mathe <dbl> 4.5, 3.0, 3.0, 4.5, 5.0, 4.0, 5.5, 4.0, 4.0, 4.0, 5.0,…
## $ deutsch <dbl> 5.0, 4.5, 5.0, 5.5, 4.5, 5.5, NA, 5.0, 4.5, 6.0, 4.5, …
## $ fach <dbl+lbl> 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ semester <dbl> 2, 4, 5, 3, 1, 1, 1, 4, 5, 1, 1, 3, 6, 2, 3, NA, 3, 2,…
## $ statfreiw <dbl+lbl> 3, 2, 2, 1, 3, 2, 1, 1, 1, 1, 3, 2, 2, 2, 2, 2, 1,…
## $ sidejob <dbl+lbl> 2, 2, 2, 1, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 1, 2,…
## $ buecher <dbl> 2, 12, 25, 4, 2, 3, 36, 4, 1, 6, 8, 7, 10, 2, 20, 3, 1…
## $ konsum2 <dbl+lbl> 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 2, 2,…
## $ links <dbl+lbl> 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0,…
## $ akback <dbl+lbl> 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,…
## $ akback_str <dbl+lbl> 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1,…
## $ trustkat <dbl+lbl> 3, 1, 3, 3, 3, 2, 3, 2, 3, 3, 3, 2, 2, 2, 3, 2, 2,…
2. Variablenübersicht: Sind alle relevanten Variablen
enthalten?
Der look_for() Befehl aus dem labelled
Package gibt euch alle vorhandenen Metainformationen zum Datensatz. Bei
einem gut beschriebenen (bzw. “gelabellten”) Datensatz kann der
look_for-Output daher (fast) die Datendokumentation
bzw. ein offizielles Codebook ersetzen. Konkret werden alle Merkmale
aufgelistet und zusätzlich deren Variablen- und Wertelables (wenn
vorhanden) angezeigt. Ihr könnt den Output von look_for
direkt in ein neues Objekt schreiben, welches dann automatisch in
übersichtlicher Tabellenform organisiert ist. Wir empfehlen, diese im
Environment (rechts oben) als Tab zu öffnen und über den gesamten
Prozess des Datenmanagements & -analyse im Hintergrund geöffnet zu
halten.
library(labelled)
## Warning: Paket 'labelled' wurde unter R Version 4.3.2 erstellt
varlist <- look_for(kursdata_anon)
Der attributes() Befehl ist vor allem hilfreich, da
er durch das $ Zeichen auf ein bestimmtes Merkmal
zugreifen kann und dessen Labels zeigt.
attributes(kursdata_anon)
## $class
## [1] "tbl_df" "tbl" "data.frame"
##
## $row.names
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
## [51] 51 52 53 54
##
## $names
## [1] "id" "dispcode" "lastpage" "lezufr"
## [5] "alter" "geschlecht" "qm" "rauchen"
## [9] "rauchen_aktuell" "konsum" "leftright" "intgender"
## [13] "intmig" "llezufr" "trust" "eltern"
## [17] "mathe" "deutsch" "fach" "semester"
## [21] "statfreiw" "sidejob" "buecher" "konsum2"
## [25] "links" "akback" "akback_str" "trustkat"
attributes(kursdata_anon$lezufr)
## $label
## [1] "Lebenszufriedenheit derzeit"
##
## $format.stata
## [1] "%8.0g"
3. Übersichtstatistiken (Summary Statistics): Plausible
Werte?
Der summary() Befehl zeigt das Minimum und Maximum der
Ausprägungen, die erste und dritte Quartilsgrenze, den Median und das
arithmetische Mittel. Mit dem Dollarzeichen kann im Befehl wiederum eine
spezifische Variable angesteuert werden (daten$variable). So
könnt ihr leicht und übersichtlich erkennen, ob (1) die für Euch
relevanten Variablen korrekte und sinnvolle Werte enthalten, (2) alle
fehlenden Werte als solche erkennbar und kodiert sind und (3) die
grundlegenden Verteilungseigenschaften mit Euren Erwartungen
übereinstimmen.
summary(kursdata_anon)
## id dispcode lastpage lezufr
## Min. : 5.00 Min. :31.00 Min. :135711 Min. :-99.00
## 1st Qu.:26.25 1st Qu.:31.00 1st Qu.:135711 1st Qu.: 61.50
## Median :42.00 Median :31.00 Median :135711 Median : 71.00
## Mean :42.81 Mean :31.11 Mean :135711 Mean : 66.37
## 3rd Qu.:59.50 3rd Qu.:31.00 3rd Qu.:135711 3rd Qu.: 80.75
## Max. :82.00 Max. :32.00 Max. :135711 Max. : 98.00
##
## alter geschlecht qm rauchen
## Min. :19.00 Length:54 Min. :10.00 Min. :1.000
## 1st Qu.:21.00 Class :character 1st Qu.:30.00 1st Qu.:1.000
## Median :22.00 Mode :character Median :47.00 Median :2.500
## Mean :22.49 Mean :42.92 Mean :2.185
## 3rd Qu.:25.00 3rd Qu.:57.00 3rd Qu.:3.000
## Max. :26.00 Max. :65.00 Max. :3.000
## NA's :1 NA's :1
## rauchen_aktuell konsum leftright intgender
## Min. :-99.000 Min. :1.000 Min. : 0.00 Min. :1.000
## 1st Qu.: 0.000 1st Qu.:1.000 1st Qu.: 20.00 1st Qu.:1.000
## Median : 0.000 Median :2.000 Median : 30.00 Median :1.000
## Mean : -1.537 Mean :1.521 Mean : 32.46 Mean :1.481
## 3rd Qu.: 1.000 3rd Qu.:2.000 3rd Qu.: 44.00 3rd Qu.:2.000
## Max. : 1.000 Max. :2.000 Max. :100.00 Max. :3.000
## NA's :6
## intmig llezufr trust eltern mathe
## Min. :1.000 Min. : 0.00 Min. :1.000 Min. :1 Min. :3.00
## 1st Qu.:1.000 1st Qu.:50.75 1st Qu.:3.000 1st Qu.:1 1st Qu.:3.50
## Median :1.000 Median :67.50 Median :3.500 Median :2 Median :4.00
## Mean :1.444 Mean :62.46 Mean :3.352 Mean :2 Mean :4.25
## 3rd Qu.:2.000 3rd Qu.:80.00 3rd Qu.:4.000 3rd Qu.:3 3rd Qu.:5.00
## Max. :3.000 Max. :95.00 Max. :5.000 Max. :3 Max. :6.00
##
## deutsch fach semester statfreiw sidejob
## Min. :4.00 Min. :1.00 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:4.50 1st Qu.:1.00 1st Qu.:2.000 1st Qu.:1.000 1st Qu.:2.000
## Median :5.00 Median :1.00 Median :3.000 Median :2.000 Median :2.000
## Mean :5.01 Mean :1.13 Mean :2.981 Mean :1.889 Mean :1.759
## 3rd Qu.:5.50 3rd Qu.:1.00 3rd Qu.:4.000 3rd Qu.:3.000 3rd Qu.:2.000
## Max. :6.00 Max. :2.00 Max. :6.000 Max. :3.000 Max. :2.000
## NA's :2 NA's :2
## buecher konsum2 links akback
## Min. : 0.00 Min. :1.000 Min. :0.0000 Min. :0.0000
## 1st Qu.: 3.00 1st Qu.:1.000 1st Qu.:0.0000 1st Qu.:0.0000
## Median : 6.00 Median :1.000 Median :0.0000 Median :1.0000
## Mean : 12.89 Mean :1.463 Mean :0.1481 Mean :0.6111
## 3rd Qu.: 14.50 3rd Qu.:2.000 3rd Qu.:0.0000 3rd Qu.:1.0000
## Max. :100.00 Max. :2.000 Max. :1.0000 Max. :1.0000
##
## akback_str trustkat
## Min. :0.0000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:2.000
## Median :0.0000 Median :2.500
## Mean :0.3889 Mean :2.333
## 3rd Qu.:1.0000 3rd Qu.:3.000
## Max. :1.0000 Max. :3.000
##
summary(kursdata_anon$alter)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 19.00 21.00 22.00 22.49 25.00 26.00 1
summary(kursdata_anon$lezufr)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -99.00 61.50 71.00 66.37 80.75 98.00
summary(kursdata_anon$qm)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 10.00 30.00 47.00 42.92 57.00 65.00 1
Mit dem table() Befehl lassen sich einfache
Häufigkeitstabellen erstellen - sinnvoll für die Inspektion kategorialer
Variablen.
library(dplyr)
table(kursdata_anon$rauchen)
##
## 1 2 3
## 17 10 27
table(kursdata_anon$semester)
##
## 1 2 3 4 5 6
## 6 15 14 10 5 2
4. Sind die Klassen der relevanten Variablen stimmig
definiert?
Der class() Befehl zeigt uns die Klasse bzw. den Typ
einer Variablen an (bei “double” - und ebenso “integer” - handelt es
sich um Untertypen der Klasse “numeric”).
class(kursdata_anon$geschlecht)
## [1] "character"
class(kursdata_anon$leftright)
## [1] "numeric"
class(kursdata_anon$rauchen)
## [1] "haven_labelled" "vctrs_vctr" "double"
Bei Bedarf können wir die Variablenklasse auch ändern. Dies ist
häufig bei kategorialen Variablen sinnvoll, falls diese im numerischen
Format oder als character angelegt sind. factor und
as.factor sind Basisvarianten der Faktorisierung, wobei
erstes mit Zusatzargumenten (z.B. zur Rekodierung oder Umsortierung)
angereichert werden kann, zweitesdagegen nicht.
as_factor nutzt ein spezielles Feature aus dem oben
aktivierten dplyr-Package und überschreibt die
Wertelabel mit Kategorienwerten. Der Ergebnisoutput wird so oft besser
lesbar:
table (kursdata_anon$rauchen)
##
## 1 2 3
## 17 10 27
kursdata_anon$rauchen_factor_v1 <- factor(kursdata_anon$rauchen)
table (kursdata_anon$rauchen_factor_v1)
##
## 1 2 3
## 17 10 27
kursdata_anon$rauchen_factor_v2 <- as.factor(kursdata_anon$rauchen)
table (kursdata_anon$rauchen_factor_v2)
##
## 1 2 3
## 17 10 27
kursdata_anon$rauchen_factor_v3 <- as_factor(kursdata_anon$rauchen)
table (kursdata_anon$rauchen_factor_v3)
##
## ja nein, aber früher nein, noch nie
## 17 10 27