|
###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))))
}
###计算hurst指数
s<-10
n<-3
H<-log(fs(x,getmatrix(x,s),s,n),2)/log(s,2)
x<-c(1/(1:100)),n=3,s=10,最后H=-15.22023
|