Packages
Für das Lösen der Aufgaben müssen die R-Pakete likert und psych mit folgenden Befehlen geladen werden:

library(likert)
library(psych)

Bemerkung: Beim Verwenden von Funktionen aus Paketen empfiehlt es sich manchmal, als Prefix den Paketnamen und zwei Doppelpunkte zu schreiben. Hier eine Illustration am Beispiel der Umkodierung einer Variable (das werden Sie später brauchen):

likert::recode(x = c(3, 1, 2, 3), from = c(1, 2, 3), to = c(0, 1, 1))
## [1] 1 0 1 1

Somit weiss R, dass der Befehl recode() aus dem likert-Package kommt (je nachdem, welche Pakete man noch geladen hat, existiert die Funktion recode() mehrfach)


Zu den Daten

In dieser Übung werden wiederholt die STRAIN-Daten zur Messung von Work-Privacy Konflikten betrachtet. Work-Privacy Konflikte wurden mittels fünf Fragen des COPSOQ-Fragebogens gemessen. Die Antwortekategorien sind jeweils ordinal-skaliert mit den fünf Kategorien “In sehr hohem Mass”, “In hohem Mass”, “Zum Teil”, “In geringem Mass” und “In sehr geringem Mass”. Die fünf Fragen sind:

  1. Die Anforderungen meiner Arbeit stören mein Privat-/ und Familienleben.
  2. Der Zeitaufwand meiner Arbeit macht es schwierig für mich, meinen Pflichten in der Familie oder im Privatleben nachzukommen.
  3. Meine Arbeit beansprucht so viel Energie, dass sich dies negativ auf mein Privatleben auswirkt.
  4. Meine Arbeit nimmt so viel Zeit in Anspruch, dass sich dies negativ auf mein Privatleben auswirkt.
  5. Es kommt vor, dass ich zur gleichen Zeit zu Hause und bei der Arbeit sein sollte.

Für die Analyse wurden die ordinal-skalierten Antwortekategorien wie folgt zu numerischen Werten rekodiert:

  • In sehr geringem Mass = 0
  • In geringem Mass = 25
  • Zum Teil = 50
  • In hohem Mass = 75
  • In sehr hohem Mass = 100

Daten laden

Aufgaben

  1. Die STRAIN-Daten finden Sie auf Moodle als Datei STRAIN.RData. Speichern Sie diese Datei zuerst in ein lokales Verzeichnis. In R kann die Datei mittels dem Befehl load("STRAIN.RData") eingelesen werden weil es eine R-Datei ist. Der übliche Weg über import() funktioniert aber auch.
  2. Die fünf Variablen zu Working-Privacy Konflikten sind in den STRAIN-Daten dat.STRAIN als Spalten cq_wpkonf1, cq_wpkonf2, cq_wpkonf3, cq_wpkonf4 und cq_wpkonf5 abgelegt. Verschaffen Sie sich eine Übersicht über diese Variablen. Sie können dazu beispielsweise die Funktion describe() aus dem psych-Paket verwenden.

Lösungen

  1. Als erstes wird der Datensatz importiert. Hier wird es wie gewohnt mit Hilfe der import() Funktion aus rio gemacht.
library(rio)
dat.STRAIN <- import("~/Documents/Git/fm-msc-bfh/Exercises/Latent constructs/STRAIN.RData")

Es sind verschiedene Varianten möglich, um sich eine Übersicht zu den Daten zu verschaffen. Hier wird describe() und die str() gebraucht.

describe(dat.STRAIN[, c(
      "cq_wpkonf1", "cq_wpkonf2", "cq_wpkonf3", "cq_wpkonf4", "cq_wpkonf5")])
