R语言 为滑动窗口编写简单循环



我有以下问题。我有一个由 2659 个观测值组成的时间序列。我需要在长度为 256 的滑动窗口上执行统计测试,每次我想从这些测试中提取 p 值并将它们收集到时间序列向量中时。为了执行此测试(运行测试),我希望将随数据和滚动窗口一起移动的移动平均线作为阈值。这是我的尝试(在R中)

x<- ts(rnorm(2659, mean = 0.0001, sd = 0.0001))
library(randtests)
for(i in 1:2404){
runs  <- runs.test(x[i:i+255], threshold = mean(x[i:i+255]))
ret[i] <- runs$p.value 
}

索引从 1 开始,但停止到 2404,因为时间窗口每次必须移动 256,因此第一个窗口从 1 到 256,第二个窗口从 2 到 257...最后停止到 255+2404 = 2659。我希望我说清楚了我的问题,我不明白为什么它不起作用。当然,我需要绘制一段时间内的结果,以便在图中显示一段时间内的所有 p 值。我希望你能帮助我。

PS:如果您提出一个例子,请设置一个种子,以便我可以重现您的结果。

rollapplyr与指示的函数一起使用。

library(zoo)
pv <- function(xx) runs.test(xx, threshold = mean(xx))$p.value
out <- rollapplyr(x, 256, pv, fill = NA)

注意

library(randtests)
set.seed(123)
x <- ts(rnorm(2659, mean = 0.0001, sd = 0.0001))

对现有代码进行两项更改应该使其正常工作:

set.seed(0)
x <- ts(rnorm(2659, mean = 0.0001, sd = 0.0001))
library(randtests)
ret <- rep(NA, length(x))
for(i in 1:2404){
runs  <- runs.test(x[i:(i+255)], threshold = mean(x[i:(i+255)]))
ret[i] <- runs$p.value
}

第一个更改是在循环之前初始化ret变量。ret <- rep(NA, length(x))

第二个变化是添加括号,即x[i:(i+255)].如果执行x[i:i+255],将得到一个返回值,x[i]

相关内容

  • 没有找到相关文章

最新更新