Найти пару наиболее коррелированных переменных

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

2 ответа

Решение

Решение с использованием corrr:

corrr - это пакет для исследования корреляций в R. Он ориентирован на создание и работу с фреймами данных корреляций.

library(corrr)
matrix(rnorm(100), 5) %>%
    correlate() %>% 
    stretch() %>% 
    arrange(r)

Решение с использованием reshape2 & data.table:

Вы можете reshape2::melt (импортировано с data.table) cor результат и порядок (сортировка) по значениям корреляции.

library(data.table)
corMatrix <- cor(matrix(rnorm(100), 5))
setDT(melt(corMatrix))[order(value)]

dplyr + tidyr решение:

set.seed(123)
mat = matrix(rnorm(50), nrow = 10, ncol = 5)
colnames(mat) = paste0("X", 1:5)

library(dplyr)
library(tidyr)

cor(mat) %>%
  as.data.frame() %>%
  mutate(var1 = rownames(.)) %>%
  gather(var2, value, -var1) %>%
  arrange(desc(value))

Поскольку мы знаем, что корреляционные матрицы симметричны (cor(X1, X2)==cor(X2, X1)), мы можем group_byvalues столбец и удалите дубликаты:

cor(mat) %>%
  as.data.frame() %>%
  mutate(var1 = rownames(.)) %>%
  gather(var2, value, -var1) %>%
  arrange(desc(value)) %>%
  group_by(value) %>%
  filter(row_number()==1)

Результат:

# A tibble: 11 x 3
# Groups:   value [11]
    var1  var2       value
   <chr> <chr>       <dbl>
 1    X1    X1  1.00000000
 2    X4    X1  0.67301956
 3    X2    X1  0.57761512
 4    X4    X2  0.27131880
 5    X5    X4  0.07453706
 6    X5    X3  0.02265933
 7    X5    X2 -0.25201740
 8    X5    X1 -0.34863673
 9    X3    X1 -0.40595930
10    X4    X3 -0.43726491
11    X3    X2 -0.56734869
Другие вопросы по тегам