Как отобразить матрицу корреляций с отсутствующими записями?

10

Я хотел бы получить графическое представление корреляций в статьях, которые я собрал до сих пор, чтобы легко изучить взаимосвязи между переменными. Раньше я рисовал (грязный) график, но у меня сейчас слишком много данных.

В основном у меня есть таблица с:

  • [0]: имя переменной 1
  • [1]: имя переменной 2
  • [2]: значение корреляции

«Общая» матрица неполна (например, у меня есть корреляция V1 * V2, V2 * V3, но не V1 * V3).

Есть ли способ графически представить это?

Coronier
источник

Ответы:

12

Основываясь на ответе @ GaBorgulya, я бы предложил попробовать график колебаний или уровней (он же отображает тепловую карту).

Например, используя ggplot2 :

library(ggplot2, quietly=TRUE)
k <- 100
rvals <- sample(seq(-1,1,by=.001), k, replace=TRUE)
rvals[sample(1:k, 10)] <- NA
cc <- matrix(rvals, nr=10)
ggfluctuation(as.table(cc)) + opts(legend.position="none") + 
  labs(x="", y="")

(Здесь пропущенные записи отображаются серым цветом, но цветовую схему по умолчанию можно изменить, а в легенде также можно указать «NA».)

введите описание изображения здесь

или

ggfluctuation(as.table(cc), type="color") + labs(x="", y="") +
  scale_fill_gradient(low = "red",  high = "blue")

(Здесь пропущенные значения просто не отображаются. Однако вы можете добавить geom_text()и отобразить что-то вроде «NA» в пустой ячейке.)

введите описание изображения здесь

хл
источник
2
+1 за ggfluctuation, не видел этого раньше! В этом посте есть другой полезный код для визуализации этого типа датера: stackoverflow.com/questions/5453336/…
Chase
@Chase (+1) Thx. Кстати, кажется, у меня были некоторые проблемы с моей цветовой схемой для отрицательных значений корреляции.
хл
Изменение порядка строк и столбцов с помощью ( hclust(…)$order) [ stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html] визуализацию будет часто легче просматривать .
ГаБоргуля
@GaBorgulya Хороший вопрос. Я использую это, когда делаю предварительный анализ данных, а переменные не имеют определенного порядка (как в случае пространственных или временных данных или структурированных данных, которые вы хотите видеть как есть). mixOmics::cimФункция очень хорошо для этого. Связанная проблема обсуждалась здесь, stats.stackexchange.com/questions/8370/… .
хл
5

Ваши данные могут быть как

  name1 name2 correlation
1    V1    V2         0.2
2    V2    V3         0.4

Вы можете переставить свой длинный стол в широкий с помощью следующего кода R

d = structure(list(name1 = c("V1", "V2"), name2 = c("V2", "V3"), 
    correlation = c(0.2, 0.4)), .Names = c("name1", "name2", 
    "correlation"), row.names = 1:2, class = "data.frame")
k = d[, c(2, 1, 3)]
names(k) = names(d)
e = rbind(d, k)
x = with(e, reshape(e[order(name2),], v.names="correlation", 
  idvar="name1", timevar="name2", direction="wide"))
x[order(x$name1),]

Ты получаешь

  name1 correlation.V1 correlation.V2 correlation.V3
1    V1             NA            0.2             NA
3    V2            0.2             NA            0.4
4    V3             NA            0.4             NA

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

GaBorgulya
источник
2
reshapeпакет может быть полезным. Как только вы это сделаете e, рассмотрите что-то вроде:library(reshape) cast(melt(e), name1 ~ name2)
Погоня
3

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

Смотрите принятый ответ в этой теме для примера визуализации.

Ирис Цуй
источник