为滑动编写一个简单的循环 window
Coding a simple loop for a sliding window
我有以下问题。我有一个由 2659 次观察得出的时间序列。我需要对长度为 256 的滑动 window 执行统计测试,每次我想从这些测试中提取 p 值并将它们收集到时间序列向量中。要执行此测试(运行测试),我想要一个随数据和滚动 window 一起移动的移动平均线作为阈值。这是我的尝试(在 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停止,因为时间window每次必须移动256,所以第一个window从1到256,第二个从2到257。 .. 最后停到 255+2404 = 2659。我希望我说清楚我的问题,我不明白为什么它不起作用。当然,我需要随着时间的推移绘制结果,以便绘制随时间变化的所有 p 值。我希望你能帮助我。
PS: 如果你提出一个例子,请设置种子,以便我可以重现你的结果。
对现有代码进行两处更改应该可以使其正常工作:
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]
,你将得到一个 return 值,x[i]
。
将 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))
我有以下问题。我有一个由 2659 次观察得出的时间序列。我需要对长度为 256 的滑动 window 执行统计测试,每次我想从这些测试中提取 p 值并将它们收集到时间序列向量中。要执行此测试(运行测试),我想要一个随数据和滚动 window 一起移动的移动平均线作为阈值。这是我的尝试(在 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停止,因为时间window每次必须移动256,所以第一个window从1到256,第二个从2到257。 .. 最后停到 255+2404 = 2659。我希望我说清楚我的问题,我不明白为什么它不起作用。当然,我需要随着时间的推移绘制结果,以便绘制随时间变化的所有 p 值。我希望你能帮助我。
PS: 如果你提出一个例子,请设置种子,以便我可以重现你的结果。
对现有代码进行两处更改应该可以使其正常工作:
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]
,你将得到一个 return 值,x[i]
。
将 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))