检索共变变量集

Retrieving sets of covarying variables

我有一个数据框,其中包含大量变量,这些变量表示为随时间变化的列,作为它们的索引。我想检索一组高度共变的变量。

data <- data.frame(time_series=c(1,2,3), 
                           score1=c(0.5, 0.4, 0.6), 
                           score2=c(0.3, 0.2, 0.1), 
                           score3=c(0.1, 0.4, 0.5), 
                           score4=c(0.5, 0.2, 0.4), 
                           score5=c(0.1, 0.1, 0.2))

应该给出相同结果的两个函数是,

library(stats)
#autocorrelation function with lag 0 over a data frame
acf_results <- acf(data[2:length(names(data))], plot = FALSE, lag.max = 0)

#simple Pearson correlation function.
cor_results <- cor(data[2:length(names(data))], method = "pearson")

可以使用简单的 (X_results > 0.6) 过滤结果,但这似乎会丢失变量的名称。

我正在尝试从大型数据框中提取协变到阈值的变量集。我希望我缺少一些简单的内置函数。关于如何做到这一点有什么建议吗?

编辑:我意识到 Spearman 绝对是一个错误的函数,因为它也会对值进行排名,而不仅仅是时间范围。

您可以这样做:

cor_results <- cor(data[2:length(names(data))], method = "spearman")
x <- which(cor_results > 0.6, arr.ind=TRUE)
x
#        row col
# score1   1   1
# score5   5   1
# score2   2   2
# score3   3   3
# score5   5   3
# score4   4   4
# score1   1   5
# score3   3   5
# score5   5   5

获取满足您要求的单元格索引矩阵。为了使它更具可读性,您可能需要

x[] <- colnames(cor_results)[x]
rownames(x) <- NULL
x
      row      col     
# [1,] "score1" "score1"
# [2,] "score5" "score1"
# [3,] "score2" "score2"
# [4,] "score3" "score3"
# [5,] "score5" "score3"
# [6,] "score4" "score4"
# [7,] "score1" "score5"
# [8,] "score3" "score5"
# [9,] "score5" "score5"