Skip to main content
 首页 » 编程设计

R语言实现滚动相关性教程

2022年07月19日156hnrainll

本文介绍滚动相关性,并给出R实现示例。

滚动相关性是滚动窗口上两个时间序列的相关性。通过滚动相关性可以看到两个时间序列随时间的相关性。下面通过示例说明。

假设我们有下面数据框,包括15个月内两种不同产品的销售量。

#create data 
data <- data.frame(month=1:15, 
                   x=c(13, 15, 16, 15, 17, 20, 22, 24, 25, 26, 23, 24, 23, 22, 20), 
                   y=c(22, 24, 23, 27, 26, 26, 27, 30, 33, 32, 27, 25, 28, 26, 28)) 
 
#view first six rows 
head(data) 
 
#   month  x  y 
# 1     1 13 22 
# 2     2 15 24 
# 3     3 16 23 
# 4     4 15 27 
# 5     5 17 26 
# 6     6 20 26 

我们可以使用zoo包中的rollaplly()函数。语法如下:

rollapply(data, width, FUN, by.column=TRUE)

  • data : 数据框名称

  • width:指定滚动相关性的窗口大小(整数)

  • FUN : 应用的函数

  • by.column: 指定是否对每列单独应用函数。缺省为TRUE,但计算滚动相关性需要指定该参数为FALSE.

下面代码用于计算两个产品(x,y)的三个月滚动相关性:

library(zoo) 
library(ggplot2) 
library(tidyverse) 
 
roll3 <- rollapply(data, width=3, function(x) cor(x[,2],x[,3]), by.column=FALSE) 
roll3 <- tibble::rowid_to_column(tibble(data=roll3), "index")  
 
ggplot(roll3, aes(x=index, y=data)) +  
  geom_area(fill=8) + scale_x_continuous(limits = c(0, 14), breaks = c(0, 2, 4, 6, 8, 10, 12, 14) +1) 
  # geom_ribbon(aes(ymin=0,ymax=data, fill=3)) + 
  # theme_bw() 

在这里插入图片描述

这个函数返回前3个月两个产品销量之间的相关性。例如:

  • 1到3个月的销售相关性为+0.65
  • 2到4个月的销售相关性为-0.69
  • 3到5个月的销售相关性为-0.24

我们调整参数计算不同周期的滚动相关性。比如下面代码计算6个月周期两个产品的滚动相关性:

roll6 <- rollapply(data, width=6, function(x) cor(x[,2], x[,3]), by.column = FALSE) 
 
# [1] 0.5587415 0.4858553 0.6931033 0.7564756 0.8959291 0.9067715 0.7155418 0.7173740 0.7684468 0.4541476 
 
roll6 <- tibble::rowid_to_column(tibble(data=roll6), "index")  
 
ggplot(roll6, aes(x=index, y=data)) +  
  geom_ribbon(aes(ymin=0,ymax=data, fill=4, alpha = 0.5, lwd= 0.5)) + 
  # geom_area(fill = 4, 
  #           alpha = 0.5, 
  #           color = 1,    # Line color 
  #           lwd = 0.5,    # Line width # Line type 
  #           linetype = 1)  + scale_x_continuous(limits = c(0, 11), breaks = c(0, 2, 4, 6, 8, 10) + 1) 
  scale_x_continuous(limits = c(0, 11), breaks = c(0, 2, 4, 6, 8, 10) + 1) 

在这里插入图片描述

函数结果返回前6个月两个产品销量之间的相关性。

  • 1到6个月的销售相关性为+0.56
  • 2到7个月的销售相关性为+0.49
  • 3到8个月的销售相关性为+0.69

注意实现:

  • width 参数指定滚动窗口,应该大于等于3.
  • 上面示例中cor(x[,2],x[3]), x[,2], x[,3] 是要比较的数据列所在位置。根据业务需要可以进行调整。

本文参考链接:https://blog.csdn.net/neweastsun/article/details/122585577
阅读延展