Отображать корреляционные таблицы как нисходящий список - PullRequest
13 голосов
/ 22 июля 2011

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

Как я могу просмотреть этотаблица как список из наиболее коррелированных и наименее коррелированных (исключая все результаты NA и результаты, которые отображаются обратно на себя (то есть корреляция между A и A)).Я также хотел бы считать обратные (отрицательные) результаты как абсолютные значения, но все равно отображать их как отрицательные.

Таким образом, желаемый результат будет выглядеть примерно так:

A,B,0.98
A,C,0.9
C,R,-0.8
T,Z,0.5

Ответы [ 3 ]

13 голосов
/ 22 июля 2011

Вот один из многих способов, которым я мог бы подумать сделать это.Я использовал пакет reshape, потому что мне было легко запомнить синтаксис melt(), но команду melt() можно было легко выполнить с помощью базовых команд R:

require(reshape)
## set up dummy data
a <- rnorm(100)
b <- a + (rnorm(100, 0, 2))
c <- a + b + (rnorm(100)/10)
df <- data.frame(a, b, c)
c <- cor(df)
## c is the correlations matrix

## keep only the lower triangle by 
## filling upper with NA
c[upper.tri(c, diag=TRUE)] <- NA

m <- melt(c)

## sort by descending absolute correlation
m <- m[order(- abs(m$value)), ]

## omit the NA values
dfOut <- na.omit(m)

## if you really want a list and not a data.frame
listOut <- split(dfOut, 1:nrow(dfOut))
10 голосов
/ 22 июля 2011

Использование базы R (где cors - матрица корреляции):

up <- upper.tri(cors)
out <- data.frame(which(up, arr.ind=TRUE), cor=cors[up])
out <- out[!is.na(out$cor),]
out[order(abs(out$cor), decreasing=TRUE),]
2 голосов
/ 22 июля 2011

Замените ... на ваш корреляционный вызов.

library(reshape)
x <- subset(melt(cor(...)), value != 1 | value != NA)
x <- x[with(x, order(-abs(x$value))),]

Если вы получаете много NA в ваших корреляциях, возможно, попробуйте использовать аргумент use="complete.obs" в вашем вызове корреляции.

...