Seite 1 von 1

Korrelationsmatrix mit Signifikanzen

Verfasst: Mo Jun 14, 2021 9:25 pm
von nulli
Hallo,

gerne würde ich in meiner Korrelationstabelle die Signifikanzen angeben. Das würde ich dann wie folgt angeben:
1. Etwa pro Wert das Signifikanz-Sternchen einfügen: *p < .05; **p < .01; ***p < .001
2. oder, falls dem so ist, schreibe ich "Alle Korrelationen sind statistisch signifikant, p < .001"

folgendes Beispiel:

Code: Alles auswählen

Variable1 <- c(1.1, 2.3, 3.1, 4.2, 5)
Variable2 <- c(1.6, 1.9, 2.0, 3.1, 4)
Variable3 <- c(1.5, 2.5, 3.4, 3.6, 3.9)
Variable4 <- c(2.9, 3, 4.4, 4.5, 5)
Variable5 <- c(2.2, 2.3, 2.5, 3.1, 3.2)
Variable6 <- c(3.5, 3.9, 4.1, 4.2, 4.8)
data <- data.frame(Variable1, Variable2, Variable3, Variable4, Variable5, Variable6)

subset_cor <- subset(data, select = c(Variable1, Variable2, Variable3, Variable4, Variable5, Variable6)) 
korr_tab <- cor(subset_cor) 

round(korr_tab, digits = 2) %>%  
  knitr::kable(caption = "Korrelationsmatrix", align = "c")  
Jetzt habe ich meine Korrelatioxsmatrix, aber nicht die Signifikanzen. Gibt es dafür auch einen Befehl, dass die Signifikanz pro Wert berechnet und übersichtlich ausgegeben wird?

Alternativ müsste ich für jede Zeile die Korrelation berechnen und mir die Signifikanz abschreiben:

Code: Alles auswählen

