我想估计R_LW的方差,这是估计量LW与标准OLS估计量的均方误差(MSE)之比(R代表比率)。
每个MSE计算超过5000个sims,得到一个R_LW。我想知道比率R_LW的估计值的标准偏差是多少。
为了估计这一点,我重复该过程100次以获得100个R_LW的估计值,然后计算产生的100个R_LW的方差。我所看到的是,在100次模拟中连续产生的R_LW值往往非常相似,导致整体方差低3.81E-06。
然而,当我重新运行整个过程时,它产生另外100个R_LW的估计值,虽然它们彼此接近并产生与第一组相似的方差,但它们波动的平均值往往比两种运行的估计方差都表明。
鉴于方差为3.8106,这相当于0.001953的标准偏差,因此我不希望在100次sims中看到超过3个标准偏差的运动,实际上在一次模拟运行中你看不到大于横跨100个样本。
然而,当你看到不同运行之间的R_LW时,它的平均值会移动很多!见下文
Run1 0.6133
Run2 0.5901
Run3 0.6169
Run4 0.5833
Run5 0.6161
Stdev 0.016
之间的运行标准差几乎高出10倍?我猜它与normrnd()的播种方式有什么关系?
clear;
tic
dim=1;
flag=0;
n=30;
p1=3;
p2=2;
alpha1=0.9;
alpha2=0.9;
error_vol=1^0.5;
MSE_OLS=0;
MSE_R=0;
MSE_OLS_tot=0;
MSE_LW_tot=0;
MSE_OLS_AVR=0;
MSE_R_AVR=0;
SUM_STD_MSE_OLS=0;
SUM_STD_MSE_R=0;
STD_OLS=0;
STD_R=0;
nsims=5000;
tot_p=p1+p2;
x=zeros(n,tot_p);
for i=1:n
z_i4=normrnd(0,1);
for j=1:p1
x(i,j)=x(i,j)+alpha1*z_i4;
x(i,j)= x(i,j)+(1-alpha1^2)^(0.5)*normrnd(0,1);
end
for j=1+p1:tot_p
x(i,j)=x(i,j)+alpha2*z_i4;
x(i,j)= x(i,j)+(1-alpha2^2)^(0.5)*normrnd(0,1);
end
end
mu= mean(x,dim);
sigma = std(x,flag,dim);
sigma0 = sigma;
sigma0(sigma0==0) = 1;
x_scaled = bsxfun(@minus,x, mu);
sigma0=sigma0*sqrt(n-1);
x_scaled = bsxfun(@rdivide, x_scaled, sigma0);
econFlag=0;
[U,sigma,coeff] = svd(x_scaled,econFlag);
b_act=coeff(:,1);
sigmax = std(x,flag,dim);
mu_x=mean(x,dim);
nrepl=100;
R_LW_tot=0;
R_LW_sq=0;
R_LW_var=0;
for vv=1:nrepl
for t=1:nsims
residuals=normrnd(0,error_vol,n,1);
y=x*b_act + residuals;
mu_y=mean(y,dim);
mu_y=mu_y*ones(n,1);
sigmay = std(y,flag,dim);
mu= mean(y,dim);
sigma = std(y,flag,dim);
sigma0 = sigma;
sigma0(sigma0==0) = 1;
y_scaled = bsxfun(@minus,y, mu);
sigma0=sigma0*sqrt(n-1);
y_scaled = bsxfun(@rdivide, y_scaled, sigma0);
b=x_scaled\y_scaled;
[b_LW k_LW]=LW(y_scaled, x_scaled);
for i=1:tot_p
b_LW(i)=b_LW(i)*sigmay/sigmax(i);
end
MSE_OLS=(b-b_act)'*(b-b_act);
MSE_LW=(b_LW-b_act)'*(b_LW-b_act);
MSE_OLS_tot=MSE_OLS_tot+MSE_OLS;
MSE_LW_tot=MSE_LW_tot+MSE_LW;
end
MSE_OLS_AVR=MSE_OLS_tot/nsims;
MSE_LW_AVR=MSE_LW_tot/nsims;
R_LW=MSE_LW_AVR/MSE_OLS_AVR;
R_LW_store(vv)=R_LW;
R_LW_tot=R_LW_tot+R_LW;
R_LW_sq=R_LW_sq+R_LW^2;
end
R_LW_var=(R_LW_sq)-(R_LW_tot^2/nrepl)/(nrepl-1);
toc
LW:
function [b k]=LW(y,x)
[n, p]=size(x);
dim=1;
flag=0;
b=x\y;
y_hat=x*b;
r=(y-y_hat);
s_squared=(r'*r)/(n-p-1);%s_squared=(r'*r)/(n-p-1);
econFlag=0;
[U,sigma,coeff] = svd(x,econFlag);%[U,sigma,coeff] = svd(z,econFlag);
EV=sigma.^2;
k=p*s_squared/(b'*x'*x*b);
pseudo = sqrt(k) * eye(p);
x_ridge = [x;pseudo];
y_ridge = [y;zeros(p,1)];
b = x_ridge\y_ridge;
end