Як відобразити матрицю кореляцій із відсутніми записами?


10

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

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

  • [0]: назва змінної 1
  • [1]: назва змінної 2
  • [2]: значення кореляції

"Загальна" матриця неповна (наприклад, у мене є кореляція V1 * V2, V2 * V3, але не V1 * V3).

Чи є спосіб це графічно представити?

Відповіді:


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. До речі, мабуть, у мене була певна проблема зі своєю кольоровою гамою щодо негативних значень кореляції.
chl

Упорядковуючи рядки та стовпці за допомогою ( hclust(…)$order) [ stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html], візуалізація буде часто простішою для огляду.
GaBorgulya

@GaBorgulya Добрий момент. Я використовую це, коли я роблю дослідницький аналіз даних, і змінні не мають конкретного порядку (як це було б у випадку з просторовими або часовими даними або структурованими даними, які ви хочете бачити як є). mixOmics::cimФункція дуже добре для цього. Тут було обговорено пов'язане питання, stats.stackexchange.com/questions/8370/… .
chl

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

Тепер ви можете використовувати методи візуалізації кореляційних матриць (принаймні тих, які можуть впоратися з відсутніми значеннями).


2
reshapeпакет може бути корисним. Отримавши eщось, подумайте про щось на кшталтlibrary(reshape) cast(melt(e), name1 ~ name2)
Чейз

3

corrplotПакет є корисною функцією для візуалізації кореляційних матриць. Він приймає матрицю кореляції як вхідний об'єкт і має кілька варіантів відображення самої матриці. Приємною особливістю є те, що він може упорядкувати ваші змінні за допомогою ієрархічної кластеризації або методів PCA.

Дивіться прийняту відповідь у цій темі для прикладу візуалізації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.