楼主: tj0412ymy
7399 20

[原创博文] 向高手请教:如何产生两列不相关的随机数? [推广有奖]

  • 2关注
  • 48粉丝

已卖:4314份资源

副教授

65%

还不是VIP/贵宾

-

威望
0
论坛币
11512 个
通用积分
12.7575
学术水平
72 点
热心指数
91 点
信用等级
64 点
经验
29292 点
帖子
545
精华
0
在线时间
1203 小时
注册时间
2009-3-10
最后登录
2024-2-15

楼主
tj0412ymy 发表于 2010-6-20 16:53:09 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现欲生成两列不相关的服从均匀分布U(0,1)的随机数x1和x2,请教用SAS如何产生?我用下面的程序产生的随机数列间的相关性时高时低:
data test;
do i=1 to 300;
x1=ranuni(0);
x2=ranuni(1234);
u=exp(1+x1+x2);
y=ranpoi(0,u);
output;
end;
run;
proc print data=test;
run;
proc corr data=test;
var x1 x2;
run;
二维码

扫码加我 拉你入群

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

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

关键词:随机数 ranuni output outpu print 相关性 如何 程序

回帖推荐

andy162639 发表于12楼  查看完整内容

data binormal; a1=sqrt((1+0)/2);*此处的0可以控制相关系数; a2=sqrt((1-0)/2); do i=1 to 100; rd1=rand('uniform'); rd2=rand('uniform'); e1=a1*rd1+a2*rd2; e2=a1*rd1-a2*rd2; output; end; keep e1 e2; run; proc corr data=binormal; var e1 e2; run; 运行一下就知道了

本帖被以下文库推荐

沙发
wkn1986 发表于 2010-6-20 17:16:36
随机抽样时高时低很正常啊,只要是样本,相关系数不可能严格为零

藤椅
tj0412ymy 发表于 2010-6-20 17:28:25
2# wkn1986
由于现要求随机数列是不相关的,所以它们之间的相关系数应该为0!如何才能办到?

板凳
andy162639 发表于 2010-6-20 20:41:08
proc iml;
do i=1 to 1000;
mu={0,0};*均数向量;
sigma={10 0,0 22};*协方差阵;
call vnormal(result,mu,sigma,i);
end;
print result;
quit;
通过设定协方差阵来控制变量的相关性。
有人说,统计归根结底就是个P

报纸
tj0412ymy 发表于 2010-6-20 23:02:03
4# andy162639
高手编的程序算出来的应该是两列不相关的正态分布序列吧?当然任何常见分布都可以这样去处理。请问一下在DATA步里能否实现这个过程?

地板
andy162639 发表于 2010-6-21 00:27:03
据说所知可能不行,我所见过的文献中多变量数据模拟都是用vnormal的
有人说,统计归根结底就是个P

7
wkn1986 发表于 2010-6-21 08:48:12
proc iml;
do i=1 to 1000;
mu={0,0};*均数向量;
sigma={10 0,0 22};*协方差阵;
call vnormal(result,mu,sigma,i);
end;
print result;
quit;
通过设定协方差阵来控制变量的相关性。
这个样本相关系数也依然不为零啊。

8
andy162639 发表于 2010-6-21 09:12:36
均数为0,方差为1,协方差系数不就是相关系数了吗,可以严格控制相关系数了。
有人说,统计归根结底就是个P

9
tj0412ymy 发表于 2010-6-21 09:19:22
8# andy162639
我在论坛上找到如下程序,请问高手如何用下述程序产生两列不相关的0-1均匀分布随机数?谢谢!
如何用SAS生成二维随机数?假设生成两个变量,每个变量的边缘分布为标准正态分布,且两个变量之间不独立,现在知道它们的联合分布.怎样产生这样的一组二维随机数?
For 2-dimesional matrix, it can be done in a data step with rotations. For 3-dimesional matrix, you can use call vnormal in SAS/IML package. Here is an example.

%let rho=0.8;
%let size=1000;

data binormal;

rho=ρ


a1=sqrt((1+rho)/2);


a2=sqrt((1-rho)/2);


do i=1 to &size;


rd1=rannor(12390);


rd2=rannor(12390);


e1=a1*rd1+a2*rd2;


e2=a1*rd1-a2*rd2;


output;


end;


keep e1 e2;

run;

proc corr data=binormal;
var e1 e2;
run;

proc iml;
n=1000;
et=repeat(0,n,3);
mu
= { 0, 0,0 };

sigma= { 1
0.9
0.5,


0.9 1 0.09,


0.5 0.09 1};



call vnormal(et, mu, sigma, n, -10000999);


create a from et ;


append from et;

quit;

proc corr data=a;
var col1 col2 col3;
run;

10
wkn1986 发表于 2010-6-21 09:57:46
楼主的要求是出来的两个样本的相关系数为0吗?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 18:00