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):
::recode(x = c(3, 1, 2, 3), from = c(1, 2, 3), to = c(0, 1, 1)) likert
## [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)
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:
Für die Analyse wurden die ordinal-skalierten Antwortekategorien wie folgt zu numerischen Werten rekodiert:
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.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.import()
Funktion aus rio
gemacht.library(rio)
<- import("~/Documents/Git/fm-msc-bfh/Exercises/Latent constructs/STRAIN.RData") dat.STRAIN
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 ...
R
-Funktion describe()
des
Pakets psych dazu verwenden (ev. haben Sie das obenn schon
erledigt).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?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?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
$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)) dat.STRAIN
Dann kann der Barplot erstellt werden. Es dafür einfacher, wenn man
die relevanten Variablen in ein neues data.frame
speichert.
<- dat.STRAIN[,c("cq_wpkonf1_FAC", "cq_wpkonf2_FAC", "cq_wpkonf3_FAC",
df "cq_wpkonf4_FAC", "cq_wpkonf5_FAC")] # Die relevanten Variablen in ein neues data frame speichern
<- likert(df) # Das data frame in ein likert Objekt umwandeln (siehe ?likert)
likert.objekt 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.
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.
cq_wpkonf1
,
cq_wpkonf2
, cq_wpkonf3
.
cq_wpkonf4
und cq_wpkonf5
.Fügen Sie die
Variable mit dem Namen cq_wpkonf dem Datensatz hinzu.$cq_wpkonf <- (dat.STRAIN$cq_wpkonf1 + dat.STRAIN$cq_wpkonf2 +
dat.STRAIN$cq_wpkonf3 + dat.STRAIN$cq_wpkonf4 + dat.STRAIN$cq_wpkonf5) / 5 dat.STRAIN
Die meisten Beobachtungen liegen im Bereich zwischen 0 und 50. Wir sehen, dass die Scores rechtsschief verteilt sind.
hist(dat.STRAIN$cq_wpkonf)
boxplot(cq_wpkonf ~ Altersklasse, dat.STRAIN)
Die Work-Privacy Konflikte sind bei den jüngsten und ältesten Alterskategorien am tiefsten. Dies scheint plausibel.
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?var
(Cronbachsches \(\alpha\)) cor
,
lower.tri
(standardisiertes Cronbachsches \(\alpha\))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.
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(x = dat.STRAIN[, c(
cor.cq_wpkonf "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
In der Vorlesung wurden die folgenden vier Korrelationskoeffizienten betrachtet:
cor(x, method = "pearson")
)cor(x, method = "spearman")
)psych::tetrachoric(x)
)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:
::recode(x = c(0, 0, 100, 50, 100), from = c(0, 50, 100), to = c(0, 1, 1)) likert
## [1] 0 0 1 1 1
Legen Sie die dichotomisierten Variablen als neue Variablen im
data.frame
dat.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:
::recode(
likertx = 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
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")
Pearson-Korrelation:
<- cor(x = dat.STRAIN[, c(
cor.Pearson "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(x = dat.STRAIN[, c(
cor.Spearman "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)
<- c(0, 25, 50, 75, 100)
old <- c(0, 0, 1, 1, 1)
new $cq_wpkonf1_D <-
dat.STRAIN::recode(x = dat.STRAIN$cq_wpkonf1, from = old, to = new)
likert$cq_wpkonf2_D <-
dat.STRAIN::recode(x = dat.STRAIN$cq_wpkonf2, from = old, to = new)
likert$cq_wpkonf3_D <-
dat.STRAIN::recode(x = dat.STRAIN$cq_wpkonf3, from = old, to = new)
likert$cq_wpkonf4_D <-
dat.STRAIN::recode(x = dat.STRAIN$cq_wpkonf4, from = old, to = new)
likert$cq_wpkonf5_D <-
dat.STRAIN::recode(x = dat.STRAIN$cq_wpkonf5, from = old, to = new) likert
Tetrachorische Korrelation:
<- tetrachoric(x = dat.STRAIN[, c(
cor.Tetra "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
<- c(0, 25, 50, 75, 100)
old <- c(1, 2, 3, 4, 5)
new $cq_wpkonf1_5 <-
dat.STRAIN::recode(x = dat.STRAIN$cq_wpkonf1, from = old, to = new)
likert$cq_wpkonf2_5 <-
dat.STRAIN::recode(x = dat.STRAIN$cq_wpkonf2, from = old, to = new)
likert$cq_wpkonf3_5 <-
dat.STRAIN::recode(x = dat.STRAIN$cq_wpkonf3, from = old, to = new)
likert$cq_wpkonf4_5 <-
dat.STRAIN::recode(x = dat.STRAIN$cq_wpkonf4, from = old, to = new)
likert$cq_wpkonf5_5 <-
dat.STRAIN::recode(x = dat.STRAIN$cq_wpkonf5, from = old, to = new) likert
Polychorische Korrelation:
<- polychoric(x = dat.STRAIN[, c(
cor.Poly "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
<- rbind(
cor.Tabelle lower.tri(cor.Pearson)],
cor.Pearson[lower.tri(cor.Spearman)],
cor.Spearman[lower.tri(cor.Tetra)],
cor.Tetra[lower.tri(cor.Poly)])
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.
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