2013-09-25 41 views
7

我R中的腳本新手:-)相關Corrplot配置

我需要建立一個相關矩陣和我'嘗試正在使用corrplot包configurate一些參數,以適應graph.I。

我建了一個corrplot矩陣是這樣的:

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)) 

我需要表現出較低的相關性矩陣的值..我建立的顏色矩陣內。我該怎麼做?

是否有可能排除低矩陣的主對角線?在這個diagonla總是我們有完美的相關:-)

另一個疑問..我想顯示使用星號,而不是正方形的相關性的重要價值。喜歡 (*, , *)。可能嗎?

你能幫助我的傢伙?

+0

'lower.tri'函數可以幫助嗎?看看'?lower.tri' –

回答

9

隨着一些hackery,你可以做一個非常類似的R包,corrgram。這個可以讓你輕鬆定義你自己的面板功能,並且有助於他們很容易地將它們看作模板。下面是一些代碼和數字產生:

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

的代碼是不是很乾淨,因爲它主要是從包中拼湊起來的功能,但它應該給你一個良好的開端,以獲得劇情你要。可能你也可以採用類似corrplot的方法。

更新:這裏的星星和肺心病在同一個三角形的一個版本:

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

而且註釋掉正顯示出顯着的另一種方式,它會大膽那些低於閾值而不是使用星星。可能會更清楚,取決於你想表現的東西。

+0

嗨.. @blmoore是否可以將星星放在一起作爲相關值在一個正方形中並僅使用半矩陣? – Corintho

+2

是的,我已經更新了我的答案,如何做到這一點,希望幫助 – blmoore

+0

輕鬆添加顏色的圖例?就像我的榜樣。 所以謝謝你!你幫了我很多! @blmoore :-) – Corintho