【问题标题】:calculating correlations efficiently in R?在 R 中有效地计算相关性?
【发布时间】:2013-07-17 16:19:26
【问题描述】:

这是一个优化问题,我希望你有创意的 SO 用户可能有答案。

我有一个包含两个值的大矩阵(500 万 x 2):时间和类型。从本质上讲,每个“类型”都是它自己的时间序列——下面的数据代表三个不同的时间序列(一个用于 A,一个用于 B,一个用于 C)。有 2000 种不同的“类型”。

mat
     time type
[1,]  50   A
[2,]  50   A
[3,]  12   B
[4,]  24   B
[5,]  80   B
[6,]  92   B
[7,]  43   C
[8,]  69   C

我找到这 2000 个时间序列之间的相关性的最有效方法是什么?我目前正在生成一个矩阵,其中每次可能发生事件的时间都有不同的 bin,并且我用在该时间段内发生的每种“类型”事件的数量填充该矩阵。填充该矩阵后,我遍历每对“类型”并找到相关性。这是非常低效的(约 5 小时)。

如果有办法在 R 的 cor 函数中实现 by='type' 功能,我的整个问题就可以解决了吗?

感谢您的任何见解。

【问题讨论】:

    标签: r optimization correlation


    【解决方案1】:

    你可以试试这样的

    set.seed(1)
    df <- 
    data.frame(time = rnorm(15), type = rep(c("a", "b", "c"), each = 5))
    
    cor(do.call(cbind, split(df$time, df$type)))
             a        b        c
    a  1.00000  0.27890 -0.61497
    b  0.27890  1.00000 -0.78641
    c -0.61497 -0.78641  1.00000
    

    这种方法假设每种类型的观察数量是平衡的。

    现在,我们可以对 500 万行和 2000 种不同类型进行真正的测试

    set.seed(1)
    df <- data.frame(time = rnorm(5e6), type = sample(rep(1:2000, each = 2500)))
    system.time(cor(do.call(cbind, split(df$time, df$type))))
    ##  user  system elapsed 
    ## 6.387   0.000   6.391 
    

    【讨论】:

    • 这是一个很好的解决方案,但不幸的是我的数据集不包含平衡数量的观察结果。你知道有没有办法调整它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2011-10-09
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    相关资源
    最近更新 更多