##            vars   n  mean    sd median trimmed   mad min max range skew
## cq_wpkonf1    1 500 33.55 25.92     25   31.75 37.06   0 100   100 0.40
## cq_wpkonf2    2 500 30.10 26.93     25   27.25 37.06   0 100   100 0.63
## cq_wpkonf3    3 500 32.95 27.19     25   30.69 37.06   0 100   100 0.52
## cq_wpkonf4    4 500 27.10 25.92     25   23.94 37.06   0 100   100 0.75
## cq_wpkonf5    5 500 20.20 24.20     25   16.81 37.06   0 100   100 1.04
##            kurtosis   se
## cq_wpkonf1    -0.47 1.16
## cq_wpkonf2    -0.31 1.20
## cq_wpkonf3    -0.44 1.22
## cq_wpkonf4    -0.04 1.16
## cq_wpkonf5     0.42 1.08
str(dat.STRAIN[, c(
      "cq_wpkonf1", "cq_wpkonf2", "cq_wpkonf3", "cq_wpkonf4", "cq_wpkonf5")])
## 'data.frame':    500 obs. of  5 variables:
##  $ cq_wpkonf1: int  25 50 50 25 0 0 0 0 75 0 ...
##  $ cq_wpkonf2: int  25 25 50 25 50 0 0 0 75 0 ...
##  $ cq_wpkonf3: int  25 75 50 25 25 0 25 0 75 0 ...
##  $ cq_wpkonf4: int  25 25 50 25 0 0 25 0 75 0 ...
##  $ cq_wpkonf5: int  25 0 50 50 0 0 50 0 50 0 ...

Deskriptive Analyse

Aufgaben

  1. Berechnen Sie als erstes den Mittelwert, die Standardabweichung, den Median, das Minimum und das Maximum der fünf Variablen zu Working-Privacy Konflikten. Sie können die R-Funktion describe() des Pakets psych dazu verwenden (ev. haben Sie das obenn schon erledigt).
  2. Stellen Sie nun die fünf Variablen mittels Barplots dar. Verwenden Sie dazu die R-Funktionen likert() und likert.bar.plot() des Pakets likert. Zuvor müssen die Variablen zu Work-Privacy Konflikten zu sogenannten Faktorvariablen kodiert werden. Interpretieren Sie die Grafk: Gibt es Unterschiede zwischen den Variablen? Welche?
  3. Abschliessend soll man sich eine Übersicht über die paarweisen-Zusammenhänge zwischen den fünf Variablen zu Work-Privacy Konflikten verschaffen. Benützen Sie dazu die R-Funktion pairs.panels() des Pakets psych. Notieren Sie sich die Variablenpaare mit der höchsten und tiefsten Korrelation. Was könnte mit Variablen mit tiefen Korrelationen gemacht werden?

Lösungen

  1. Die Berachnung Berechnen der deskriptiven Statistiken:

Am einfachsten geht dies über die describe()-Funktion aus dem psych-Package. Individuelle Berechnungen sind natürlich nicht falsch, brauchen aber mehr Zeit.

describe(dat.STRAIN[, c(
  "cq_wpkonf1", "cq_wpkonf2", "cq_wpkonf3", "cq_wpkonf4", "cq_wpkonf5")])
##            vars   n  mean    sd median trimmed   mad min max range skew
## cq_wpkonf1    1 500 33.55 25.92     25   31.75 37.06   0 100   100 0.40
## cq_wpkonf2    2 500 30.10 26.93     25   27.25 37.06   0 100   100 0.63
## cq_wpkonf3    3 500 32.95 27.19     25   30.69 37.06   0 100   100 0.52
## cq_wpkonf4    4 500 27.10 25.92     25   23.94 37.06   0 100   100 0.75
## cq_wpkonf5    5 500 20.20 24.20     25   16.81 37.06   0 100   100 1.04
##            kurtosis   se
## cq_wpkonf1    -0.47 1.16
## cq_wpkonf2    -0.31 1.20
## cq_wpkonf3    -0.44 1.22
## cq_wpkonf4    -0.04 1.16
## cq_wpkonf5     0.42 1.08

Für Interessierte: Mit dem in Mode gekommenen tidyverse-Package:

library(tidyverse)
dat.STRAIN %>% 
  pivot_longer(c("cq_wpkonf1", "cq_wpkonf2", "cq_wpkonf3", "cq_wpkonf4", "cq_wpkonf5"), names_to = "Variable", values_to = "value") %>% 
  group_by(Variable) %>% 
  summarise(mean = mean(value), sd = sd(value), median = median(value), minimum = min(value), maximum = max(value))
