eatGADS - Datenaufbereitung

Benjamin Becker, Annika Liebelt & Jule Burblies

2024-11-12

Agenda

  • eatGADS - Basics
    • Hintergrund
    • Grundlegendes
    • Übersicht Funktionalität
  • eatGADS im BT-Kontext
    • Aufbereitungsziel
    • Häufig verwendete Funktionen
    • Best Practices

eatGADS: Hintergrund

eatGADS - Scope

  • Datenbankerstellung
  • Datenbanknutzung

eatGADS - Scope

  • Datenbankerstellung
  • Datenbanknutzung
  • (teil-automatisierte) Datenaufbereitung

Ursprüngliche Idee

R statt SPSS in der Datenaufbereitung

  • keine proprietäre Software
  • bessere Automatisierungsmöglichkeiten
  • bessere Integration mit dem eat-Versum

eatGADS

# Stabile Version
install.packages("eatGADS")

# Development Version
remotes::install_github("beckerbenj/eatGADS")

Ressourcen

eatGADS: Grundlegendes

GADSdat-Objekte

Liste bestehend aus

  • rohen Daten (dat)
  • und Meta-Daten (labels)

GADSdat-Objekte

Liste bestehend aus

  • rohen Daten (dat)
    • numerische Variablen
    • character Variablen (Zeichenfolgen)
  • Meta-Daten (labels)
    • varName - Variablenname
    • varLabel - Variablenlabel
    • format - SPSS-Format
    • value - numerischer Wert
    • valLabel - Wertelabel
    • missings - Missingtags (miss oder valid)

GADSdat-Objekte

Daten

GADSdat-Objekte

Meta-Daten

GADSdat-Objekte

Import und Export

# Import von .sav/.dta files
pisa <- import_spss("pisa.sav")
pisa <- import_stata("pisa.dat")

# Export von .sav/.dta files
write_spss(pisa, filePath = "pisa.sav")
write_stata(pisa, filePath = "pisa.dat")

Variablennamen

Anzeigen von Variablennamen im Datensatz via namesGADS()

namesGADS(pisa)[1:10]
 [1] "idstud"    "idschool"  "idclass"   "schtype"   "sameteach" "g8g9"     
 [7] "ganztag"   "classsize" "repeated"  "gender"   

Meta-Daten

Extraktion von Meta-Daten via extractMeta()

extractMeta(pisa, vars = c("idstud", "schtype"))
  varName     varLabel format display_width labeled value
2  idstud   Student-ID   F8.0            NA      no    NA
5 schtype School track   F8.0            NA     yes     1
6 schtype School track   F8.0            NA     yes     2
7 schtype School track   F8.0            NA     yes     3
                                   valLabel missings
2                                      <NA>     <NA>
5                Gymnasium (academic track)    valid
6                                Realschule    valid
7 schools with several courses of education    valid

Meta-Daten

Änderung von Meta-Daten

# Variablenname
pisa2 <- changeVarNames(pisa, oldNames = "idstud",
                         newNames = "IDSTUD")

# Variablenlabel
pisa2 <- changeVarLabels(pisa2, varName = "schtype",
                         varLabel = "Schulart")

# Wertelabel
pisa2 <- changeValLabels(pisa2, varName = "schtype",
                         value = 1, valLabel = "Gymnasium")

# Missingtag
pisa2 <- changeMissings(pisa2, varName = "schtype",
                         value = -99, missings = "miss")

Meta-Daten

extractMeta(pisa2, vars = c("IDSTUD", "schtype"))
  varName   varLabel format display_width labeled value
1  IDSTUD Student-ID   F8.0            NA      no    NA
4 schtype   Schulart   F8.0            NA     yes   -99
5 schtype   Schulart   F8.0            NA     yes     1
6 schtype   Schulart   F8.0            NA     yes     2
7 schtype   Schulart   F8.0            NA     yes     3
                                   valLabel missings
1                                      <NA>     <NA>
4                                      <NA>     miss
5                                 Gymnasium    valid
6                                Realschule    valid
7 schools with several courses of education    valid

Daten

Änderung von Daten

# Variable duplizieren
pisa3 <- cloneVariable(pisa2, varName = "schtype",
                       new_varName = "schtype_dich")

# Rekodierung
pisa3 <- recodeGADS(pisa3, varName = "schtype_dich",
                    oldValues = c(1, 2, 3),
                    newValues = c(1, 2, 2),
                    existingMeta = "drop")

# Anpassung Wertelabel
pisa3 <- changeValLabels(pisa3, varName = "schtype_dich",
                     value = 2, valLabel = "Nicht-Gymnasium")

Daten

extractMeta(pisa3, vars = "schtype_dich")
         varName varLabel format display_width labeled value        valLabel
467 schtype_dich Schulart   F8.0            NA     yes   -99            <NA>
468 schtype_dich Schulart   F8.0            NA     yes     1       Gymnasium
469 schtype_dich Schulart   F8.0            NA     yes     2 Nicht-Gymnasium
    missings
467     miss
468    valid
469    valid

Übung

remotes::install_github("beckerbenj/eatFDZ")
sav_path <- system.file("extdata", "example_data.sav", package = "eatFDZ")
example_gads <- import_spss(sav_path)
  • Inspiziert die Meta-Daten der Variable "books".
  • Vergebt sinnvolle Wertelabel und Missingtags, wo diese bisher fehlen.
  • Bildet eine neue, dichotome Schulvariable ("school_dich") mit 1 = "nicht-Gymnasium" und 2 = "Gymnasium".

