【问题标题】:Correlation matrix using a moving window in data使用数据中移动窗口的相关矩阵
【发布时间】:2021-03-01 16:30:45
【问题描述】:

我正在尝试使用 5 年移动窗口创建相关矩阵,因此使用 2000-2005、2001-2006 等年的数据。

以下是一些示例数据:

d <- data.frame(v1=seq(2000,2015,1),           
                v2=rnorm(16),
                v3=rnorm(16),
                v4=rnorm(16))

  v1         v2         v3          v4
1  2000 -1.0907101 -1.3697559  0.52841978
2  2001 -1.3143654 -0.6443144 -0.44653227
3  2002 -0.1762554  2.0513870 -1.07372405
4  2003  0.1668012 -1.6985891 -0.32962331
5  2004  0.6006146 -0.1843326 -0.56936906
6  2005 -1.3113762 -0.3854868 -1.61247953
7  2006  3.1914908 -0.2635004  0.04689692
8  2007  0.7935639 -1.0844792 -0.25895397
9  2008  1.4217089  1.9572254  1.27221568
10 2009 -0.4192379 -0.5451291  0.18891557
11 2010 -0.1304170 -1.4676465  0.17137507
12 2011  1.2212943  0.9523027 -0.39269076
13 2012 -0.4464840 -0.7117153 -0.71619199
14 2013  0.1879822  1.0693801 -0.44835571
15 2014 -0.5602422 -0.7036433  0.53531753
16 2015  1.4322259  1.5398703  1.00294281

我已经使用 dplyr 为每个组创建了新列 start 和 end:

d<-d%>%                                          
  mutate(start=floor(v1),
    end=ifelse(ceiling(v1)==start,start+5,ceiling(v1)))

我尝试了group_by(start,end),然后运行了关联,但没有奏效。有比过滤数据更快的方法吗?

【问题讨论】:

  • 您的问题不清楚。你到底想生成什么?由于您将 v2、v3、v4 作为值,您将在矩阵的前 3x3 单元格上计算什么?您生成的矩阵中的列是什么?
  • @Picarus 生成矩阵中的列以给出每个 5 年段的每对的相关值,如下所示: v2 v3 v4 v2 1.000000000 -0.005687711 0.8535461 v3 -0.005687711 1.000000000 -0.3555403 v4 0.853546141 -0.355540309 1.0000000

标签: r matrix dplyr correlation


【解决方案1】:

这会打印 5 年窗口的相关矩阵:

require("tidyverse")

lapply(2000:2011, function(y) {
   filter(d, v1 >= y & v1 <= (y + 4)) %>%
   dplyr::select(-v1) %>%
   cor() %>%
   return()
})

【讨论】:

    猜你喜欢
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    相关资源
    最近更新 更多