创建表,显示各种变量与另一个系列的排序绝对相关性

问题描述 投票:-4回答:3

我希望输出显示每个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变量的标签。 在第二列中,您将具有绝对相关性。 在第三列中,您将获得实际的相关性。

并且,此垂直表格列表将按降序排列。我想我有我需要的所有信息。我只需要代码来生成指定的输出。

r sorting correlation ranking
3个回答
3
投票

回答@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),]

6
投票

我想我理解你的问题,但我不是百分百肯定。

我从一些示例数据开始。我通过眼睛知道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

0
投票

Sada93回答,如上图所示很棒。我现在已经多次使用这组代码,它们工作得很好。但是,我发现他使用order()函数按降序排序绝对相关性的最后一行代码可以简单地用R Studio中的Viewer替换,并通过单击abs(相关)上面的降序排序柱。

© www.soinside.com 2019 - 2024. All rights reserved.