2013-09-25 12 views
7

Ich bin Neuling in R-Skripte :-)Korrelation Corrplot Konfiguration

ich aufbauen muß eine Korrelationsmatrix und I'am versucht, einige Parameter zu konfigurieren, die graph.I anzupassen ist mit corrplot Paket.

Ich baute eine corrplot Matrix auf diese Weise:

corrplot(cor(d1[,2:14], d1[,2:14]), method=c("color"), 
     bg = "white", addgrid.col = "gray50", 
     tl.cex=1, type="lower", tl.col = "black", 
     col = colorRampPalette(c("red","white","blue"))(100)) 

ich die Werte der Korrelation in der unteren Matrix zeigen müssen .. innerhalb der Farbmatrix, die ich gebaut. Wie kann ich das tun?

Ist es möglich, die Hauptdiagonale von der unteren Matrix auszuschließen? In dieser Diagonale haben wir immer die perfekte Korrelation :-)

Die anderen Zweifel .. Ich möchte die signifikanten Werte für die Korrelation mit Sternen anstelle von Quadraten zeigen. mögen (*, , *). Ist es möglich?

Können Sie mir helfen Jungs?

+0

Kann 'low.tri'-Funktion hilfreich sein? Schauen Sie sich '' lower.tri' –

Antwort

9

Mit ein bisschen Hacker können Sie dies in einem sehr ähnlichen R-Paket, corrgram. Mit diesem können Sie ganz einfach eigene Panel-Funktionen definieren und sie als Vorlagen einfach anzeigen lassen. Hier ist der einige Code und Gestalt hergestellt:

set.seed(42) 
library(corrgram) 

# This panel adds significance starts, or NS for not significant 
panel.signif <- function (x, y, corr = NULL, col.regions, digits = 2, cex.cor, 
          ...) { 
    usr <- par("usr") 
    on.exit(par(usr)) 
    par(usr = c(0, 1, 0, 1)) 
    results <- cor.test(x, y, alternative = "two.sided") 
    est <- results$p.value 
    stars <- ifelse(est < 5e-4, "***", 
        ifelse(est < 5e-3, "**", 
         ifelse(est < 5e-2, "*", "NS"))) 
    cex.cor <- 0.4/strwidth(stars) 
    text(0.5, 0.5, stars, cex = cex.cor) 
} 

# This panel combines edits the "shade" panel from the package 
# to overlay the correlation value as requested 
panel.shadeNtext <- function (x, y, corr = NULL, col.regions, ...) 
{ 
    if (is.null(corr)) 
    corr <- cor(x, y, use = "pair") 
    ncol <- 14 
    pal <- col.regions(ncol) 
    col.ind <- as.numeric(cut(corr, breaks = seq(from = -1, to = 1, 
               length = ncol + 1), include.lowest = TRUE)) 
    usr <- par("usr") 
    rect(usr[1], usr[3], usr[2], usr[4], col = pal[col.ind], 
     border = NA) 
    box(col = "lightgray") 
    on.exit(par(usr)) 
    par(usr = c(0, 1, 0, 1)) 
    r <- formatC(corr, digits = 2, format = "f") 
    cex.cor <- .8/strwidth("-X.xx") 
    text(0.5, 0.5, r, cex = cex.cor) 
} 

# Generate some sample data 
sample.data <- matrix(rnorm(100), ncol=10) 

# Call the corrgram function with the new panel functions 
# NB: call on the data, not the correlation matrix 
corrgram(sample.data, type="data", lower.panel=panel.shadeNtext, 
     upper.panel=panel.signif) 

enter image description here

Der Code ist nicht sehr sauber, da sie meist zusammen Funktionen aus dem Paket gepatcht ist, aber es sollte Ihnen einen guten Start geben die Handlung zu bekommen Sie wollen. Möglicherweise können Sie mit dem corrplot Paket auch einen ähnlichen Ansatz machen.

Update: Hier ist eine Version mit Sternen und cor auf demselben Dreieck:

panel.shadeNtext <- function (x, y, corr = NULL, col.regions, ...) 
{ 
    corr <- cor(x, y, use = "pair") 
    results <- cor.test(x, y, alternative = "two.sided") 
    est <- results$p.value 
    stars <- ifelse(est < 5e-4, "***", 
        ifelse(est < 5e-3, "**", 
         ifelse(est < 5e-2, "*", ""))) 
    ncol <- 14 
    pal <- col.regions(ncol) 
    col.ind <- as.numeric(cut(corr, breaks = seq(from = -1, to = 1, 
               length = ncol + 1), include.lowest = TRUE)) 
    usr <- par("usr") 
    rect(usr[1], usr[3], usr[2], usr[4], col = pal[col.ind], 
     border = NA) 
    box(col = "lightgray") 
    on.exit(par(usr)) 
    par(usr = c(0, 1, 0, 1)) 
    r <- formatC(corr, digits = 2, format = "f") 
    cex.cor <- .8/strwidth("-X.xx") 
    fonts <- ifelse(stars != "", 2,1) 
    # option 1: stars: 
    text(0.5, 0.4, paste0(r,"\n", stars), cex = cex.cor) 
    # option 2: bolding: 
    #text(0.5, 0.5, r, cex = cex.cor, font=fonts) 
} 

# Generate some sample data 
sample.data <- matrix(rnorm(100), ncol=10) 

# Call the corrgram function with the new panel functions 
# NB: call on the data, not the correlation matrix 
corrgram(sample.data, type="data", lower.panel=panel.shadeNtext, 
     upper.panel=NULL) 

enter image description here

ebenfalls kommentiert out ist eine andere Art und Weise Bedeutung zeigt, wird es fett diejenigen unter einen Schwellenwert anstatt Sterne zu verwenden. Je nach dem, was Sie zeigen möchten, ist das klarer.

+0

Hi .. @blmoore an Ist es möglich, Sterne als Korrelationswert in Quadrate zusammenzufassen und nur die halbe Matrix zu verwenden? – Corintho

+2

Ja, ich habe meine Antwort mit einem Beispiel aktualisiert, wie Sie das tun können, hoffe, dass – blmoore

+0

es einfach hilft, eine Legende für die Farben hinzuzufügen? wie mein erstes Beispiel. Also danke !!! Du hilfst mir sehr! @blmoore :-) – Corintho