既然数据是这样,那么确保y,x1和x2最后一列是相同的,要不然就会出错
y=[0100000000000000 0300000000000000 0500000000000000 1
0810000000000000 101000000000000 0700000000000000 1
152000000000000 172000000000000 0900000000000000 1
223000000000000 243000000000000 110000000000000 2
365000000000000 385000000000000 150000000000000 2
436000000000000 456000000000000 170000000000000 3
507000000000000 527000000000000 190000000000000 3
578000000000000 598000000000000 210000000000000 3];
x1=[
0300000000000000 0500000000000000 0700000000000000 1
101000000000000 121000000000000 0900000000000000 1
172000000000000 192000000000000 110000000000000 1
314000000000000 334000000000000 150000000000000 2
385000000000000 405000000000000 170000000000000 2
456000000000000 476000000000000 190000000000000 3
527000000000000 547000000000000 210000000000000 3
598000000000000 618000000000000 230000000000000 3];
x2=[
0500000000000000 0700000000000000 0900000000000000 1
121000000000000 141000000000000 110000000000000 1
192000000000000 212000000000000 130000000000000 1
334000000000000 354000000000000 170000000000000 2
405000000000000 425000000000000 190000000000000 2
476000000000000 496000000000000 210000000000000 3
547000000000000 567000000000000 230000000000000 3
618000000000000 638000000000000 250000000000000 3];
n=size(y,2)-1; %债券数
month=unique(y(:,end));
m=length(month);%月份数
c2=zeros(m,n);
c3=zeros(m,n);
for ii=1:m
k=y(:,end)==month(ii);
for jj=1:n
c=regress(y(k,jj),[x1(k,jj) x2(k,jj) ones(sum(k),1)]);
c2(ii,jj)=c(2);
c3(ii,jj)=c(3);
end
end
c2=[c2 month]; %为了清楚对应的月份在最后多加一列
c3=[c3 month]; %如果不需要,可以不要最后两句
由于分开不同月份和不同债券数据很少,所以回归矩阵秩不够
运行会有警告,结果也可能不对,数据足够多了就好了
结果 最后一列表示月份
c2 =
10000 10000 10000 10000
20000 20000 20000 20000
10000 10000 10000 30000
c3 =
-04000 -04000 -04000 10000
-44500 -46500 -23000 20000
-04000 -04000 -04000 30000
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)