Verschiedene Skalenniveaus bei Korrelationsmatrix && R Code

Bivariate Korrelation, partielle Korrelation und Rangkorrelation.

Verschiedene Skalenniveaus bei Korrelationsmatrix && R Code

Beitragvon umb1 » Do 20. Jul 2017, 23:40

Hallo!

Ich habe ein paar Fragen. Ich habe neun Variablen, welche alle - bis auf eine - intervallskaliert sind. Eine davon ist ordinal skaliert.
Wenn ich jetzt eine Korrelationsmatrix mit allen neun Variablen haben möchte, um alle Variablen miteinander in Zusammenhang zu bringen - rechne ich dann bei allen einen nichtparametrischen Test (also Spearman)? Oder rechne ich die Korrelationen zwischen den intervallskalierten Variablen mit Pearson und nur die Korrelationen zwischen der einen ordinalen Variable und den anderen intervallskalierten Variablen mit Spearman?

Und ich bin ein ziemlicher newb, was R angeht. Könnte da mal jemand einen Blick über meinen Code werfen? Es muss nicht schön sein - es soll am Ende nur das richtige ausspucken :D

Um den Code etwas verständlicher zu machen:
Ich habe verschiedene Fragebögen, welche verschiedene Konstrukte messen. Aus den Items bilde ich dann neue Vektoren mit Summenscores oder den Durchschnittswerten der entsprechenden Items.
Zuerst lade ich nötige Libs, dann setze ich das WD. Danach bilde ich aus verschiedenen Items einen Summenscore für das Konstrukt "HSNS". Danach Durchschnittswerte für die Konstrukte Narzissmus, Machiavellismus und Psychopathie. Danach noch mal einen Summenscore für das Konstrukt "technik".
Da ich rcorr() für die Korrelationen nutze (um direkt die Korrelationskoeffizienten und p-Werte als Matrix zu haben), muss ich meine ganzen Vektoren noch in eine Matrix umwandeln und diese dann an rcorr() verfütterm.
Das ist der Code:

Code: Alles auswählen
#Libaries laden
library("psych", lib.loc="~/R/win-library/3.4")
library("Hmisc", lib.loc="~/R/win-library/3.4")

#Working Directory setzen, CSV laden
setwd("blub")
ergebnisse<-read.csv("bereinigt.csv", header=1, sep = ";", dec=",")
attach(ergebnisse)

##Gibt Summenscore für HSNS zurück
items_hsns <- c("hsns_v_43", "hsns_v_44","hsns_v_45","hsns_v_46","hsns_v_47",
                "hsns_v_48", "hsns_v_49","hsns_v_50","hsns_v_51","hsns_v_52")
scaleKey_hsns <- c(1,1,1,1,1,1,1,1,1,1)
results_hsns <- scoreItems(keys = scaleKey_hsns, items = ergebnisse[items_hsns],
                       totals = TRUE, missing = FALSE, min = 1,
                       max = 7)
sumscore_hsns <- results_hsns$scores



## Gibt Mittelwerte für D3 zurück
#narzissmus
items_d3_n <- c("d3_v_36", "d3_v_39","d3_v_42")
scaleKey_d3_n <- c(1,1,1)
results_d3_n <- scoreItems(keys = scaleKey_d3_n, items = ergebnisse[items_d3_n],
                           totals = FALSE, missing = FALSE, min = 1,
                           max = 9)
avg_d3_n <- results_d3_n$scores


#machiavellismus
items_d3_m <- c("d3_v_34", "d3_v_37","d3_v_40")
scaleKey_d3_m <- c(1,1,1)
results_d3_m <- scoreItems(keys = scaleKey_d3_m, items = ergebnisse[items_d3_m],
                           totals = FALSE, missing = FALSE, min = 1,
                           max = 9)
avg_d3_m <- results_d3_m$scores

#psychopathie
items_d3_p <- c("d3_v_35", "d3_v_38","d3_v_41")
scaleKey_d3_p <- c(1,1,1)
results_d3_p <- scoreItems(keys = scaleKey_d3_p, items = ergebnisse[items_d3_p],
                           totals = FALSE, missing = FALSE, min = 1,
                           max = 9)
avg_d3_p <- results_d3_p$scores



