Создать таблицу, показывающую отсортированную абсолютную корреляцию различных переменных с другой серией - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу, чтобы в выходных данных отображалось имя каждой переменной X, ее корреляция со знаком для другой серии и ее абсолютная корреляция, отсортированная по убыванию абсолютной корреляции.

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

cor(data2, res1, method = c("pearson"))

Приведенный выше код сгенерировал приведенный ниже вывод, который показывает вертикально в консоли.

         [,1]
x1 0.45683210
x2 0.62858863
x3 0.08457911
x4 0.41022052

Далее, используя следующий код, я смог ранжировать эти корреляции по их абсолютному значению, используяФункция sort ().

abs(cor(data2, res1, method = c("pearson")))
abs1<-abs(cor(data2, res1, method = c("pearson")))
sort(abs1, decreasing = TRUE)

И я получил следующий вывод.

[1] 0.62858863 0.45683210 0.41022052 0.08457911 

Я хочу сгенерировать вывод в виде таблицы или кадра данных.

В первом столбце у вас будут метки переменной X.
Во втором столбце у вас будет их абсолютная корреляция.
В третьем столбце у вас будет фактическая корреляция.

И этот вертикальный табличный список будет ранжироваться в порядке убывания.Я думаю, что у меня есть вся необходимая информация.Мне просто нужны коды для генерации вывода, как указано.

Ответы [ 3 ]

0 голосов
/ 17 февраля 2019

Ответ @Jon Spring идеален.Вот тот же код в base R

res1 <- c(0, 5, 2, 7, 1)
data2 <- data.frame(x1 = 1:5,           # uncorrelated
                    x2 = 14:10,             # uncorrelated and wrong direction
                    x3 = c(0, 5, 1, 6, 0),  # very similar
                    x4 = c(0, 0, 2, 7, 1))  # somewhat similar

correlation = cor(data2, res1, method = "pearson")
names = rownames(correlation)
abs_cor = abs(correlation)
data = data.frame(X_var = names,abs_cor = abs_cor,cor = correlation)
data[order(data$abs_cor,decreasing = TRUE),]
0 голосов
/ 09 марта 2019

Sada93 ответ, как показано выше, отлично.Сейчас я использовал этот набор кодов много раз, и они отлично работают.Тем не менее, я обнаружил, что его последняя строка кода, где он использует функцию order () для сортировки абсолютной корреляции в порядке убывания, может быть просто заменена с помощью средства просмотра в R Studio и сортировки в порядке убывания путем нажатия над abs (корреляция)колонка.

0 голосов
/ 17 февраля 2019

Мне кажется, я понимаю ваш вопрос, но я не уверен на 100%.

Я начну с некоторых примеров данных.Я знаю, что x1 и x2 не подходят, x3 - очень хорошо, а x4 почти так же хорошо.

res1 <- c(0, 5, 2, 7, 1)
data2 <- data.frame(x1 = 1:5,           # uncorrelated
                x2 = 14:10,             # uncorrelated and wrong direction
                x3 = c(0, 5, 1, 6, 0),  # very similar
                x4 = c(0, 0, 2, 7, 1))  # somewhat similar

Мой ответ основан на dplyr и не самыйкраткий, но должен быть понятным.

library(dplyr)
cor(data2, res1, method = "pearson") %>% 
  tibble::as.tibble(rownames = "X_var") %>% # Edit: using suggestion in comment, was
         # as.data.frame() %>% tibble::rownames_to_column(varrownames = "X_var") %>%  
  convert row names into a new column "X_var" 
  mutate(abs_cor = abs(V1)) %>%          # add absolute correlation
  arrange(-abs_cor) %>%                  # sort by descending abs correlation
  select(X_var, abs_cor, cor = V1)       # display in order and rename V1

Вывод

  X_var   abs_cor        cor
1    x3 0.9822125  0.9822125
2    x4 0.7058824  0.7058824
3    x1 0.2169305  0.2169305
4    x2 0.2169305 -0.2169305
...