我一直在实施这篇论文:
http://www.tandfonline.com/doi/abs/10.1080/03610918.2011.575506#.UrijOLS_UhI
如果有人要求,我可以发送副本。
我认为我的实施是正确的,但我得到了与论文中给出的答案截然不同的答案:
我的结果
B0 0.0470
B1 2.1635
B2 1.1560
B3 0.7451
B4 0.4931
纸上的结果
B0 0.1228
B1 2.1630
B2 1.1552
B3 0.7444
B4 0.4922
正如您所看到的那样,B0是关闭的,而剩余的Beta值仅对小数位有效,这是不够的。是否可以区分使用的Matlab版本的差异?我使用R2011a,作者使用Matlab 7.0?
function [b_LRRE]=LRRE(y,x)
[n, p]=size(x);
dim=1;
b=x\y;
sig_ols_sq=((y-x*b)'*(y-x*b))/(n-p);
econFlag=0;
[U,sigma,V] = svd(x,econFlag);
d=zeros(p,1);
d=diag(d);
alpha=V'*b;
Delta=sigma.^2;
I=ones(p,1);
I=diag(I);
for jj=1:50
for ii=1:p
d(ii,ii)=(Delta(ii,ii)*(alpha(ii)^2-sig_ols_sq))/(sig_ols_sq+Delta(ii,ii)*alpha(ii)^2);
end
A=pinv(Delta+I)*(Delta+d);
b_LRRE=V*A*V'*b;
alpha=V'*b_LRRE;
end
end
这是数据
78.5 1 7 26 6 60
74.3 1 1 29 15 52
104.3 1 11 56 8 20
87.6 1 11 31 8 47
95.9 1 7 52 6 33
109.2 1 11 55 9 22
102.7 1 3 71 17 6
72.5 1 1 31 22 44
93.1 1 2 54 18 22
115.9 1 21 47 4 26
83.8 1 1 40 23 34
113.3 1 11 66 9 12
109.4 1 10 68 8 12