## # A tibble: 5 × 6
##   Variable    mean    sd median minimum maximum
##   <chr>      <dbl> <dbl>  <dbl>   <int>   <int>
## 1 cq_wpkonf1  33.6  25.9     25       0     100
## 2 cq_wpkonf2  30.1  26.9     25       0     100
## 3 cq_wpkonf3  33.0  27.2     25       0     100
## 4 cq_wpkonf4  27.1  25.9     25       0     100
## 5 cq_wpkonf5  20.2  24.2     25       0     100

  1. Wir stellen die fünf Variablen mittels Barplots dar. Zuerst müssen die Variablen in Faktoren transformiert werden:
    dat.STRAIN$cq_wpkonf1_FAC <- factor(dat.STRAIN$cq_wpkonf1, levels = c(0, 25, 50, 75, 100))
    dat.STRAIN$cq_wpkonf2_FAC <- factor(dat.STRAIN$cq_wpkonf2, levels = c(0, 25, 50, 75, 100))
    dat.STRAIN$cq_wpkonf3_FAC <- factor(dat.STRAIN$cq_wpkonf3, levels = c(0, 25, 50, 75, 100))
    dat.STRAIN$cq_wpkonf4_FAC <- factor(dat.STRAIN$cq_wpkonf4, levels = c(0, 25, 50, 75, 100))
    dat.STRAIN$cq_wpkonf5_FAC <- factor(dat.STRAIN$cq_wpkonf5, levels = c(0, 25, 50, 75, 100))

Dann kann der Barplot erstellt werden. Es dafür einfacher, wenn man die relevanten Variablen in ein neues data.frame speichert.

df <- dat.STRAIN[,c("cq_wpkonf1_FAC", "cq_wpkonf2_FAC", "cq_wpkonf3_FAC", 
        "cq_wpkonf4_FAC", "cq_wpkonf5_FAC")] # Die relevanten Variablen in ein neues data frame speichern
likert.objekt <- likert(df) # Das data frame in ein likert Objekt umwandeln (siehe ?likert)
likert.bar.plot(likert.objekt)

Im Vergleich ist das Niveau der fünften Variablen: “Es kommt vor, dass ich zur gleichen Zeit zu Hause und bei der Arbeit sein sollte.” am tiefsten. Am vergleichbarsten sind die Variablen 1, 2 und 3.


  1. Abschliessend soll man sich eine Übersicht über die paarweisen-Zusammenhänge zwischen den fünf Variablen zu Work-Privacy Konflikten verschaffen. Wir benützen dazu die R-Funktion pairs.panels() des Pakets psych.
    pairs.panels(dat.STRAIN[, c(
      "cq_wpkonf1", "cq_wpkonf2", "cq_wpkonf3", "cq_wpkonf4", "cq_wpkonf5")])

Die Korrelationen zwischen den ersten vier Variablen sind hoch, im Gegensatz zu Korrelationen mit der fünften Variablen. Am höchsten ist die Korrelation zwischen der dritten und vierten Variablen, am tiefsten die Korrelation zwischen der dritten und fünften Variablen. Die fünfte Variable korreliert nur mässig mit den übrigen Variablen. Man müsste sich überlegen, diese wegzulassen.


Berechnung des Work-Privacy Konflikt-Scores

Aufgaben

  1. Berechnen Sie die Work-Privacy Konflikt-Scores. Der Work-Privacy Konflikt-Score eines Studiensubjekts berechnet sich als Mittelwert der zugehörigen 5 Werte zu den Variablen cq_wpkonf1, cq_wpkonf2, cq_wpkonf3. cq_wpkonf4 und cq_wpkonf5.Fügen Sie die Variable mit dem Namen cq_wpkonf dem Datensatz hinzu.
  2. Stellen Sie den berechneten Work-Privacy Konflikt-Score in einem Histogramm dar. In welchem Bereich gibt es die meisten Beobachtungen?
  3. Stellen Sie den berechneten Score in einem Boxplot nach den Altersklassen dar. Stellen Sie Altersunterschiede fest? Ist das Resultat plausibel?