##Gibt Mittelwert für Technik zurück
items_technik <- c("technik_v_6", "technik_v_7","technik_v_8","technik_v_9",
                   "technik_v_10","technik_v_11","technik_v_12","technik_v_13")
scaleKey_technik <- c(1,1,1,1,1,1,1,1)
results_technik <- scoreItems(keys = scaleKey_technik, items = ergebnisse[items_technik],
                           totals = FALSE, missing = FALSE, min = 1,
                           max = 5)
avg_technik <- results_technik$scores


#Matrix
ergebnisse_matrix <- matrix(c(sumscore_hsns, avg_d3_n, avg_d3_m, avg_d3_p, alter,
                              dauer, anz_a, anz_b, avg_technik), nrow=115, ncol=9)
colnames(ergebnisse_matrix) <- c("hsns", "narzissmus", "machiavellismus", "psychopathie",
                                 "alter", "dauer", "anz_a", "anz_b", "technik")


##Korrelation
rcorr(ergebnisse_matrix, type="pearson")
umb1
Beobachter
Beobachter
 
Beiträge: 19
Registriert: Do 20. Jul 2017, 23:06
Danke gegeben: 3
Danke bekommen: 0 mal in 0 Post

Re: Verschiedene Skalenniveaus bei Korrelationsmatrix && R C

Beitragvon bele » Fr 21. Jul 2017, 14:33

Hallo umb1,

herzlich willkommen.

Wenn ich jetzt eine Korrelationsmatrix mit allen neun Variablen haben möchte, um alle Variablen miteinander in Zusammenhang zu bringen - rechne ich dann bei allen einen nichtparametrischen Test (also Spearman)?


Warum willst Du eine solche Korrelationsmatrix haben? Die ist doch kein Selbstzweck, sondern dient irgendeiner Aufgabe. Denke über die Aufgabe dahinter nach, dann fällt Dir wahrscheinlich die Antwort leichter.

Könnte da mal jemand einen Blick über meinen Code werfen?


Klar, aber davor zwei Anmerkungen. In diesem Forum sind die meisten nicht in R unterwegs - deshalb ist es nicht das ideale Forum, um R Code zu diskutieren. Es gibt zwei deutschsprachige Foren zum Thema R-Statistik. In einem gibt es sehr viel häufiger und schneller Antworten und die Antworten sind die besseren. Such mal, welches das für Dich richtige sein könnte.
Zweitens: Code anschauen ohne irgendwelche Daten zu haben, über die der Code laufen könnte, ist immer schlecht. Auch wenn es Englisch ist, lies Dir folgende Seite mal durch. Die ist gut für alle Code-Fragen, die Du in Deinem Leben stellen wirst: https://stackoverflow.com/help/mcve

Es muss nicht schön sein - es soll am Ende nur das richtige ausspucken


Schöner Code ist eine große Hilfe auf dem Weg zu richtigem Code. Versuche, schönen Code zu erstellen. Soweit ist Dein Code aber schon recht schön geschrieben: Keine übermäßigen Kommentare, aber Du weißt, wie man kommentiert. Sprechende Variablennamen, die auch dem nicht-eingeweihten etwas sagen, vernünftige Zeilenumbrüche, das ist gut. Dass Du die Spalten über Ihren Namen und nicht über ihre Nummer ansprichst gibt Bonuspunkte zum Thema schöner Code.

Was ins Auge springt ist das
Code: Alles auswählen
attach(ergebnisse)


Ich weiß, das kommt in Codebeispielen wahnsinnig häufig vor und doch ist es überflüssig und verleitet zu Fehlern. Wenn ich das richtig sehe, dann braucht Dein Code gar keine Veränderungen, wenn man das attach() einfach weg lässt und attach() weg lassen ist meistens eine gute Idee.

Du betreibst ziemlich viel Aufwand mit der Funktion scoreItems. Wenn die Rohdaten gut sind, geht das mit rowSums() kürzer, aber vielleicht ist Dein Weg sicherer.

Code: Alles auswählen
ergebnisse_matrix <- matrix(c(sumscore_hsns, avg_d3_n, avg_d3_m, avg_d3_p, alter,
                              dauer, anz_a, anz_b, avg_technik), nrow=115, ncol=9)


