Korrelationsmatrix mit Signifikanzen

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

Antworten
nulli
Beiträge: 14
Registriert: So Jan 24, 2021 3:34 pm

Korrelationsmatrix mit Signifikanzen

Beitrag 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
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Korrelationsmatrix mit Signifikanzen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
nulli
Beiträge: 14
Registriert: So Jan 24, 2021 3:34 pm

Re: Korrelationsmatrix mit Signifikanzen

Beitrag 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
nulli
Beiträge: 14
Registriert: So Jan 24, 2021 3:34 pm

Re: Korrelationsmatrix mit Signifikanzen

Beitrag 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...
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Korrelationsmatrix mit Signifikanzen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
nulli
Beiträge: 14
Registriert: So Jan 24, 2021 3:34 pm

Re: Korrelationsmatrix mit Signifikanzen

Beitrag 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 :?
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Korrelationsmatrix mit Signifikanzen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
nulli
Beiträge: 14
Registriert: So Jan 24, 2021 3:34 pm

Re: Korrelationsmatrix mit Signifikanzen

Beitrag 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!
Antworten