【问题标题】:Retrieving sets of covarying variables检索协变变量集
【发布时间】:2015-05-18 19:44:07
【问题描述】:

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

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 &gt; 0.6) 过滤结果,但这似乎会丢失变量的名称。

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

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

【问题讨论】:

    标签: r correlation cross-correlation variable-names


    【解决方案1】:

    你可以这样做:

    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"
    

    【讨论】:

    • 完美!非常感谢!
    猜你喜欢
    • 2021-03-29
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2019-09-12
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多