Lösungen

  1. Berechnen des Work-Privacy Konflikt-Scores. Auch hier gibt es verschiedene Wege. Am einfachsten ist die manuelle Berechnung:
dat.STRAIN$cq_wpkonf <- (dat.STRAIN$cq_wpkonf1 + dat.STRAIN$cq_wpkonf2 + 
         dat.STRAIN$cq_wpkonf3 + dat.STRAIN$cq_wpkonf4 + dat.STRAIN$cq_wpkonf5) / 5

Die meisten Beobachtungen liegen im Bereich zwischen 0 und 50. Wir sehen, dass die Scores rechtsschief verteilt sind.

hist(dat.STRAIN$cq_wpkonf)


  1. Die Scores werden in einem Boxplot nach den Altersklassen dargestellt.
boxplot(cq_wpkonf ~ Altersklasse, dat.STRAIN)

Die Work-Privacy Konflikte sind bei den jüngsten und ältesten Alterskategorien am tiefsten. Dies scheint plausibel.


Cronbachsches \(\alpha\)

Aufgaben

  1. Berechnen Sie das Cronbachsche \(\alpha\) mittels der R-Funktion alpha() des Pakets psych. Lesen sie aus dem Resultat das Cronbachsche \(\alpha\) und das standardisierte Cronbachsche \(\alpha\). Sind diese genügend hoch (vgl. Richtwerte in Vorlesungsunterlagen)? Lesen Sie ebenso aus dem Resultat, bei welchen Variablen das Weglassen zu einem höheren bzw. tieferen Cronbachsche \(\alpha\) führt (Abschnitt Reliability if an item is dropped). Finden Sie heraus, welche Variable den tiefsten Zusammenhang mit dem Summenscore hat (Abschnitt Item statistics). Machen Sie sich zum Schluss nochmals bewusst, wie das Cronbachsche \(\alpha\) interpretiert werden sollte. Insbesondere: kann man aus einem guten Cronbachsche \(\alpha\) auf Eindimensionalität schliessen?
  2. (Optional) Berechnen Sie anhand der Formeln aus der Vorlesung das Cronbachsche \(\alpha\) und das standardisierte Cronbachsche \(\alpha\) mit den folgenden Funktionen: var (Cronbachsches \(\alpha\)) cor, lower.tri (standardisiertes Cronbachsches \(\alpha\))

Lösungen

alpha(x = dat.STRAIN[, c(
      "cq_wpkonf1", "cq_wpkonf2", "cq_wpkonf3", "cq_wpkonf4", "cq_wpkonf5")])
## 
## Reliability analysis   
## Call: alpha(x = dat.STRAIN[, c("cq_wpkonf1", "cq_wpkonf2", "cq_wpkonf3", 
##     "cq_wpkonf4", "cq_wpkonf5")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N    ase mean sd median_r
##        0.9       0.9    0.89      0.64 8.8 0.0071   29 22     0.65
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.88   0.9  0.91
## Duhachek  0.88   0.9  0.91
## 
##  Reliability if an item is dropped:
##            raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## cq_wpkonf1      0.87      0.87    0.85      0.63 6.9   0.0092 0.0099  0.62
## cq_wpkonf2      0.87      0.87    0.84      0.62 6.4   0.0097 0.0105  0.63
## cq_wpkonf3      0.88      0.88    0.85      0.64 7.0   0.0090 0.0069  0.63
## cq_wpkonf4      0.86      0.86    0.83      0.60 6.1   0.0102 0.0085  0.61
## cq_wpkonf5      0.90      0.90    0.88      0.70 9.2   0.0073 0.0024  0.70
## 
##  Item statistics 
##              n raw.r std.r r.cor r.drop mean sd
## cq_wpkonf1 500  0.85  0.85  0.80   0.76   34 26
## cq_wpkonf2 500  0.87  0.87  0.84   0.79   30 27
## cq_wpkonf3 500  0.85  0.84  0.80   0.75   33 27
## cq_wpkonf4 500  0.89  0.89  0.87   0.82   27 26
## cq_wpkonf5 500  0.75  0.76  0.66   0.62   20 24

