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