SAS中文论坛

标题: 请教高手一个关于IML特征值累计的问题 [打印本页]

作者: shiyiming    时间: 2009-11-5 14:22
标题: 请教高手一个关于IML特征值累计的问题
在SAS的IML里面,如果求出特征值比如为eig=(5,4,3,2,1),我现在想找前特征值和累计大于等于70%的所有特征值,并返回一个向量,这里应该是eig=(5,4,3),请问怎么实现?注意,这里的特征值是动态的,并非就是5维的。我只知道在DATA步里面非常容易,用RETAIN语句就可以搞定。
多谢高手!
作者: shiyiming    时间: 2009-11-5 15:30
标题: Re: 请教高手一个关于IML特征值累计的问题
特征值累计是搞定了,但是最后求出的主成分和proc princomp不一样,高手给我看看这是为什么?多谢!下面是code:
%let n=5;

proc iml;
reset deflib=work;
a={22  10   2   3   7,
      14   7  10   0   8,
      -1  13  -1 -11   3,
      -3  -2  13  -2   4,
       9   8   1  -2   4,
       9   1  -7   5  -1,
       2  -6   6   5   1,
       4   5   0  -2   2};
create tb from a;
append from a ;
call svd(u,q,v,a);
reset fuzz;
print a u q v ;

sq=sum(q);
print sq;

dq=diag(q);
print dq;
trace=trace(dq);
print trace;

retain_eig={0};
idx={0};
do i=1 to &n.;
eig=q[i];
retain_eig=retain_eig+eig;

rate_eig=retain_eig/sq;
if rate_eig >= 0.7 then do;idx=i; new_eig=q[1:idx];stop;end;
end;
print retain_eig;
print idx;
print new_eig;

u1=u[1:idx,];
print u1;

p=a*(u1)`;
print p;


quit;


proc princomp data=tb out=tb1;
run;

结果,IML里面最后作出的P和PROC 出来的ta1中的主成分不一样。估计是P的公式有问题,但是实在没有找出来。
作者: shiyiming    时间: 2009-11-5 16:10
标题: Re: 请教高手一个关于IML特征值累计的问题
有谁知道IML里面有函数直接对原矩阵进行标准化吗?




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2