数据中的有效滚动经验下尾依赖系数计算。

时间:2018-03-29 16:44:11

标签: r data.table

我想计算data.table中的滚动经验下尾依赖系数,这里是尾依赖系数函数和动物园:: rollapply, 但这非常慢。对于包含1M行的数据,需要超过6个小时。有没有办法更有效地做到这一点?

library(data.table)
set.seed(1)
mydt = as.data.table(data.frame(id    = rep(LETTERS[1:4],each=10),
                                Time  = rep(seq(as.Date("2016-01-01"),as.Date("2017-10-01"),"day"),4),
                                x     = round(rnorm(40),2),
                                y     = round(rnorm(40),2)))

Tdc <- function(x, lower = TRUE, k = NULL){
  x <- as.matrix(x)
  k <- ifelse(is.null(k), floor(sqrt(nrow(x))),  as.integer(k))
  m <- nrow(x)
  N <- ncol(x)
  idx <- combn(N, 2)
  r <- apply(x, 2, data.table::frank)
  if(lower){
    td <- apply(idx, 2, function(y)
      sum((r[, y[1]] <= k) & (r[, y[2]] <= k)) / k)
  } else {
    td <- apply(idx, 2, function(y)
      sum((r[, y[1]] > m - k) & (r[, y[2]] > m - k)) / k)
  }
  return(td)
}

ltdc <- function(y)Tdc(as.data.frame(y[, c("x","y")]))
mydt[,LTDC := zoo::rollapplyr(.SD, 5, ltdc, by.column = FALSE, fill = NA), by = id]

感谢您对我的代码和/或我的想法的想法和评论。谢谢。

0 个答案:

没有答案