Как нарисовать линию вокруг значимых значений в пакете R corrplot

Меня попросили получить график корреляции для соавтора. Я предпочитаю использовать для этой задачи R, а именно пакет corplot. Я изучал информацию в Интернете и Я нашел несколько способов получить такую ​​графику, но не конкретную графику, которую меня просили (как вы можете значения выделяются путем рисования квадрата вокруг значимой плитки), что меня озадачивает.

Требуется пример графика корреляции

Ближайший результат, которого я достиг, - это использовать код под этими строками, но я, похоже, не могу найти возможность рисовать линию вокруг значимых плиток (если существует).

#Insignificant correlations are leaved blank
corrplot(res3$r, type="upper", order="hclust", 
         p.mat = res3$P, sig.level = 0.01, insig = "blank")

Я попытался добавить параметр «адрес», но это не сработало.

#Insignificant correlation are crossed
corrplot(res3$r, type="upper", order="hclust", p.mat = res3$P,
         addrect=2, sig.level = 0.01, insig = "blank")

Любая помощь будет оценена.


person JLLavin    schedule 23.01.2017    source источник
comment
вы можете найти, границы каких ячеек должны быть изменены путем проверки матрицы pvalue, а затем применить это решение: stackoverflow.com/questions/40538304/ (адрес ps связан с кластеризацией)   -  person user20650    schedule 23.01.2017
comment
Спасибо за ответ user20650   -  person JLLavin    schedule 25.01.2017


Ответы (1)


corrplot позволяет добавлять новые графики к уже существующим. Поэтому, как только вы создали график исходной корреляционной матрицы, вы можете просто добавить те ячейки, которые вы хотите выделить, итеративно, используя corrplot(..., add = TRUE).

Единственное, что требуется для достижения вашей цели, — это вектор индексов (который я назвал «id»), чтобы сообщить R, какие ячейки выделить. Обратите внимание, что для простоты я взял случайную sample исходной корреляционной матрицы, но такие вещи, как ids <- which(p.value < 0.01) (при условии, что вы сохранили свои уровни значимости в отдельном векторе) будут работать аналогично.

library(corrplot)

## create and visualize correlation matrix
data(mtcars)
M <- cor(mtcars)

corrplot(M, cl.pos = "n", na.label = " ")

## select cells to highlight (e.g., statistically significant values)
set.seed(10)
ids <- sample(1:length(M), 15L)

## duplicate correlation matrix and reject all irrelevant values
N <- M
N[-ids] <- NA

## add significant cells to the initial corrplot iteratively 
for (i in ids) {
  O <- N
  O[-i] <- NA
  corrplot(O, cl.pos = "n", na.label = " ", addgrid.col = "black", add = TRUE, 
           bg = "transparent", tl.col = "transparent")
}

corrplot

Обратите внимание, что вы также можете добавить все значения для выделения за один раз (т. е. без цикла for) с помощью corrplot(N, ...), но в этом случае вокруг области построения появится нежелательное черное поле.

person fdetsch    schedule 23.01.2017