前几天看了关于时间序列中hurst指数的相关定义与计算方式,然后用R语言尝试实现了DFA方法估算hurst,下面奉上具体代码:
- ##DFA方法估计hurst
- ##获得分组
- getmatrix<-function(x,s){#x是时间序列,s是子列的长度
- x<-cumsum(x-mean(x))
- y<-c(x[1:(round(length(x)/s)*s)],x[(length(x)-round(length(x)/s)*s+1):length(x)])
- N<-length(y)/(2*s)
- ymatrix<-t(matrix(y,s))#分组2*N行s列的矩阵,每一行为一组
- return(ymatrix)
- }
- ###计算消除趋势序列均值
- del<-function(yi,n,s){#yi是各组子列,n是多项式阶数
- xn<-c(1:s)
- model<-lm(yi ~ poly(xn,n))
- return(mean(yi-predict(model)))
- }
- ###计算均值平方根
- fs<-function(x,ymatrix,s,n){#ymatrix是样本矩阵,s是子列的长度,n是多项式阶数
- jisu<-0
- y<-c(x[1:(round(length(x)/s)*s)],x[(length(x)-round(length(x)/s)*s+1):length(x)])
- for(i in 1:(length(y)/s)){
- jisu<-jisu+(del(ymatrix[i,],n,s))^2
- }
- return(sqrt(jisu/(length(y)/(2*s))))
- }
复制代码