全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
2171 5
2014-06-04
有没有哪位大侠近期研究金融时间序列的长记忆性检验的?我急需matlab的r/s代码  谁有可以借鉴一下不?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-6-4 20:30:11
以前做过,好像是做 rescaled 什么检验长期记忆的吧?在matlab还是比较容易实现的,
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-6-5 18:37:33
这是以前算Hurst指数的,其中binMethod是指用数据长度的约数分组、还是用所有不大于长度一半的数分组
function [H,RS,V]=hurst(data,binMethod)
%function:        compute hurst component:H, R/S and respect bin length-n:RS, V statistics
%input:                data: column vector
%                        binMethod: scalar numer,group methods for data,0 for "divisor"/1 for "all"
%output:        H:1*1 value,hurst component
%                        RS:N*2 matrix, column1: bin length, column2: RS
%                        V:V statistics

% to be done: indivisual test
% R/S analysis requires time series has no self correlation

obsNum=length(data);
if binMethod==0
        tmp=divisor(obsNum);
        n=tmp(tmp>=2 & tmp<=obsNum/2);
elseif binMethod==1
        n=2:floor(obsNum/2);
else
        error('binMethod should be ''divisor'' or ''all''');
end

RS=zeros(length(n),2);
RS(:,1)=n;
for ii=1:length(n)
        binLength=n(ii);
        bins=floor(obsNum/binLength);
        binData=reshape(data((end-bins*binLength+1):end),binLength,bins);
        binMean=mean(binData);
        binStd=std(binData,1);
        cumDev=cumsum(binData-repmat(binMean,binLength,1));
        R=max(cumDev)-min(cumDev);
        RS(ii,2)=mean(R./binStd);
end

coef=regress(log(RS(:,2)),[ones(size(RS,1),1) log(RS(:,1))]);
H=coef(2);
V=RS(:,2)./sqrt(RS(:,1));

end
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-6-5 20:43:11
windblood 发表于 2014-6-5 18:37
这是以前算Hurst指数的,其中binMethod是指用数据长度的约数分组、还是用所有不大于长度一半的数分组
func ...
非常感谢~~我有个代码好像不对,请大侠帮忙指正。

function myr_s =myr_s1(x)%
tic;
[k,l]=size(x);
x=x(:,4);%
Q=[];
for n=2:k;             %均分为k-1个序列
     x1=x(1:n,:);
       avg_x=mean(x1);
       var_x=var(x1);
      
       y=ones(n,1);
       yy=avg_x*y;
       xx=x1-yy;   
   
      for i=2:n;
           xx(i,1)=xx(i,1)+xx(i-1,1);
     end;
           xx1=max(xx);
           xx2=min(xx);
          R_n=xx1-xx2;
   
          Qn=R_n/var_x;
          Q=[Q,Qn];
end;
sn=[2:k];
lsn=log(sn);
%[mn,nn]=size(lsn)

lq=log(Q);
%[mq,nq]=size(lq)
[a,b]=polyfit(lsn,lq,1);
H=a;
myr_s=H
toc;
end
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-6-5 22:19:56
谦微 发表于 2014-6-5 20:43
非常感谢~~我有个代码好像不对,请大侠帮忙指正。

function myr_s =myr_s1(x)%
好像第一层for循环,你想分n组,但实际只取了x的1:n个数作为1组,后面的数就没管了
而且分组,不可能分到[k/2]以上,因为那样每组只有1个值,没法算
估计你组数和每组内的样本数混淆了

另外,RS分析的逻辑好像也不对,不知道是不是上面的问题导致的;
建议你要么好好对着RS的步骤一步步做,要么去mathworks的用户中心下一个函数直接用
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-6-6 09:59:33
windblood 发表于 2014-6-5 22:19
好像第一层for循环,你想分n组,但实际只取了x的1:n个数作为1组,后面的数就没管了
而且分组,不可能分到 ...
好的 非常感谢 我之前的算法没搞清楚rs方法的分组前提  只看了公式  所以搞错了 前面看到中山大学黄饴蓉博士的rs方法有效性论证的论文  他明明在论文中说了可以向他索取matlab代码但发邮件过去确实有病毒的自动回复  搞得我好生郁闷!谢谢大侠的帮助  给你加分!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群