2013-09-25 32 views
7

I am newbie trong kịch bản R :-)Tương Corrplot Cấu hình

tôi cần xây dựng một ma trận tương quan và I'am cố gắng để tinh chỉnh một số thông số để thích ứng với graph.I đang sử dụng corrplot gói.

tôi xây dựng một ma trận corrplot theo cách này:

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

Tôi cần hiển thị các giá trị của mối tương quan trong ma trận thấp .. bên trong ma trận màu mà tôi xây dựng. làm thế nào tôi có thể làm điều đó?

Có thể loại trừ đường chéo chính khỏi ma trận dưới không? Trong diagonla này chúng ta luôn có sự tương quan hoàn hảo :-)

Nghi ngờ khác .. tôi muốn hiển thị các giá trị quan trọng cho sự tương quan bằng cách sử dụng các sao thay vì hình vuông. như (*, , *). Có thể không?

Bạn có thể giúp tôi không?

+0

Chức năng 'lower.tri' có thể hữu ích không? Hãy xem '? Lower.tri' –

Trả lời

9

Với một chút hackery, bạn có thể thực hiện việc này trong một gói R rất giống nhau, corrgram. Điều này cho phép bạn dễ dàng xác định các chức năng bảng điều khiển của riêng bạn và giúp chúng dễ dàng xem dưới dạng mẫu. Dưới đây là một số mã và con số sản xuất:

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

Mã này không phải là rất sạch sẽ, vì nó chủ yếu là vá lại với nhau chức năng từ gói, nhưng nó sẽ cho bạn một khởi đầu tốt để có được những âm mưu bạn muốn. Có thể bạn cũng có thể có cách tiếp cận tương tự với gói corrplot.

update: Dưới đây là một phiên bản với các ngôi sao và cor trên cùng một tam giác:

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

Cũng đã nhận xét ra là một cách khác để thể hiện tầm quan trọng, nó sẽ đậm những dưới một ngưỡng thay vì sử dụng các ngôi sao. Có thể rõ ràng hơn theo cách đó, tùy thuộc vào những gì bạn muốn hiển thị.

+0

Hi .. @blmoore Có thể đặt các ngôi sao lại với nhau như giá trị correlacion trong một ô vuông và chỉ sử dụng ma trận một nửa không? – Corintho

+2

Có, tôi đã cập nhật câu trả lời của tôi với một ví dụ về cách bạn có thể làm điều đó, hy vọng rằng sẽ giúp – blmoore

+0

dễ dàng thêm chú thích cho màu sắc? giống như ví dụ của tôi. Cảm ơn bạn !!! Bạn giúp tôi rất nhiều! @blmoore :-) – Corintho

Các vấn đề liên quan