使用R包QCSIS实现滚动窗口分位数相关性的代码问题
滚动窗口分位数相关性计算修正方案
你的代码核心问题是循环内未对x和y进行滚动窗口切片,每次调用qc()都传入了完整数据集,因此重复输出全局静态分位数相关性。以下是修正后的代码及说明:
修正后的循环实现代码
library(QCSIS) # 生成随机变量 n <- 4000 x <- rnorm(n) y <- 2 * x + rt(n, df = 1) tau <- 9 / 10 # 静态分位数相关性计算 fit <- qc(x = x, y = y, tau = tau) fit$rho # 滚动窗口分位数相关性计算 s <- 260 # 窗口大小 window_count <- n - s + 1 Rho.mat <- matrix(0, 1, window_count) # 初始化结果存储矩阵 # 修正循环:每次提取当前窗口的子集数据 for(i in 1:window_count) { # 关键操作:截取第i个滚动窗口对应的x、y子集 x_window <- x[i:(i + s - 1)] y_window <- y[i:(i + s - 1)] fit <- qc(x = x_window, y = y_window, tau = tau) Rho.mat[,i] <- fit$rho }
关键修改点
- 循环内通过
x[i:(i+s-1)]和y[i:(i+s-1)]定位当前滚动窗口的数据集,确保每次qc()计算的是窗口内的分位数相关性 - 新增
window_count变量替代重复的n-s+1,提升代码可读性
更简洁的lapply实现版本
如果不想用循环,也可以用lapply简化代码:
# 用lapply批量计算窗口相关性 rho_list <- lapply(1:window_count, function(i) { qc(x = x[i:(i+s-1)], y = y[i:(i+s-1)], tau = tau)$rho }) Rho.mat <- matrix(unlist(rho_list), 1, window_count)
内容的提问来源于stack exchange,提问作者Ameer
相关产品推荐
相关产品推荐

