楼主: pfwx
15096 9

[原创博文] 怎么产生符合对数正态分布的随机数? [推广有奖]

  • 0关注
  • 0粉丝

初中生

90%

还不是VIP/贵宾

-

威望
0
论坛币
3 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
365 点
帖子
14
精华
0
在线时间
20 小时
注册时间
2008-6-25
最后登录
2019-11-1

楼主
pfwx 发表于 2011-3-7 23:27:17 |AI写论文
5论坛币
如题?谢谢各位了,本人菜鸟。如果已知对数正态分布LN(m,n^2)(m和n分别为参数),请问如何产生符合对数正态分布的随机数?
1.要是先产生相应正态分布随机数的话,该正态分布的参数该如何设置啊?代码怎么写啊?
2.要是直接从 未命名1.JPG 产生的话,代码怎么写啊?

最佳答案

zhangweibeckham 查看完整内容

你的问题本身就已经给出答案了啊,你就先生成一个均值为MU,方差为SIGMA2的正态分布, DATA NORMAL; SEED=12345; DO I=1 TO 10; XNORMAL=MU+SQRT(SIGMA2)*RANNOR(SEED); OUTPUT; END; X=EXP(XNORMAL);/*X LOGNORMALLY DISTRIBUTED*/ RUN; 这里的X就是符合你公式的分布密度函数了。 其中MU就是你公式中的符号U,SQRT(SIGMA2)就是那个倒Q差不多的符号。 其实,如果你根据密度函数的转换公式计算一下,你马上就明白了 ...
关键词:对数正态分布 正态分布 随机数 如何 正态分布

本帖被以下文库推荐

沙发
zhangweibeckham 发表于 2011-3-7 23:27:18
你的问题本身就已经给出答案了啊,你就先生成一个均值为MU,方差为SIGMA2的正态分布,
DATA NORMAL;
SEED=12345;
DO I=1 TO 10;
  XNORMAL=MU+SQRT(SIGMA2)*RANNOR(SEED);
  OUTPUT;
END;
X=EXP(XNORMAL);/*X LOGNORMALLY DISTRIBUTED*/
RUN;
这里的X就是符合你公式的分布密度函数了。
其中MU就是你公式中的符号U,SQRT(SIGMA2)就是那个倒Q差不多的符号。
其实,如果你根据密度函数的转换公式计算一下,你马上就明白了。
看来要和数据打一辈子的交道了!

藤椅
hssnow 发表于 2011-3-7 23:36:40
用 rannor() 或 normal() 函数可以产生正态分布随机数
My Blog: http:/hssnow.name/
宁静致远

板凳
ntsean 发表于 2011-3-8 08:49:47
先产生normal 分布的数,然后做 exponential

报纸
novice505 发表于 2011-3-8 09:20:56
SAS帮助:
A normal variate X with mean MU and variance S2 can be generated with this code:

x=MU+sqrt(S2)*rannor(seed);

A lognormal variate X with mean exp(MU + S2/2) and variance exp(2*MU + 2*S2) -exp(2*MU + S2) can be generated with this code:

x=exp(MU+sqrt(S2)*rannor(seed));

地板
zhangweibeckham 发表于 2011-3-8 13:08:19
产生对数正态分布随机数的方法有几种:
第一、利用DATA 步,
data lognormal;
seed=12345;/*define the seed*/
call streaminit(seed);
do i=1 to 10;
x=rand('lognormal');/*the lognormal random numbers' generating function*/
output;
end;
keep x;
run;
proc print data=lognormal;
run;
第二:在PROC IML模块中,也可以生成
proc iml;
seed=12345;
call streaminit(seed);
x=rand('lognormal',j(10,1));
print x;
quit;
第三、还是在PROC IML模块中,不过函数变了
proc iml;
seed=12345;
x=j(1,10,.);
call randseed(seed);
call rangen(x,'lognormal');
print x;
quit;
以上方法都是生成标准对数正态分布的函数,即均值为EXP(1/2),方差为EXP(2)-EXP(1)。
实际上,如果你想生成一个均值为mean ,方差为variance的对数正态分布,那么你就要先去计算对数正态的两个参数的值(1,MU  2,SIGMA2),因为对数正态分布的均值表达式为:
mean=EXP(MU+0.5*SIGMA2),  variance=EXP(2*MU+SIGMA2)*[EXP(SIGMA2)-1],
所以你要先根据你自己要的均值和方差去算出MU和SIGMA2,再来生成随机数。
看来要和数据打一辈子的交道了!

7
pfwx 发表于 2011-3-8 18:08:00
5# zhangweibeckham
非常感谢啊。是不是说,如果产生非标准的对数正态分布,只能像四楼的那样,或者说那一种方法?

8
pfwx 发表于 2011-3-8 18:12:14
5# zhangweibeckham 如果已知了MU,和SIGEMA的话,而且不是0,1的话,只能用四楼说的哪一样,去产生随机数?谢谢啊。

9
zhangweibeckham 发表于 2011-3-8 19:04:36
4楼的方法是可以的,对数正态分布的意思就是:对于变量X,有LN(X)~N(MU,SIGMA2),即对数正态分布变量的取对数后是服从正态分布的,所以你可以先生成正态分布序列(用:rannor()函数,其它的像NORMAL(),RAND(),RANDGEN()也都可以),再EXP()就可以了,这时候的序列的均值和方差就是4楼的公式里写的。
看来要和数据打一辈子的交道了!

10
pfwx 发表于 2011-3-8 22:27:10
8# zhangweibeckham
再次请教下:如下图:
该如何先生成符合正态分布的随机数,再转化成对数正态分布的随机数啊?谢谢啊。

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

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