Das fliegt Dir um die Ohren, wenn noch ein Datensatz dazu kommt oder gelöscht werden muss und die Zahl der Zeilen nicht mehr 115 ist. Schöner ist es wahrscheinlich, die ganzen Vektoren in eine dataframe zu sammeln und diesen Dataframe dann in eine Matrix umzuwandeln. Das funktioniert dann unabhängig von der Zeilenzahl.

Sonst gefällt mir Dein Code (ohne Daten zum Spielen angeschaut) gut!

LG,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 5771
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 15
Danke bekommen: 1353 mal in 1340 Posts

folgende User möchten sich bei bele bedanken:
umb1

Re: Verschiedene Skalenniveaus bei Korrelationsmatrix && R C

Beitragvon umb1 » Fr 21. Jul 2017, 15:32

Vielen Dank Bernhard für deine Antwort!
(Und danke für die Blumen beim R-Code, lol)

/*Edit: Wegen des Codes noch mal. Ich bin mir bewusst, dass schöner und auch flexibler Code besser ist. Bei Zeiten (wenn ich mehr Zeit zur Verfügung habe) setze ich mich vielleicht noch mal ran und passe an. Aber für den Moment reicht mir die Aussage, dass ich damit das ausrechne, was ich angedacht habe auszurechnen ;) */

Zur Matrix:
bele hat geschrieben:Warum willst Du eine solche Korrelationsmatrix haben? Die ist doch kein Selbstzweck, sondern dient irgendeiner Aufgabe. Denke über die Aufgabe dahinter nach, dann fällt Dir wahrscheinlich die Antwort leichter.


Ich habe vier Persönlichkeitsmerkmale, welche ich gerne in Verbindung mit bestimmten Tätigkeiten bringen möchte. Darüber hinaus (unabhängig von den aufgestellten Hypothesen) erhebe ich allerdings noch weitere Merkmale: beispielsweise das Alter der Versuchsteilnehmer, die Dauer, die sie für die entsprechende Tätigkeit benötigen und die Häufigkeit, mit welcher die beschriebene Tätigkeit überhaupt ausgeführt wird. Diese zuletzt genannten Merkmale, welche nicht Teil der Hypothesen sind, kann ich allerdings ganz gut in der Diskussion meiner Arbeit verwenden.

Jetzt, wo du es sagst, ist es aber eventuell sinnvoller, wenn ich nicht alles in eine Tabelle klatsche, sondern nur die Korrelationen, welche direkten Bezug zu den Hypothesen besitzen. Die restlichen Korrelationen kann ich ja ggf. gesondert verarbeiten.

Allerdings habe ich noch eine Frage: Wenn ich meine mittels Pearson-Korrelation ermittelten Korrelationskoeffizienten auf Signifikanz überprüfen möchte, dann müssen die Merkmale normalverteilt sein. Richtig? Das sind sie bei mir allerdings nicht. Ich kann diese "Voraussetzung" der Normalverteilung allerdings übergehen, wenn ich eine ausreichend große Stichprobe besitze. Ist das auch korrekt? Ich konnte bei Google allerdings keine zitierbare Quelle finden, welche mir das bescheinigt. Sofern meine Annahmen korrekt sind: Weißt du (oder jemand anderes) eine Quelle?
umb1
Beobachter
Beobachter
 
Beiträge: 19
Registriert: Do 20. Jul 2017, 23:06
Danke gegeben: 3
Danke bekommen: 0 mal in 0 Post

Re: Verschiedene Skalenniveaus bei Korrelationsmatrix && R C

Beitragvon bele » Fr 21. Jul 2017, 17:18

umb1 hat geschrieben:Allerdings habe ich noch eine Frage: Wenn ich meine mittels Pearson-Korrelation ermittelten Korrelationskoeffizienten auf Signifikanz überprüfen möchte, dann müssen die Merkmale normalverteilt sein. Richtig?


