当在R中聚类时间序列时,咨询一阶时间相关系数CORT的值

时间:2016-04-21 10:27:48

标签: r time-series cluster-analysis

我正在对R中的几个时间序列进行聚类分析(不同商店的产品销售)。

我在包CORT(S1,S2)中使用第一顺序时间相关系数TSclust,其中S1S2是两个时间序列。

文献(https://cran.r-project.org/web/packages/TSclust/TSclust.pdf)解释CORT属于interval [-1,1]:当CORT(S1,S2)=1两个系列都表现出类似的动态行为时,以及CORT(S1,S2)=-1时有相反的行为。

我想知道如何查看CORT的结果,以便观察每对时间序列CORT的值。

我们可以在TSclust包中看到下一个示例:

## Create three sample time series
x <- cumsum(rnorm(100))
y <- cumsum(rnorm(100))
z <- sin(seq(0, pi, length.out=100))

## Compute the distance and check for coherent results
diss.CORT(x, y, 2)
diss.CORT(x, z, 2)
diss.CORT(y, z, 2)

因此,使用上面的代码,我们可以使用系数CORT(S1,S2)来计算相异度指数,但我们无法查询CORT系数的值。

那么,是否有人如何在CORT中看到R系数的值?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我不确定这是否是你想要的,但不管我做了什么:

View(diss.CORT)

其中R表示:

function (x, y, k = 2, deltamethod = "Euclid") 

{
  .ts.sanity.check(x, y)
  .check.equal.length.ts(x, y)
  corrt <- corrtemporder1(x, y)
  type <- (pmatch(deltamethod, c("Euclid", "Frechet", "DTW")))
  typedist <- 0
  if (is.na(type)) {
    stop(paste("Unknown method", deltamethod))
  }
  else if (type == 1) {
    typedist <- as.numeric(dist(rbind(x, y)))
  }
  else if (type == 2) {
    typedist <- diss.FRECHET(x, y)
  }
  else if (type == 3) {
    typedist <- dtw(x, y, dist.method = "Manhattan", distance.only = T)$distance
  }
  (2/(1 + exp(k * corrt))) * typedist
}

现在,如果您仔细阅读并开始阅读脚本,那么您似乎正在寻找corrt <- corrtemporder1(x, y)行。谷歌它,你得到:.Replace()

#############################################################################
#################   Temporal Correlation Distance   #########################
#############################################################################

##CHOUAKRIA-DOUZAL

corrtemporder1 <- function (x, y) {
    p <- length(x)
    sum((x[2:p] - x[1:(p-1)]) * (y[2:p] - y[1:(p-1)])) / ( sqrt( sum((x[2:p] - x[1:(p-1)])^2) ) * sqrt( sum((y[2:p] - y[1:(p-1)])^2) ))
}

现在,我认为这就是你要找的东西。