当前位置: 首页 > 知识库问答 >
问题:

如何从SAS中具有给定均值和SD的对数正态分布生成随机数?

郑富
2023-03-14

如果正确,则当
Z来自mu'=0,sigma'=1的标准正态分布Z时,我的y将从对数正态分布中提取。

最后,如果
y=exp^(ln((mean^2)/(sqrt(variance+mean^2))+sqrt(ln(1+(variance)/(mean^2)))*Z),y来自具有均值和方差的对数正态分布是否正确?

我的SAS代码是:
/*我在这里使用stddev^2表示法而不是方差。*/
数据nonstlognorm;
nonstln=exp(1)**(log((mean**2)/(sqrt(stddev^2+mean**2))+sqrt(log(1+(stddev^2)/(mean**2))*rand(“Uniform”));
运行;

参考资料:
RANDRick Wicklin的函数:http://blogs.sas.com/content/iml/2013/07/10/stop-using-ranuni/http://blogs.sas.com/content/iml/2011/08/24/how-to-generate-random-numbers-in-SAS/

共有1个答案

罗智刚
2023-03-14

你需要的是逆累积分布函数。这个函数是整个区域上分布的归一化积分的逆函数。所以0%是你最负的可能值,100%是你最正的可能值。实际上,你会冷静到0.01%和99.99%之类的,否则,你会在无限大的发行版结束。

然后您只需要在一个范围(0,1)中随机设置一个数字,并将其插入函数中。记得夹住它!

double CDF = 0.5 + 0.5*erf((ln(x) - center)/(sqrt(2)*sigma))

所以

double x = exp(inverf((CDF - 0.5)*2.0)*sqrt(2)*sigma + center);
   //This is how I do it with my Random class where the first argument
   //is the min value and the second is the max 
   double CDF = Random::Range(0.0001,0.9999); //Depends on what you are using to random

   //How you get there from Random Ints
   unsigned int RandomNumber = rand();
    //Conver number to range [0,1]
   double CDF = (double)RandomNumber/(double)RAND_MAX; 
   //now clamp it to a min, max of your choosing
   CDF = CDF*(max - min) + min; 
 类似资料:
  • 问题内容: 我有一个具有不同值的概率的文件,例如: 我想使用此分布生成随机数。是否存在处理此问题的现有模块?自己编写代码是很简单的(构建累积密度函数,生成随机值[0,1]并选择相应的值),但似乎这应该是一个常见问题,并且可能有人为它创建了一个函数/模块它。 我需要这个,因为我想生成一个生日列表(不遵循标准模块中的任何分布)。 问题答案: 可能就是你想要的。你可以通过values参数提供概率。然后,

  • 问题内容: 最重要的答案是建议使用switch语句来完成这项工作。但是,如果我要考虑的情况很多,那么代码看起来就很笨拙。我有一个巨大的switch语句,在每种情况下都一遍又一遍地重复非常相似的代码。 当您要考虑的概率很大时,是否有更好,更干净的方法来选择具有一定概率的随机数?(例如〜30) 问题答案: 这是一个Swift实现,受各种答案的影响很大,这些答案会生成具有给定(数字)分布的随机数 对于

  • 我将需要初始化一个'n'数量的类,将有一个随机值附加到他们从1到100。 我知道如何创建一个介于1和100之间的随机值,但我如何使所有的值都落在一个正态分布模式?

  • 假定最小=0.00,最大=1400.00,均值=150.50,标准差=25.00,如何根据这些统计数据产生随机值?根据我的理解,这个图是一个斜图,但是我不太确定它是否是一个对数正态分布。然而,从我目前的理解来看,下面的代码返回的值来自正态分布。

  • 我有有限的数据RV,我可以找到平均mu和标准差sigma。现在我想生成更多的数据点保持相同的mu和sigma。在MATLAB中我怎么做呢?我做了以下工作,但是当我绘制生成的数据(mu_2)的平均值时,它不匹配MU...