cor.test(Variable2 ~ Variable1, data = data)
cor.test(Variable3 ~ Variable1, data = data)
cor.test(Variable4 ~ Variable1, data = data)
cor.test(Variable5 ~ Variable1, data = data)
cor.test(Variable6 ~ Variable1, data = data)
cor.test(Variable3 ~ Variable2, data = data)
cor.test(Variable4 ~ Variable2, data = data)
# usw...
Das wäre aber ziemlich aufwendig und ich müsste die ggf. die Tabelle in Excel nachbauen und dann die Signifikanz-Sternchen pro Wert einfügen :-( Gibt es dafür eine bessere/einfachere Lösung?

Liebe Grüße
nulli

Re: Korrelationsmatrix mit Signifikanzen

Verfasst: Mo Jun 14, 2021 10:09 pm
von bigben
Hallo nulli,

im Paket Hmisc gibt es die Funktion corr(). Die gibt Dir eine Matrix mit Korrelations-p-Werten aus. Da müsstest Du die Sternchen noch selbst machen.

Was genau hast Du mit Excel vor?

LG, Bernhard

Re: Korrelationsmatrix mit Signifikanzen

Verfasst: Di Jun 15, 2021 9:32 am
von nulli
Hallo Bernhard,

super, vielen Dank für den Hinweis. Die Funktion corr() ist genau das, was ich Suche!

Jetzt habe ich gerade ein Update für das Package "Hmsic" installiert und auf einmal gehen ganz andere Befehle nicht mehr, z.B. invertiere ich an einer Stelle Items

Code: Alles auswählen

data$LL01 <- recode(data$LL01, "1=5; 2=4; 3=3; 4=2; 5=1")
und da kommt jetzt folgende Fehlermeldung:
"Unreplaced values treated as NA as .x is not compatible. Please specify replacements exhaustively or supply .default"

Das war vorher aber problemlos möglich?

Ich fühl mich gerade ziemlich hilflos :oops:

Danke und liebe Grüße
nulli

Re: Korrelationsmatrix mit Signifikanzen

Verfasst: Di Jun 15, 2021 9:46 am
von nulli
Ich habs jetzt hinbekommen, indem ich den Befehl ändere:

Code: Alles auswählen

data$LL01 <- recode(data$LL01, `1`=5, `2`=4, `3`=3, `4`=2, `5`=1)
Aber ich kann nicht nachvollziehen, warum der alte Befehl auf einmal nicht mehr geht...

Re: Korrelationsmatrix mit Signifikanzen

Verfasst: Di Jun 15, 2021 11:35 am
von bigben
Was mit Deinem recode-Aufruf passiert weiß ich auch nicht. Der Funktionsname recode ist nicht sonderlich originell, sodass mehrere package-Autoren darauf gekommen sind. So gibt es recode im Paket car und im Paket dpylr und im Paket QCA und es würde mich wundern, wenn nicht auch noch in mehreren anderen Paketen. Welches jeweils genommen wird hängt davon ab, in welcher Reihenfolge die Pakete in Deine R-Sitzung eingebunden wurden.

Vor solchen Effekten kann man sich schützen, indem man den Paketnamen im Funktionsaufruf explizit angibt, eindeutig sind car:: recode(...) oder dplyr::recode(...).

Ggf geht es im vorliegenden Fall auch einfach mit

Code: Alles auswählen

data$LL01.inv <- 6 - data$LL01
HTH,
Bernhard

Re: Korrelationsmatrix mit Signifikanzen

Verfasst: Fr Jun 18, 2021 10:33 am
von nulli
Hallo Bernhard,

vielen Dank für den Hinweis. Ich hatte die Reihenfolge der Pakete geändert, was zu einigen Problemen geführt hat. :lol:

Die Darstellung der Korrelatioxsmatrix hat jetzt wunderbar funktioniert:

Code: Alles auswählen

library(Hmisc)
Variable1 <- c(1.1, 2.3, 3.1, 4.2, 5)
Variable2 <- c(1.6, 1.9, 2.0, 3.1, 4)
Variable3 <- c(1.5, 2.5, 3.4, 3.6, 3.9)
Variable4 <- c(2.9, 3, 4.4, 4.5, 5)
Variable5 <- c(2.2, 2.3, 2.5, 3.1, 3.2)
Variable6 <- c(3.5, 3.9, 4.1, 4.2, 4.8)
data <- data.frame(Variable1, Variable2, Variable3, Variable4, Variable5, Variable6)
rcorr(as.matrix(data))
Mit welchem Befehl kann ich mir nur die eine Hälfte (das lower triangle) der Korrelationen anzeigen lassen?

Ich habe das schon gegoogelt und mir ?rcorr angeschaut, aber leider finde ich nirgendwo den Befehl... Etwa suche ich falsch oder es ist einfach unglaublich mühsam :?

Re: Korrelationsmatrix mit Signifikanzen

Verfasst: Fr Jun 18, 2021 12:08 pm
von bigben
Hi!

Also wenn ich das google mit "r matrix lower triangle" als search term dann ist gleich der erste Treffer https://stat.ethz.ch/R-manual/R-devel/l ... r.tri.html

und damit kann man sowas machen:

Code: Alles auswählen

> (m2 <- matrix(1:20, 4, 5))
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20
> lower.tri(m2)
      [,1]  [,2]  [,3]  [,4]  [,5]
[1,] FALSE FALSE FALSE FALSE FALSE
[2,]  TRUE FALSE FALSE FALSE FALSE
[3,]  TRUE  TRUE FALSE FALSE FALSE
[4,]  TRUE  TRUE  TRUE FALSE FALSE
> m2 * lower.tri(m2)
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    2    0    0    0    0
[3,]    3    7    0    0    0
[4,]    4    8   12    0    0
> m2 * lower.tri(m2, diag = TRUE)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    2    6    0    0    0
[3,]    3    7   11    0    0
[4,]    4    8   12   16    0
LG,
Bernhard

Re: Korrelationsmatrix mit Signifikanzen

Verfasst: Fr Jun 18, 2021 1:14 pm
von nulli
Hallo Bernhard,

diese Seite hatte ich auch gesehen, aber dann scheint das Problem vor der Tastatur zu sitzen. :lol:

Kannst du mir erklären, wie ich lower.tri() mit rcorr(as.matrix(data)) kombinieren muss, damit ich das gewünschte Ergebnis erhalte?

Lieben Dank!