我是自学R,我正在努力寻找任意随机过程的停止时间(kns,ks),可以定义如下:
基础:k0 = inf {u> = 0:max_ [0,u] - min_ [0,u] = H}
如果X(k0)= max_ [0,k0] X,那么k0s = inf {u in [0,k0]:X(u)= min_ [0,k0] X}
如果X(k0)= min_ [0,k0] X,那么k0s = inf {u in [0,k0]:X(u)= max_ [0,k0]} X}
步骤n到n + 1 :
如果$ X(kn)-X(ksn)= H,那么:
k(n + 1)= inf {t> = kn:max_ [kn,t]} X-X(t)= H}
ks(n + 1)= inf {t in [kn,k(n + 1)]:X(t)= max_ [kn,k(n + 1)] X}
如果X(kn)-X(ksn)= - H,则:
k(n + 1)= inf {t> = n:X(t)-min {[kn,t] X = H}
k(n + 1)= inf {t in [kn,k(n + 1)]:X(t)= min_ [kn,k(n + 1)] X}
我的以下代码能够找到基础(k0s,ks)和接下来的两对(ks1,k1),(ks2,k2)。
step<-function(v){
z=numeric(300)
for(i in 1:300){z[i]=max(v[1:i])-min(v[1:i])}
k0<-min(which(z>=0.0005))
k0s<-if (v[k0]==max(v[1:k0])) min(which(v==min(v[1:k0]))) else if (v[k0]==min(v[1:k0])) min(which(v==max(v[1:k0])))
x=numeric(300)
if (v[k0]-v[k0s]>=0.0005) {
for (i in k0:300){x[i]=max(v[k0:i])-v[i]}
k1<-min(which(x>=0.0005))
k1s<-min(which(v==max(v[k0:k1])))
}
if (v[k0]-v[k0s]<=-0.0005) {
for (i in k0:300) {x[i]=-min(v[k0:i])+v[i]}
k1<-min(which(x>=0.0005))
k1s<-min(which(v==min(v[k0:k1])))
}
y=numeric(300)
if (v[k1]-v[k1s]>=0.0005) {
for (i in k1:300){y[i]=max(v[k1:i])-v[i]}
k2<-min(which(y>=0.0005))
k2s<-min(which(v==max(v[k1:k2])))
}
if (v[k1]-v[k1s]<=-0.0005) {
for (i in k1:300) {y[i]=-min(v[k1:i])+v[i]}
k2<-min(which(y>=0.0005))
k2s<-min(which(v==min(v[k1:k2])))
}
return(c(k0s,k0,k1s,k1,k2s,k2))
}
v这是一个向量,我用过:
v<-rnorm(300)
测试我的代码。
但是,我想概括我的代码来找到(ksn,kn)(不仅是整个过程的前三个停止时间)。由于查找(kns,ks)的方式取决于{k(n-1)s,k(n-1)},我正在考虑编写递归函数;但我的代码中的循环有问题,不知道如何将其转换为递归。任何人都可以建议/指出一些我可以改进我的代码的来源吗?
由于英语不是我的第一语言,请原谅任何打字错误。
非常感谢你,我真的很感激任何帮助。