2013-09-25 22 views
7

Ben korelasyon matrisi inşa ihtiyaç ve bi'şey paketini corrplot kullanıyorum graph.I adapte bazı parametreler configurate çalışırkenKorelasyon Corrplot Yapılandırma

:-) R komut acemi değilim. i inşa renk matrisi içinde .. Ben alt matris içinde korelasyon değerlerini gösteren ihtiyaç

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

:

Ben corrplot matriksi bu şekilde inşa edilmiş. bunu nasıl yapabilirim

Ana köşegen alt matristen hariç tutulabilir mi? Bu diagonlada her zaman mükemmel korelasyona sahibiz :-)

Diğer şüphe… Ben kareler yerine yıldızları kullanarak korelasyon için anlamlı değerleri göstermek istiyorum. sevmek (*, , *). Mümkün mü?

Bana yardım edebilir misiniz beyler?

+0

Aşağıdan yükleme işlevi işe yarayabilir mi? 0'dan aşağıya bakın. –

cevap

9

Bir korsanlıkla, bunu çok benzer bir R paketinde, corrgram'da yapabilirsiniz. Bu, kendi panel işlevlerinizi kolayca tanımlamanıza olanak tanır ve yardımcı olarak şablonlarını görüntülemeyi kolaylaştırır.

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

çoğunlukla paketten araya fonksiyonları yamalı oluyor gibi kod, çok temiz değil, ama bu size arsa almak için iyi bir başlangıç ​​vermelidir: Burada üretilen kod ve şekil bazı bulunuyor İstediğiniz. Muhtemelen corrplot paketiyle de benzer bir yaklaşıma sahip olabilirsiniz.

güncelleme:

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

Ayrıca dışarı yorumladı, bir eşiğin altına o olacak cesur olanlar önemini gösteren bir başka yoludur: Burada aynı üçgen yıldız ve cor bir versiyonu Yıldızları kullanmak yerine. Göstermek istediğiniz şeye bağlı olarak, bu şekilde daha net olabilir.

+0

Merhaba .. @blmoore Yıldızları bir karedeki korelasyon değeri olarak birleştirmek ve sadece yarım matrisi kullanmak mümkün mü? – Corintho

+2

Evet Cevabımı, bunun nasıl yapılabileceğine dair bir örnekle güncelledim, umarım – blmoore

+0

, renklere kolay bir efsane ekler mi? benim ateşler örneğim gibi. Yani teşekkür ederim! Bana çok yardımcı oluyorsun! @blmoore :-) – Corintho

İlgili konular