Das Cronbachsche \(\alpha\) und das standardisierte Cronbachsche \(\alpha\) betragen \(0.9\) und \(0.9\). Diese Werte sind gemäss den Richtwerten aus der Vorlesung sehr gut. Das Weglassen der Variablen 1 bis 4 führt je zu einem tieferen Cronbachschen \(\alpha\), und das Weglassen der fünften Variablen zu einem höherem. Die fünfte Variable hat den tiefsten Zusammenhang mit dem Summenscore. Das Cronbachsche \(\alpha\) ist ausschliesslich eine Kennzahl für die interne Konsistenz der Variablen, und ist keine Kennzahl für die Eindimensionalität des Konstrukts.


  1. (Optional) Berechnen Sie anhand der Formeln aus der Vorlesung das Cronbachsche \(\alpha\) und das standardisierte Cronbachsche \(\alpha\) mit den folgenden Funktionen: var (Cronbachsches \(\alpha\)) cor, lower.tri (standardisiertes Cronbachsches \(\alpha\))

Cronbachsches alpha:

5 / (5 - 1) * (1 - (var(dat.STRAIN$cq_wpkonf1) + var(dat.STRAIN$cq_wpkonf2) + 
                          var(dat.STRAIN$cq_wpkonf3) + var(dat.STRAIN$cq_wpkonf4) + 
                          var(dat.STRAIN$cq_wpkonf5)) / var(5 * dat.STRAIN$cq_wpkonf))
## [1] 0.8985107

Standardisiertes Cronbachsches alpha:

    cor.cq_wpkonf <- cor(x = dat.STRAIN[, c(
      "cq_wpkonf1", "cq_wpkonf2", "cq_wpkonf3", "cq_wpkonf4", "cq_wpkonf5")])
    (5 * mean(cor.cq_wpkonf[lower.tri(cor.cq_wpkonf)])) / 
      (1 + (5 - 1) * mean(cor.cq_wpkonf[lower.tri(cor.cq_wpkonf)]))
## [1] 0.8978818

Korrelationskoeffizienten

Aufgaben

  1. In der Vorlesung wurden die folgenden vier Korrelationskoeffizienten betrachtet:

    • Pearson-Korrelation (R-Funktion cor(x, method = "pearson"))
    • Spearman-Korrelation (R-Funktion cor(x, method = "spearman"))
    • Tetrachorische Korrelation (R-Funktion psych::tetrachoric(x))
    • Polychorische Korrelation (R-Funktion psych::polychoric(x))

    Berechnen Sie alle diese Korrelationskoeffizienten für die Variablen zu Work-Privacy Konflikten der STRAIN-Daten. Bei welchem Korrelationskoeffizienten sind die Korrelationen am tiefsten bzw. höchsten? Gibt es Anzeichen auf mehrere latente Variablen?

    Hinweis: Für die tetrachorische Korrelation müssen Sie die Variablen zuerst diskretisieren. Kodieren Sie dazu die Kategorien \(0\) und \(25\) als \(0\) und die Kategorien \(50\), \(75\) und \(100\) als \(1\). In R kann dazu die Funktion recode() des R-Pakets likert verwendet werden. Betrachten Sie folgendes Beispiel, um die Funktion recode() zu verstehen:

likert::recode(x = c(0, 0, 100, 50, 100), from = c(0, 50, 100), to = c(0, 1, 1))
## [1] 0 0 1 1 1

