Таблицы корреляции отображения как нисходящий список
При запуске cor() в серии времен с большим количеством переменных я получаю таблицу назад, у которой есть строка и столбец для каждой переменной, показывающая корреляцию между ними.
Как я могу рассматривать эту таблицу как список из наиболее коррелированных до наименее коррелированных (исключая все результаты и результаты NA, которые отображаются обратно к себе (т.е. отношение A к A)). Я также хотел бы считать обратные (отрицательные) результаты абсолютными значениями, но все же показать их как отрицательные.
Таким образом, желаемый результат будет примерно таким:
A,B,0.98
A,C,0.9
C,R,-0.8
T,Z,0.5
Ответы
Ответ 1
Вот один из многих способов, я мог бы подумать об этом. Я использовал пакет 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))
Ответ 2
Использование базы 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),]
Ответ 3
Замените ...
на ваш корреляционный вызов.
library(reshape)
x <- subset(melt(cor(...)), value != 1 | value != NA)
x <- x[with(x, order(-abs(x$value))),]
Если вы получаете много НС в своих корреляциях, попробуйте использовать аргумент use="complete.obs"
в вашем корреляционном вызове.