Übersicht Funktionalität

Übersicht Funktionalität I

Import-Funktionen

Export-Funktionen

Übersicht Funktionalität II

Meta-Daten bearbeiten

Übersicht Funktionalität III

Grundlegende Daten-Struktur bearbeiten

Übersicht Funktionalität IV

Semi-automatisierte Funktionen

Übung

  • Entfernt die Variablen "ID_name" und "info" aus Anonymisierungsgründen vollständig aus dem Datensatz.
  • Bildet den Notendurchschnitt aus den bestehenden Notenvariablen ("grade_<fach>").

Übersicht Funktionalität V

Vergleichs-Funktionen

Übersicht Funktionalität VI

Check-Funktionen

Check-Funktionen

Variablennamen

Konventionen Variablennamen

  • → Automatisch beim Import
    • _ vs .
    • Geschützte Wörter

Variablennamen

Konventionen Variablennamen

  • → Automatisch beim Import
    • _ vs .
    • Geschützte Wörter
# Import SPSS data
aepfel <- import_spss("aepfel.sav")

Variablennamen

Test-Daten

# Display the dataset
aepfel$dat
  ID Ä_Größe Ä_Qualität     Ort
1  1       1          2   unter
2  2       2          2    über
3  3       2          1 draußen

Variablennamen

Test-Daten

aepfel$labels[, c("varName", "varLabel", "value", "valLabel", "missings")]
     varName   varLabel value          valLabel missings
1         ID Identifier    NA              <NA>     <NA>
2    Ä_Größe       <NA>     1              groß    valid
3    Ä_Größe       <NA>     2             klein    valid
4 Ä_Qualität       <NA>   -99 Missing Unbekannt     miss
5 Ä_Qualität       <NA>   -97 Missing by Design    valid
6 Ä_Qualität       <NA>   -98              <NA>     miss
7        Ort       <NA>    NA              <NA>     <NA>

Sonderzeichen

Umlaute & Sonderzeichen umwandeln

  • Variablenlabel, Wertelabel, Daten
  • ß zu ss, ä zu ae usw.
  • Vorbeugen von Encoding-Problemen
# Fix encoding issues
aepfel <- fixEncoding(aepfel)

Sonderzeichen

Umlaute & Sonderzeichen umwandeln

# Display the dataset after fixing encoding
aepfel$dat
  ID Ae_Groesse Ae_Qualitaet      Ort
1  1          1            2    unter
2  2          2            2    ueber
3  3          2            1 draussen

Sonderzeichen

Umlaute & Sonderzeichen umwandeln

# Display specific columns of the labels data
aepfel$labels[, c("varName", "varLabel", "value", "valLabel", "missings")]
       varName   varLabel value          valLabel missings
1           ID Identifier    NA              <NA>     <NA>
2   Ae_Groesse       <NA>     1             gross    valid
3   Ae_Groesse       <NA>     2             klein    valid
4 Ae_Qualitaet       <NA>   -99 Missing Unbekannt     miss
5 Ae_Qualitaet       <NA>   -97 Missing by Design    valid
6 Ae_Qualitaet       <NA>   -98              <NA>     miss
7          Ort       <NA>    NA              <NA>     <NA>

Abgleich Missingtags

Abgleich Wertelabels und Missingtags

  • Alle Werte mit spezifischen Labels auch als Missing getagged?
  • Alle als Missing getaggeden Werte auch spezifische Labels?

→ Reporting und/oder Anpassung

# Check and adjust missing tags
aepfel <- checkMissings(aepfel, missingLabel = "Missing|missing")

Abgleich Missingtags

Abgleich gelabelte numerische Werte und Missingtags

  • Alle gelabelten Werte in spezifischem numerischen Range auch als Missing getagged?

→ Reporting und/oder Anpassung

# Check and adjust missing tags
aepfel <- checkMissingsByValues(aepfel, missingValues = -50:-99)

Abgleich Wertelabels

Abgleich Daten und Wertelabels

  • Alle Werte mit Wertelabels auch in Daten?
# Check if all value labels are present in the data
checkEmptyValLabels(aepfel)
$ID
NULL

$Ae_Groesse
NULL

$Ae_Qualitaet
  value          valLabel missings
4   -99 Missing Unbekannt     miss
6   -98              <NA>     miss
5   -97 Missing by Design     miss

$Ort
NULL

Abgleich Wertelabels

Abgleich Daten und Wertelabels

  • Alle Werte in den Daten auch mit Wertelabels?
# Check if all values in the data have value labels for specific variables
checkMissingValLabels(aepfel, vars = c("Ae_Groesse", "Ae_Qualitaet"))
$Ae_Groesse
NULL

$Ae_Qualitaet
$Ae_Qualitaet$varLabel
[1] NA

$Ae_Qualitaet$missing_labels
[1] 1 2

Übung

  • Überprüft die Vergabe von Missingtags im Beispieldatensatz mithilfe der Funktionen checkMissings() und checkMissingsByValues().
  • Überprüft, ob alle Wertelabels auch tatsächlich in den Daten vorkommen (checkEmptyValLabels()). Sollten diese Wertelabel aus den Daten entfernt werden?
  • Überprüft, ob alle Werte auch tatsächlich gelabelet sind (checkMissingValLabels()).

Danke für Eure

Aufmerksamkeit!