楼主: clhclhjdz
8924 19

关于滚动求相关系数的问题 ! 求助 [推广有奖]

  • 1关注
  • 0粉丝

已卖:30份资源

博士生

82%

还不是VIP/贵宾

-

威望
0
论坛币
8 个
通用积分
3.0000
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
94 点
帖子
243
精华
0
在线时间
297 小时
注册时间
2011-11-4
最后登录
2019-10-20

楼主
clhclhjdz 发表于 2012-12-14 09:50:55 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如一个数据集 其中有两变量
x        y
1       2
3       5
5       6
7       7
6       9
8      10
7       9   
…………    我现在想对x y 每3相邻的观测求一次相关系数 即 x (1  3  5)和 y(2  5  6)之间求一次相关系数p1;
                                                        x(3 5 7)和 y(2 5 7)之间求一次相关系数p2;
                                                        以此滚动,得到变量 p (p1 p2 p3 ……);
                 请问这个应该怎么做? 我只能想到最简单的办法 有没有更便捷的 ! 谢谢大家了!
二维码

扫码加我 拉你入群

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

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

关键词:相关系数 怎么做 有没有 最简单 数据集 皮尔逊相关系数 偏相关系数 pearson相关系数 相关系数检验 spearman相关系数 复相关系数 相关系数矩阵

沙发
jingju11 发表于 2012-12-14 11:55:46
I think the code works on sas9.2
  1. # if in data step;
  2. data have2;
  3.   set have;
  4.   array xx[3] _temporary_; array yy[3] _temporary_;array t[3] _temporary_;
  5.   xx[mod(_n_,3)+1] =x; yy[mod(_n_,3)+1] =y;
  6.   call stdize(of xx[*]); call stdize(of yy[*]);
  7.   do i =1 to 3;
  8.     t[i] = xx[i]*yy[i];
  9.   end;  
  10.   r =mean(of t[*]);
  11. run;
复制代码
已有 1 人评分热心指数 收起 理由
clhclhjdz + 1 依然感谢你!

总评分: 热心指数 + 1   查看全部评分

藤椅
clhclhjdz 发表于 2012-12-14 13:16:48
jingju11 发表于 2012-12-14 11:55
I think the code works on sas9.2
不行哦! 有两个问题1 、 算出来的不是相关系数 2、我想得到的是 观测1 2 3 得到一个相关系数 ;然后观测2 3 4 又得到一个相关系数; 观测 3  4 5 得到一个相关系数 ; 以此类推 ……  不过仍然非常感谢你! 写的东西很有启发 而且我也经常看你博客 写的非常好 !

板凳
ziyenano 发表于 2012-12-14 13:36:48
clhclhjdz 发表于 2012-12-14 13:16
不行哦! 有两个问题1 、 算出来的不是相关系数 2、我想得到的是 观测1 2 3 得到一个相关系数 ;然后观测 ...
在iml里面比较容易解决~
不过我不大理解:
为什么p2是x(3 5 7)和y(2 5 7)?
是不是x(3 5 7)和y(5 6 7)?

报纸
playmore 发表于 2012-12-14 13:43:10
jingju11 发表于 2012-12-14 11:55
I think the code works on sas9.2
嗯,确实算的不是相关系数
相关系数的分子是x和y的协方差
应该同时对两个array进行运算
不了解有没有函数可以完成这个任务
否则只能用笨方法了
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

地板
clhclhjdz 发表于 2012-12-14 16:30:19
ziyenano 发表于 2012-12-14 13:36
在iml里面比较容易解决~
不过我不大理解:
为什么p2是x(3 5 7)和y(2 5 7)?
对  是y(5 6 7) ! 不好意思  我写错了

7
ziyenano 发表于 2012-12-14 17:19:36
data ex;
input
x        y;
cards;
1       2
3       5
5       6
7       7
6       9
8      10
7       9   
;
run;

proc iml;
use ex;
read all into a;
temp=j(nrow(a),1,.);
do i=3 to nrow(a);
temp=corr(a[i-2:i,])[2];
end;
res=a||temp;
create ex1 from res[colname={'x','y','corr'}];
append from res;
quit;

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
clhclhjdz + 1 + 1 + 1 多谢!!

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

8
jingju11 发表于 2012-12-14 23:59:22
My apology, program was updated. Again, as above, SAS/IML provides  function CORR().
jingju
  1. data have2;
  2.   set have;
  3.   array xx[3] _temporary_; array yy[3] _temporary_;
  4.         array tx[3] _temporary_; array ty[3] _temporary_;
  5.         array tr[3] _temporary_;
  6.   xx[mod(_n_-1,3)+1] = x; yy[mod(_n_-1,3)+1] = y;
  7.         /*awakardly need to reload the array                        */
  8.         /*because call stdize() refresh the array        */
  9.         do i = 1 to dim(xx);
  10.                 tx[i] = xx[i]; ty[i] = yy[i];
  11.         end;
  12.         /*vardef = N here, instead of = DEF                                */
  13.         call stdize('n',of tx[*]); call stdize('n',of ty[*]);
  14.         do i = 1 to dim(tx);
  15.     tr[i] = tx[i]*ty[i];
  16.   end;
  17.         r = mean(of tr[*]);
  18. run;
复制代码

9
jingju11 发表于 2012-12-15 00:23:57
playmore 发表于 2012-12-14 13:43
嗯,确实算的不是相关系数
相关系数的分子是x和y的协方差
应该同时对两个array进行运算
there,
There are different ways to compute corr. the way i was using is through standardization. unfortunately in the previous code, i miss the point of call stdize(), since it refreshes the array elements automatically.
if interested, please read my new blog on calculation the  correlation
http://blog.sina.com.cn/s/blog_a3a9263601018vqf.html
Jingju

10
playmore 发表于 2012-12-16 15:35:10
ziyenano 发表于 2012-12-14 17:19
data ex;
input
x        y;
嗯,学习了
IML里有CORR就方便了
还有一个小错误,do循环里应为

temp [ i ] =corr(a[i-2:i,])[2];

已有 1 人评分热心指数 收起 理由
clhclhjdz + 1 多谢!!

总评分: 热心指数 + 1   查看全部评分

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 05:47