Schlimmer. Sie sollten bivariat normalverteilt sein. ( http://www.fernuni-hagen.de/ksw/neuesta ... l/fbf.html )

Das sind sie bei mir allerdings nicht.

Nichts im wirklichen Leben ist normalverteilt, alles nur angenähert normalverteilt. Das klingt wie eine feinsinnige Plattitüde, ist es aber nicht. Wenn Du eine "ausreichend große Stichprobe" hast, werden Tests auf Normalverteilung diese Abweichungen feststellen. Das ist aber noch lange kein Grund, den Pearson Test nicht zu verwenden.

Mach den visuellen Test: Plotte Deine Daten und schau, ob die Ellipsenform gegeben ist. Wenn Du ganz massive Abweichungen hast, hast Du vielleicht größere Probleme als nur den Test. Lies mal hier unter "Zusammenfassung von heterogenen Gruppen": http://matheguru.com/stochastik/272-kor ... tizitaet-5

LG,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 5771
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 15
Danke bekommen: 1353 mal in 1340 Posts

Re: Verschiedene Skalenniveaus bei Korrelationsmatrix && R C

Beitragvon umb1 » Sa 22. Jul 2017, 15:53

Puh, da bin ich ja etwas naiv an meine Auswertung gegangen :D
Habe die wichtigsten Daten mal als Plot dargestellt:

Machiavellismus, Pearson r=.02, p=.808
Narzissmus, Pearson r=.26, p=.006
Psychopathie, Pearson r=-.06, p=.539
HSNS, Pearson r=.24, p=.011


Rechne ich den Shapiro-Wilk-Test, dann ergibt sich:
Machiavellismus: p=.001
Narzissmus: p=.057
Psychopathie: p=.000
HSNS: p=.479
Technik: p=.001

Die p-Werte sind alle auf 3 Stellen nach dem Komma gerundet.
Bei den Plots mit Narzissmus und HSNS kann ich mit viel Vorstellungskraft und beiden Augen zugedrückt irgendetwas ellipsenartiges erkennen.
Ist es dann möglich mit der Pearson-Korrelation (bzw. dem Test auf Signifikanz) zu rechnen? Bzw. was bedeutet das jetzt für die Berechnungen der Zusammenhänge der Variablen Machiavellismus <->Technik und Psychopathie <->Technik? Die können meiner Meinung nach doch auch gar keine elliptische Form annehmen, da die Korrelationskoeffizienten ja beinahe 0 sind.

Entschuldige die vielen Anfänger-Fragen!

Liebe Grüße.
umb1
Beobachter
Beobachter
 
Beiträge: 19
Registriert: Do 20. Jul 2017, 23:06
Danke gegeben: 3
Danke bekommen: 0 mal in 0 Post

Re: Verschiedene Skalenniveaus bei Korrelationsmatrix && R C

Beitragvon bele » Sa 22. Jul 2017, 19:35

Was soll man sagen? Ich würde die r- und p-Werte so berichten, wie sie sind, aber wenn Du Dich damit unwohl fühlst, dann berichte halt die Spearman-Korrelationen.

Was den Shapiro-Wilk-Test angeht: Schon die Tatsache, dass Du nur ganzzahlige Werte hast, ist eine Abweichung von der Normalverteilung. Beispiel zur Demonstration:
Code: Alles auswählen
> set.seed(42)
> # 115 Zufallswerte, sicher normalverteilt
> werte <- rnorm(115, mean=10, sd=2)
> head(werte)
[1] 12.741917  8.870604 10.726257 11.265725 10.808537
[6]  9.787751
> # shapiro.test sollte nicht signifikant werden
> shapiro.test(werte)

   Shapiro-Wilk normality test

data:  werte
W = 0.98613, p-value = 0.2861

> # nun runden wir auf ganze werte
> gerundet <- round(werte)
> head(gerundet)
[1] 13  9 11 11 11 10
> # jetzt wieder shapiro.test
> shapiro.test(gerundet)

   Shapiro-Wilk normality test

data:  gerundet
W = 0.97003, p-value = 0.0111


LG,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 5771
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 15
Danke bekommen: 1353 mal in 1340 Posts

Re: Verschiedene Skalenniveaus bei Korrelationsmatrix && R C

Beitragvon umb1 » So 23. Jul 2017, 22:24

Okay. Dann werde ich das mal so tun.
Vielen Dank für deine Hilfe!
umb1
Beobachter
Beobachter
 
Beiträge: 19
Registriert: Do 20. Jul 2017, 23:06
Danke gegeben: 3
Danke bekommen: 0 mal in 0 Post


Zurück zu Korrelationen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron