Сделать прямоугольную angular матрицу значений корреляции в R, возможно используя corrplot - PullRequest
4 голосов
/ 14 марта 2020

Я хочу сделать матрицу значений корреляции в R. Однако я не сравниваю параметры с самими собой, так что это не ваш типичный график, который представляет собой треугольник и зеркально отражен по диагональной оси. У меня на самом деле уже есть значения корреляции .

Я только надеялся набрать функцию corrplot (из пакета corrplot ), которая производит изображения, подобные следующим:

picture

Мои данные, уже содержащие значения корреляции, которые я хочу построить, таковы:

            X    animal.1   animal.2     animal.3    animal.4   animal.5
1 parameter 1  0.10258087  0.3338782  0.150246554  0.07295133  0.2484152
2 parameter 2  0.04205748  0.4062727 -0.002101464  0.12068818  0.2951127
3 parameter 3  0.11264488  0.4114954  0.067145776  0.13361071  0.3246052
4 parameter 4 -0.02261649 -0.2426341  0.108042167 -0.12820517 -0.2005686
5 parameter 5 -0.01576384 -0.2300852  0.112941655 -0.12391976 -0.1906473
6 parameter 6 -0.09749030 -0.3110920  0.021994297 -0.13570257 -0.2557532

Я хочу, чтобы график выглядел как коррплот, но это будет полный прямоугольник. Мне нужны круги разного диаметра, два разных цвета для положительных или отрицательных значений и цветовой градиент вдоль стороны графика. По сути, мне нужна тема corrplot прямоугольной таблицы значений angular.

Я также попросил проверить, можно ли разместить звездочки над квадратами сетки со значительными (p <0,05) p-значениями. Я сейчас присоединяю файл dput матрицы p-значения </p>

structure(list(X = structure(1:6, .Label = c("parameter 1", "parameter 2", 
"parameter 3", "parameter 4", "parameter 5", "parameter 6"), class = "factor"), 
Animal.1 = c(0.2454906, 0.63471, 0.2019519, 0.7984066, 0.8587147, 
0.2698293), Animal.2 = c(0.000103586, 1.62e-06, 1.15e-06, 
0.005412082, 0.008451775, 0.000315107), Animal.3 = c(0.08796553, 
0.9810688, 0.447827, 0.2211191, 0.2007585, 0.8038392), Animal.4 = c(0.4094627, 
0.1713835, 0.1296492, 0.1460429, 0.1601174, 0.1236984), Animal.5 = c(0.004374306, 
0.000653099, 0.00016464, 0.02213469, 0.0298038, 0.003315349
)), .Names = c("X", "animal.1", "animal.2", "animal.3", "animal.4", 
"animal.5"), class = "data.frame", row.names = c(NA, -6L))

Ответы [ 2 ]

5 голосов
/ 14 марта 2020

Я думаю, вам просто нужно преобразовать свой df в матрицу и затем запустить функцию corrplot.

library(corrplot)

#Transform data to matrix
matrix_cor<-as.matrix(df[,-1])

#Set row names as df first column
row.names(matrix_cor)<-df[,1]

corrplot(matrix_cor,
         method = "circle")

corrplot

3 голосов
/ 14 марта 2020

Когда вы пометите этот вопрос с помощью ggplot2, я предоставлю вам способ сделать это с помощью ggplot2.

Во-первых, вам нужно изменить форму как информационного кадра, содержащего значения корреляции (здесь именуемого df), так и кадра с pvalues ​​(здесь названного df_pval). Для этого вы можете, например, использовать функцию pivot_longer из пакета tidyr (также входит в пакет tidyverse).

На кадре данных, содержащем pvalues, мы добавим столбец Label, чтобы пометить звездочкой все значения ниже 0,05.

library(tidyr)
library(dplyr)
library(ggplot2)

corr_values <- df %>% pivot_longer(-X, names_to = "Animal", values_to = "value") 

# Here an extract of the dataframe with correlation values after reshaping it:
  X           Animal    value
  <fct>       <chr>     <dbl>
1 parameter 1 animal.1 0.103 
2 parameter 1 animal.2 0.334 
3 parameter 1 animal.3 0.150 
4 parameter 1 animal.4 0.0730
5 parameter 1 animal.5 0.248 
6 parameter 2 animal.1 0.0421
corr_pval <- df_pval %>% 
  pivot_longer(-X, names_to = "Animal", values_to = "p.value") %>%
  mutate(Label = ifelse(p.value < 0.05, "*",NA)) 

# Here an extract of the dataframe obtained
  X           Animal    p.value Label
  <fct>       <chr>       <dbl> <chr>
1 parameter 1 animal.1 0.245    NA   
2 parameter 1 animal.2 0.000104 *    
3 parameter 1 animal.3 0.0880   NA   
4 parameter 1 animal.4 0.409    NA   
5 parameter 1 animal.5 0.00437  *    
6 parameter 2 animal.1 0.635    NA   

Затем вы можете использовать geom_point и geom_tile, чтобы получить карту тепла. Вы также можете настроить цвет, размер и т. Д. c .. вашего графика, передавая различные функции, такие как scale_size_continuous и scale_color_gradient.

Наконец, вы можете добавить звездочку для pvalues, вызвав новый фрейм данных corr_pval в geom_text и укажите соответствующий аргумент aesthetic:

library(ggplot2)

ggplot(corr_values, aes(x = X, y = Animal))+
  geom_tile(color = "black", fill = "white")+
  geom_point(aes(color = value, size = abs(value)))+
  scale_color_gradient2(low = "green", mid = "white", midpoint = 0, high = "red", name = "")+
  scale_size_continuous(range = c(5,15), name = "")+
  geom_text(data = corr_pval, aes(label = Label), size = 8, vjust = 0.7, hjust = 0.5)

Итак, вы должны получить что-то вроде этого:

enter image description here

...