2013-09-25 4 views
7

Я новичок в скриптах R :-)Корреляция Corrplot Конфигурация

мне нужно построить корреляционную матрицу и I'am пытается конфигурировать некоторые параметры для адаптации graph.I я использую corrplot пакет.

Я построил 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)) 

Мне нужно показать значение корреляции в нижней матрице .. внутри цветовой матрицы, что я построил. как я могу это сделать?

Возможно ли исключить главную диагональ от нижней матрицы? В этой диагоне всегда есть идеальная корреляция :-)

Другое сомнение .. Я хочу показать значимые значения для корреляции, используя звезды вместо квадратов. как (*, , *). Является ли это возможным?

Помогите мне, ребята?

+0

Может ли функция 'lower.tri' быть полезной? Взгляните на '? Lower.tri' –

ответ

9

С небольшим количеством хакерства вы можете сделать это в очень похожей 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

Смежные вопросы