Legen Sie die dichotomisierten Variablen als neue Variablen im data.framedat.STRAIN` an.

Für die polychorische Korrelation müssen Sie die die numerischen Werte 0, 25, 50, 75 und 100 zu den Werten 1, 2, 3, 4, 5 diskretisieren. In R kann dazu wiederum die Funktion recode() verwendet werden. Betrachten Sie folgendes Beispiel, um die Funktion recode() zu verstehen:

likert::recode(
      x = c(100, 0, 75, 50, 25, 100, 100), 
      from = c(0, 25, 50, 75, 100), 
      to = c(1, 2, 3, 4, 5))
## [1] 5 1 4 3 2 5 5
  1. Bei dieser letzten Aufgabe sollen vier Datensätze den vier in der Vorlesung behandelten Korrelationskoeffizienten zugeordnet werden. Die Datei umfasst vier Datensätze (R-Objekte) dat1, dat2, dat3 und dat4. Benützen Sie für die Zuordnung die Funktion pairs.panels und begründen Sie diese. Der funktionale Zusammenhang der Variablen kann mittels den eingezeichneten roten Hilfslinien beurteilt werden. Berechnen Sie anschliessend die geeignete Korrelationsmatrix mithilfe der Funktionen cor, tetrachoric und polychoric.

Laden Sie den Datensatz so (natürlich muss die wd individuell angepasst werden):

load("~/Documents/Git/fm-msc-bfh/Exercises/Latent constructs/Simulationsdaten.RData")

Lösungen

Pearson-Korrelation:

cor.Pearson <- cor(x = dat.STRAIN[, c(
      "cq_wpkonf1", "cq_wpkonf2", "cq_wpkonf3", "cq_wpkonf4", "cq_wpkonf5")],
      method = "pearson")
    cor.Pearson
##            cq_wpkonf1 cq_wpkonf2 cq_wpkonf3 cq_wpkonf4 cq_wpkonf5
## cq_wpkonf1  1.0000000  0.7267348  0.6709312  0.6554320  0.5167773
## cq_wpkonf2  0.7267348  1.0000000  0.6353824  0.7273329  0.5872147
## cq_wpkonf3  0.6709312  0.6353824  1.0000000  0.7616160  0.4863276
## cq_wpkonf4  0.6554320  0.7273329  0.7616160  1.0000000  0.6071124
## cq_wpkonf5  0.5167773  0.5872147  0.4863276  0.6071124  1.0000000

Spearman-Korrelation:

cor.Spearman <- cor(x = dat.STRAIN[, c(
      "cq_wpkonf1", "cq_wpkonf2", "cq_wpkonf3", "cq_wpkonf4", "cq_wpkonf5")],
      method = "spearman")
cor.Spearman
##            cq_wpkonf1 cq_wpkonf2 cq_wpkonf3 cq_wpkonf4 cq_wpkonf5
## cq_wpkonf1  1.0000000  0.7105369  0.6475230  0.6303238  0.4814448
## cq_wpkonf2  0.7105369  1.0000000  0.5933514  0.6961124  0.5487884
## cq_wpkonf3  0.6475230  0.5933514  1.0000000  0.7461451  0.4399462
## cq_wpkonf4  0.6303238  0.6961124  0.7461451  1.0000000  0.5820596
## cq_wpkonf5  0.4814448  0.5487884  0.4399462  0.5820596  1.0000000

Daten dichotomisieren und als neue Variablen anlegen (nötig für tetrachorische Korrelation)

 old <- c(0, 25, 50, 75, 100)
    new <- c(0, 0, 1, 1, 1)
    dat.STRAIN$cq_wpkonf1_D <- 
      likert::recode(x = dat.STRAIN$cq_wpkonf1, from = old, to = new)
    dat.STRAIN$cq_wpkonf2_D <- 
      likert::recode(x = dat.STRAIN$cq_wpkonf2, from = old, to = new)
    dat.STRAIN$cq_wpkonf3_D <- 
      likert::recode(x = dat.STRAIN$cq_wpkonf3, from = old, to = new)
    dat.STRAIN$cq_wpkonf4_D <- 
      likert::recode(x = dat.STRAIN$cq_wpkonf4, from = old, to = new)
    dat.STRAIN$cq_wpkonf5_D <- 
      likert::recode(x = dat.STRAIN$cq_wpkonf5, from = old, to = new)

Tetrachorische Korrelation:

cor.Tetra <- tetrachoric(x = dat.STRAIN[, c(
      "cq_wpkonf1_D", "cq_wpkonf2_D", "cq_wpkonf3_D", "cq_wpkonf4_D", "cq_wpkonf5_D")])$rho
cor.Tetra
##              cq_wpkonf1_D cq_wpkonf2_D cq_wpkonf3_D cq_wpkonf4_D cq_wpkonf5_D
## cq_wpkonf1_D    1.0000000    0.7700853    0.7090214    0.6638207    0.5359769
## cq_wpkonf2_D    0.7700853    1.0000000    0.6654100    0.8116567    0.6114332
## cq_wpkonf3_D    0.7090214    0.6654100    1.0000000    0.8395068    0.4770408
## cq_wpkonf4_D    0.6638207    0.8116567    0.8395068    1.0000000    0.6535000
## cq_wpkonf5_D    0.5359769    0.6114332    0.4770408    0.6535000    1.0000000

Für die polychorische Korrelation die Kategorien 0, 25, 50, 75 und 100 zu 1, 2, 3, 4, 5 rekodieren und als neue Variablen anlegen

old <- c(0, 25, 50, 75, 100)
    new <- c(1, 2, 3, 4, 5)
    dat.STRAIN$cq_wpkonf1_5 <- 
      likert::recode(x = dat.STRAIN$cq_wpkonf1, from = old, to = new)
    dat.STRAIN$cq_wpkonf2_5 <- 
      likert::recode(x = dat.STRAIN$cq_wpkonf2, from = old, to = new)
    dat.STRAIN$cq_wpkonf3_5 <- 
      likert::recode(x = dat.STRAIN$cq_wpkonf3, from = old, to = new)
    dat.STRAIN$cq_wpkonf4_5 <- 
      likert::recode(x = dat.STRAIN$cq_wpkonf4, from = old, to = new)
    dat.STRAIN$cq_wpkonf5_5 <- 
      likert::recode(x = dat.STRAIN$cq_wpkonf5, from = old, to = new)

Polychorische Korrelation:

cor.Poly <- polychoric(x = dat.STRAIN[, c(
      "cq_wpkonf1_5", "cq_wpkonf2_5", "cq_wpkonf3_5", "cq_wpkonf4_5", "cq_wpkonf5_5")])$rho
cor.Poly
##              cq_wpkonf1_5 cq_wpkonf2_5 cq_wpkonf3_5 cq_wpkonf4_5 cq_wpkonf5_5
## cq_wpkonf1_5    1.0000000    0.7926158    0.7331178    0.7260703    0.5975020
## cq_wpkonf2_5    0.7926158    1.0000000    0.6950425    0.7934766    0.6695461
## cq_wpkonf3_5    0.7331178    0.6950425    1.0000000    0.8282382    0.5538076
## cq_wpkonf4_5    0.7260703    0.7934766    0.8282382    1.0000000    0.6872652
## cq_wpkonf5_5    0.5975020    0.6695461    0.5538076    0.6872652    1.0000000

Korrelationen im Überblick (kann auch aus obigen Resultaten gelesen werden)

# Dieser Code muss nicht interpretiert werden können
cor.Tabelle <- rbind(
      cor.Pearson[lower.tri(cor.Pearson)],
      cor.Spearman[lower.tri(cor.Spearman)],
      cor.Tetra[lower.tri(cor.Tetra)],
      cor.Poly[lower.tri(cor.Poly)])
    colnames(cor.Tabelle) <- 
      c("1-2", "1-3", "1-4", "1-5", "2-3", "2-4", "2-5", "3-4", "3-5", "4-5")
    rownames(cor.Tabelle) <- 
      c("Pearson", "Spearman", "Tetrachori", "Polychoric")
cor.Tabelle
##                  1-2       1-3       1-4       1-5       2-3       2-4
## Pearson    0.7267348 0.6709312 0.6554320 0.5167773 0.6353824 0.7273329
## Spearman   0.7105369 0.6475230 0.6303238 0.4814448 0.5933514 0.6961124
## Tetrachori 0.7700853 0.7090214 0.6638207 0.5359769 0.6654100 0.8116567
## Polychoric 0.7926158 0.7331178 0.7260703 0.5975020 0.6950425 0.7934766
##                  2-5       3-4       3-5       4-5
## Pearson    0.5872147 0.7616160 0.4863276 0.6071124
## Spearman   0.5487884 0.7461451 0.4399462 0.5820596
## Tetrachori 0.6114332 0.8395068 0.4770408 0.6535000
## Polychoric 0.6695461 0.8282382 0.5538076 0.6872652

Die tetrachorischen und polychorischen Korrelationen sind am höchsten, und die Pearson- und Spearman-Korrelationen die tiefsten. Es gibt keine eindeutigen Anzeichen auf mehrere latenten Variablen. Die Korrelationen zwischen den ersten vier Variablen sind in etwa gleich hoch. Die fünfte Variable ist generell weniger korreliert und könnte allenfalls (wie bereits erwähnt) weggelassen werden.

Bemerkung: Bei der polychorischen Korrelation gibt es eine Warnmeldung zu leeren Zellen. Allenfalls müsste man einige der ordinalen Kategorien zusammenlegen.


  1. Laden der Datensätze:
load("Simulationsdaten.RData")

Die Datei umfasst vier Datensätze (R-Objekte) dat1, dat2, dat3 und dat4. Benützen Sie für die Zuordnung die Funktion pairs.panels und begründen Sie diese. Der funktionale Zusammenhang der Variablen kann mittels den eingezeichneten roten Hilfslinien beurteilt werden. Berechnen Sie anschliessend die geeignete Korrelationsmatrix mithilfe der Funktionen cor(), tetrachoric() und polychoric().

dat1:

pairs.panels(dat1)

Da es sich um numerisch-skalierte Variablen handelt, kommen nur die Pearson- und die Spearman-Korrelationskoeffizienten in Frage. Bei einigen Variablenpaaren, insbesondere bei x2 und x3, gibt Anzeichen auf Nichtlinearitäten. Darum empfiehlt sich die Verwendung der Spearman-Korrelation.

cor(x = dat1, method = "spearman")
##           x1        x2        x3        x4
## x1 1.0000000 0.4601772 0.4930607 0.1628990
## x2 0.4601772 1.0000000 0.4705316 0.2062585
## x3 0.4930607 0.4705316 1.0000000 0.2255911
## x4 0.1628990 0.2062585 0.2255911 1.0000000

dat2:

pairs.panels(dat2)

Offensichtlich handelt es sich um dichotom-skalierte Variablen. Von daher empfiehlt es sich, die tetrachorische Korrelation zu verwenden.

tetrachoric(x = dat2)
## Call: tetrachoric(x = dat2)
## tetrachoric correlation 
##    x1   x2   x3   x4  
## x1 1.00               
## x2 0.51 1.00          
## x3 0.58 0.53 1.00     
## x4 0.21 0.30 0.19 1.00
## 
##  with tau of 
##    x1    x2    x3    x4 
## -0.23 -0.24  0.34  0.13

dat3:

pairs.panels(dat3)

Wiederum handelt es sich um numerisch-skalierte Variablen. Da es keine Anzeichen auf Nichtlinearitäten gibt, kann die Pearson-Korrelation verwendet werden.

cor(x = dat3, method = "pearson")
##           x1        x2        x3        x4
## x1 1.0000000 0.4917538 0.5081634 0.2039891
## x2 0.4917538 1.0000000 0.4824948 0.2202393
## x3 0.5081634 0.4824948 1.0000000 0.2277957
## x4 0.2039891 0.2202393 0.2277957 1.0000000

dat4:

pairs.panels(dat4)

In diesem Fall ist sind die Variablen ordinal-skaliert. Darum sollte die polychorische Korrelation verwendet werden.

polychoric(x = dat4)
## Call: polychoric(x = dat4)
## Polychoric correlations 
##    x1   x2   x3   x4  
## x1 1.00               
## x2 0.58 1.00          
## x3 0.45 0.49 1.00     
## x4 0.18 0.26 0.23 1.00
## 
##  with tau of 
##        1     2
## x1 -0.98 -0.20
## x2 -1.64 -1.26
## x3 -1.54 -0.99
## x4 -0.95 -0.29