由于本人使用的样本量很小,如果做传统的渐进方差比检验肯定是不合适的,因此想用wild bootstrap方法做方差比检验,我曾在论坛中发过相关帖子求助,但一直没有回音,这次重新发帖,希望高手帮助,能给我指一条出路的话,我也很感激。论坛中就此问题,也曾有过讨论,我把与此有关的讨论贴出,希望有所帮助。
vincent829 :看到paper说,regular bootstrapping 不能解决cross-sectional correlation 或是 heteroscedasicity。所以用了wild bootstrap,主要对于residual的构建做了些修改。
regular bootstrapping一般随机抽1/4的样本,residual的值是不变的。
现在wild bootstrap构建做了些修改,在原来residual基础上乘以an indepedent random variable with zero mean and unit variance. 这个新的random variable 符合two point distribution,不是1就是-1,概率都是1/2.
查了很多资料,都没有直接可以用的程序,有没有那位好心人帮帮忙?
使用simulate, 在冒号后放上bootwild即可。
例如:
simulate _b, seed(123456) rep(1000) nodots: bootwild
(我在matlab7.0中反复尝试,都说divide by zero)
还请高手具体赐教,下面是传统方差比检验的matlab程序:
function [vr_value,z1,z2,sig_z1,sig_z2]=vr(x,q)
%输入x为价格序列,q为滞后阶数
%vr_value: 输出方差比值
%z1为收益序列为同方差时的检验统计量
%z2为收益序列为异方差时的检验统计量
%sig_z1,sig_z2为两种检验的P值
%显著性水平0.05(双侧标准正态检验)
if nargin<1 | isempty(x)==1
error('You should provide a time series.');
else
if nargin==1
error('You should provide a number q.');
else
% x must be a vector
if min(size(x))>1
error('Invalid time series.');
end
x=x(:);
% time series length
N=length(x);
end
end
%滞后1对数收益序列
r=diff(x);
m=length(r);
mu=mean(r);%均值
%滞后q阶对数收益序列
sumvq=0;
for k=q:(N-1)
sumvq=sumvq+(x(k+1)-x(k+1-q)-q*mu)^2;
end
varq=sumvq/(q*N);
vr_value=varq/(var(r));%vr_value为滞后q阶方差比
fy1=2*(2*q-1)*(q-1)/(3*q*(N-q));
z1=(vr_value-1)/sqrt(fy1);
%收益序列同方差时的方差比
fy2=0;
delta=zeros(1,q-1);%deltaj
delta1=zeros(1,q-1);%分子
delta2=0;%分母
for t=1:m
delta2=delta2+(x(t+1)-x(t)-mu)^2;
end
for j=1:q-1
for k=(j+1):m
delta1(j)=delta1(j)+(x(k+1)-x(k)-mu)^2*(x(k+1-j)-x(k-j)-mu)^2;
end
delta(j)=delta1(j)/(delta2)^2;
fy2=fy2+delta(j)*(2*(q-j)/q)^2;
end
z2=(vr_value-1)/sqrt(fy2);%收益序列是异方差时的方差比
sig_z1=1-normcdf(z1,0,1);
sig_z2=1-normcdf(z2,0,1);
%for i=1:100
% [vr_value(i),z1(i),z2(i)]=vr(x,i+1);
%end
% plot(1:100,vr_value,'r-',1:100,z1,'b-',1:100,z2,'k-')
% xlabel('q','FontWeight','bold');
% ylabel('统计量','FontWeight','bold');
%title('随机游走的方差比检验图像','fontsize','14','fontweight','bold')
%legend('vr','z1','z2')