R: использование corrplot для визуализации двух переменных (например, корреляции и p-значения) с использованием размера и цвета кругов - PullRequest
4 голосов
/ 26 февраля 2020

Я пытаюсь воссоздать чей-то образ с помощью corrplot. Это исходное изображение, которое я пытаюсь воссоздать:

enter image description here

Я использую следующий R-код:

corrplot(as.matrix(rgs), 
         method="circle", 
         type="upper", 
         col=brewer.pal(n=8, name="PuOr"), 
         tl.col="black", 
         tl.srt=45, 
         p.mat = as.matrix(pvalues), 
         sig.level = 0.05, 
         insig = "blank")

Что дает мне это:

enter image description here

Проблема, с которой я столкнулся, заключается в том, что цвет и размер кругов на моем графике основаны на корреляции, но в исходном изображении выше цвет кружков основан на корреляции, в то время как размер кружков основан на p-значениях. У меня есть p-значения в другом фрейме данных, называемом pvalues ​​(я фактически использую это в приведенном выше коде, чтобы определить, какие кружки следует показывать, а какие - не в нижних 3 строках). Мой вопрос: как я могу сделать так, чтобы цвет и размер зависели от двух разных переменных, как это было в исходном изображении? Это возможно даже с помощью corrplot?

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

То, что вы хотите, кажется невозможным с corrplot, если вы не взломаете его немного. Я просто добавил новый параметр size_vector, который используется при рисовании кругов. См. https://github.com/johannes-titz/corrplot/commit/9362f6a7c2fda794b5ef8895b77f0b2ff979092a для измененных строк.

# install the hacked version
devtools::install_github("johannes-titz/corrplot@size_parameter")
library(corrplot)
data(mtcars)
M <- cor(mtcars)
# get p values
p_vals_mat <- cor.mtest(mtcars)$p
corrplot(M, size_vector = 1-as.numeric(p_vals_mat))

enter image description here

Обратите внимание, что я использовал 1-p для размера ( малые значения р дают большие круги). Вы можете использовать любое значение от 0 до 1 для размера.

Также обратите внимание, что на исходном рисунке взаимосвязь между значением p и размером круга является нелинейной. Поэтому вы можете захотеть использовать какое-то преобразование, близкое к этим отношениям.

В любом случае я бы посоветовал не использовать такие цифры. p-значения сами по себе проблематичны c, но построение их с некоторым преобразованием не имеет для меня особого смысла. Размер корреляции, вероятно, самая важная информация, и график не отражает это. Это может привести к путанице.

PS: я не удосужился добавить легенду, но это не должно быть слишком сложно сделать с legend.

Небольшое обновление : Преобразование значений p может выглядеть примерно так:

transform_p <- function(x) {
  y <- 0.91 - (0.82) * (1 - exp(-3.82 * x))
  y
}

Что немного изменит размер кругов:

corrplot(M, size_vector = as.numeric(transform_p((p_vals_mat))))

enter image description here

Опять же, я не рекомендую его, но он должен быть немного ближе к исходному значению.

Если вы просто хотите получить верхний три angular, пропустите только p-значения верхнего трима angular:

upper_tri <- p_vals_mat[upper.tri(p_vals_mat, diag = T)]
corrplot(M, size_vector = transform_p(upper_tri), type = "upper")

enter image description here

2 голосов
/ 03 марта 2020

Возможно, этот человек использовал ggcor, который находится в стадии разработки. Если вы сделаете:

install.packages("devtools")
devtools::install_github("houyunhuang/ggcor")

library(ggplot2)
library(ggcor)

quickcor(fortify_cor(mtcars,cor.test = T), type = "upper") + 
  geom_circle2(aes(fill = r,r0 = p.value))

enter image description here

Размер может варьироваться в зависимости от значения p

fortify_cor(mtcars,cor.test = T)

создает таблицу корреляции, со значениями р

# A tibble: 121 x 8
   .row.names .col.names      r  p.value upper.ci lower.ci .row.id .col.id
 * <chr>      <chr>       <dbl>    <dbl>    <dbl>    <dbl>   <int>   <int>
 1 mpg        mpg         1     0.          1       1           11       1
 2 cyl        mpg        -0.852 6.11e-10   -0.716  -0.926       10       1
 3 disp       mpg        -0.848 9.38e-10   -0.708  -0.923        9       1
 4 hp         mpg        -0.776 1.79e- 7   -0.586  -0.885        8       1
 5 drat       mpg         0.681 1.78e- 5    0.832   0.436        7       1
 6 wt         mpg        -0.868 1.29e-10   -0.744  -0.934        6       1
 7 qsec       mpg         0.419 1.71e- 2    0.670   0.0820       5       1
 8 vs         mpg         0.664 3.42e- 5    0.822   0.410        4       1
 9 am         mpg         0.600 2.85e- 4    0.784   0.318        3       1
10 gear       mpg         0.480 5.40e- 3    0.710   0.158        2       1
...