Какова хорошая стратегия, чтобы получить хороший обзор больших корреляционных матриц или пар? - PullRequest
30 голосов
/ 29 сентября 2011

Часто некоторые data.frame содержат более 20 переменных, и вы хотите получить первый обзор (структуры корреляции).Даже на 30-дюймовом экране вы быстро исчерпываете пространство, и понять сообщение очень сложно. Существуют ли какие-либо устоявшиеся стратегии, чтобы подчеркнуть то, что важно? Я знаю, что этот вопрос несколько общий, но я задавался вопросом снова и снова и никогда не имелпанацея, чтобы вылечить это. И да, я слышал о summary.

Ответы [ 5 ]

16 голосов
/ 29 сентября 2011

Ну, я просто должен написать о своем пакете здесь:)

Вы можете использовать qgraph для визуализации корреляционной матрицы как сети. Это будет отображать переменные как узлы, а корреляции - как ребра, соединяющие узлы. Зеленые края указывают на положительные корреляции, а красные края указывают на отрицательные корреляции. Чем шире и насыщеннее края, тем сильнее абсолютная корреляция.

Например, (это первый пример со страницы справки), следующий код построит матрицу корреляции набора данных с 240 переменными.

library("qgraph")
data(big5)
data(big5groups)
qgraph(cor(big5),minimum=0.25,cut=0.4,vsize=2,groups=big5groups,legend=TRUE,borders=FALSE)
title("Big 5 correlations",line=-2,cex.main=2)

enter image description here

Вы также можете кластеризовать сильно коррелированные узлы вместе (использует Fruchterman-Reingold), что создает довольно четкое представление о том, как на самом деле выглядит структура вашей корреляционной матрицы:

enter image description here

И многое другое. Дополнительные примеры можно найти на моем сайте:

http://sachaepskamp.com/?page_id=73

11 голосов
/ 29 сентября 2011

Я использовал heatmap() (или, скорее, базовую image() функцию) для этой цели. У меня больше нет удобного кода, и, насколько я помню, мне пришлось возиться с картой цветов, чтобы получить что-то, что имело смысл для диапазона [-1, 1].

Вот простой пример:

R> set.seed(42)
R> X <- matrix(rnorm(100*20), nrow=100)
R> XC <- cor(X)
R> image(XC)        # color range could do with improvements here

correlation as image() plot

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

9 голосов
/ 29 сентября 2011

А как насчет PCA на матрице корреляции? Тогда угол между переменными показывает их корреляцию.

library(HSAUR)
heptathlon
round(cor(heptathlon[,-8]),2)   # correlations [without score]

require(vegan)
PCA <-  rda(heptathlon[,-8], scale=TRUE)   # run a PCA
biplot(PCA, display = "species")   # correlation biplot
#  The angles between descriptors in the biplot reflect their correlations

enter image description here

9 голосов
/ 29 сентября 2011

С pairs вы можете быстро сгенерировать несколько матриц рассеяния. Если присутствует слишком много переменных, вы можете использовать один из инструментов Rattle:

enter image description here Другие примеры по адресу: http://rattle.togaware.com/rattle-screenshots.html

На самом деле сама rattle не выполняет большую часть анализа (как правильно указал dwin), но она предлагает (imho) простые инструменты для быстрого запуска pca, дерева корреляции, корреляционной матрицы, как указано выше, без необходимости манипулирования вашим набором данных для убедитесь, что, например, в наборе данных присутствуют только числовые переменные, ...

3 голосов
/ 29 сентября 2011

Часто структура столбца матрицы может быть представлена ​​в случайном порядке. В этом случае, я бы хотел изменить порядок. Для визуализации и работы с разреженными матрицами я часто выполняю некоторый вид переупорядочения, такой как Reverse Cuthill-McKee или некоторая другая форма переупорядочения пропускной способности, и это может применяться к другим контекстам для упрощения визуализации.

Для матрицы корреляции вы можете раздавить корреляции низкой величины (например, в пределах (-eps, + eps)), чтобы создать разреженность, а затем изменить порядок, чтобы изучить структуру.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...