Seite 1 von 1

Kombinierte Korrelationsmatrix (corrplot)

Verfasst: Mo Jun 24, 2024 10:17 am
von maf7wz
Hallo liebes Forum,

ich habe eine Excel-Tabelle mit 7 Spalten (Anhang), welche ich nach Spearman korrelieren möchte und dies als einen Korrelationsplot darstellen möchte.

Dabei möchte ich im oberen Dreieck die Spearman-Korrelationskoeffizienten r darstellen, und im unteren Dreieck die zugehörigen p-Werte. Meines Erachtens klappt das mit dem aktuellen R-Code (siehe hier unten direkt rein kopiert) separat auch schon recht gut, allerdings würde ich gerne diese beiden "Teildreiecke" in eine Grafik bringen, sodass also ein Quadrat quasi entsteht. Der aktuelle Code spuckt das separat aus, und ich bekomme das leider nicht hin.

Über eine Hilfestellung würde ich mich sehr freuen.

Vielen Dank im Voraus!


# Benötigte Pakete installieren (falls noch nicht installiert)
if (!requireNamespace("readxl", quietly = TRUE)) install.packages("readxl")
if (!requireNamespace("corrplot", quietly = TRUE)) install.packages("corrplot")
if (!requireNamespace("Hmisc", quietly = TRUE)) install.packages("Hmisc")
if (!requireNamespace("psych", quietly = TRUE)) install.packages("psych")
if (!requireNamespace("metan", quietly = TRUE)) install.packages("metan")
if (!requireNamespace("grid", quietly = TRUE)) install.packages("grid")
#if (!requireNamespace("gridExtra", quietly = TRUE)) install.packages("gridExtra")



# Benötigte Pakete laden
library(readxl) # Zum Lesen von Excel-Dateien
library(corrplot) # Für die Erstellung von Korrelationsplots
library(Hmisc) # Zum Berechnen der Korrelationen
library(psych)
library(metan)
library(grid)
#library(gridExtra)

file_path <- file.choose() # Öffnet ein Dialogfeld zur Auswahl einer Datei
data <- read_excel(file_path, sheet = 1, skip = 0) # Liest die Excel-Datei ein,
#das erste Blatt und ohne Zeilen zu überspringen

# Spaltennamen aus der Excel-Datei extrahieren
colnames_data <- colnames(data)

# Spearman-Korrelation berechnen
cor_matrix <- rcorr(as.matrix(data), type = "spearman")

# Korrelationsmatrix extrahieren
cor <- cor_matrix$r

# p-Werte extrahieren
p_values <- cor_matrix$P


# Plot der Korrelationskoeffizienten (oberes Dreieck)
corrplot(cor, method = "circle", type = "upper", order = "original",
addCoef.col = "black", tl.col = "black", tl.srt = 45, is.corr = TRUE,
diag = F, number.cex = 0.8, mar = c(0, 0, 0, 0),
title = NULL, col.col = "black", addrect = 3, number.digits = 3)

# Text im 45°-Winkel hinzufügen
grid.text("Spearman r", x = unit(0.95, "npc"), y = unit(0.47, "npc"),#x=unit größer: weiter nach rechts,
#y=unit größer: weiter hoch.
rot = 45, gp = gpar(fontsize = 15, fontface = "bold", col = "black"))


#---------------------------------------------------------------------------------------------------------------------

# Plot der p-Werte (unteres Dreieck):
# Funktion, um Signifikanzniveaus zu bestimmen
get_significance_stars <- function(p) {
if (p <= 0.001) {
return("***")
} else if (p <= 0.01) {
return("**")
} else if (p <= 0.05) {
return("*")
} else {
return("")
}
}

# Matrix für Signifikanzsterne initialisieren
signif_stars <- matrix("", nrow = nrow(p_values), ncol = ncol(p_values))

# Anwenden der Funktion auf die untere Dreiecksmatrix der p-Werte
for (i in 1:nrow(p_values)) {
for (j in 1:ncol(p_values)) {
if (i > j) { # Nur das untere Dreieck berücksichtigen
signif_stars[i, j] <- get_significance_stars(p_values[i, j])
}
}
}

# Benutzerdefinierte Farbpalette für p-Werte (0 = rot, max. ist schwarz)
color_palette <- colorRampPalette(c("red", "black"))(200)

# Plot der p-Werte (unteres Dreieck) mit angepasster Farbpalette
corrplot(p_values, method = "number", type = "lower", order = "original",
addCoef.col = "black", tl.col = "black", tl.srt = 45, is.corr = FALSE,
diag = FALSE, number.cex = 0.8, mar = c(0, 0, 0, 2), # Platz für Textfeld hinzufügen
col = color_palette, number.digits = 3)

# Signifikanzsterne im unteren Dreieck des Plots hinzufügen
for (i in 1:nrow(cor)) {
for (j in 1:ncol(cor)) {
if (i > j) { # Nur für das untere Dreieck
text(j, nrow(cor) - i + 0.8, signif_stars[i, j], col = "black", cex = 1.2) # y-Wert angepasst
}
}
}

# Textfeld unterhalb der Farbskala hinzufügen
mtext("p-values", side = 1, line = -1, at = 4, cex = 1.2, font = 2)
#line=...: kleinerer Wert=höhere Position; at=...: höherer Wert=weiter rechts

Re: Kombinierte Korrelationsmatrix (corrplot)

Verfasst: Di Jun 25, 2024 3:43 pm
von ruedi_br
Könnte das
https://taiyun.github.io/corrplot/
helfen?
VG Ruedi

Re: Kombinierte Korrelationsmatrix (corrplot)

Verfasst: Mi Jun 26, 2024 9:26 am
von maf7wz
Hallo Ruedi,

vielen Dank, ich schau mir das mal im Detail an.

Viele Grüße