楼主: nkwilling
1596 1

代问IML高手一个IML做SVD的问题 [推广有奖]

  • 0关注
  • 65粉丝

副教授

23%

还不是VIP/贵宾

-

威望
1
论坛币
3349 个
通用积分
0.0001
学术水平
109 点
热心指数
93 点
信用等级
47 点
经验
10032 点
帖子
322
精华
0
在线时间
596 小时
注册时间
2008-1-9
最后登录
2013-9-4

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
IML里面最后作出的P和PROC 出来的tb1中的主成分不一样。估计是P的公式有问题,但是实在没有找出来。
高手给我看看这是为什么?多谢!下面是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;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:SVD princomp RETAIN append Create 高手 iml SVD

沙发
bobguy 发表于 2009-11-8 02:26:01 |只看作者 |坛友微信交流群
I am not sure where your problem is. But here is the one having both rerults are matched. The eigenvalue calculations are based on correlation matrix.

proc iml;
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 ;

       n=nrow(a);

                 aa_corr=corr(a);
         eig=eigval(aa_corr);

        print eig  aa_corr ;

quit;

proc princomp data=tb;
run;


proc iml;
  n=800;
  seed=4598763;
  et=repeat(0,3,n);
  mu={0 0 0};
  sigma={1 0.7 0.3,
             0.7 1 0.5,
                      0.3 0.5 1}
                 ;

   CALL VNORMAL( a, mu, sigma, n ,seed );
   create tb from a;
   append from a;

          n=nrow(a);

                 aa_corr=corr(a);
         eig=eigval(aa_corr);

        print eig  aa_corr ;


quit;

proc princomp data=tb;
run;

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 19:00