楼主: szfdtz
18649 15

[有偿编程] 如何生成截尾正态分布随机数(思路) [推广有奖]

11
wxxdhr 学生认证  发表于 2013-7-19 12:03:46
大侠们好,请问用VBA编正态分布随机数出现负值怎么办?截尾的话要怎么做呢?
Public Function normsTD(ByVal m, ByVal s) As Double
'    Dim m As Double, s As Double
    Dim Ls1 As Double, Ls2 As Double
    Dim Miu As Double
    Ls1 = Rnd
    Ls2 = Rnd
    Miu = (-2 * Log(Ls1)) ^ (1 / 2) * Cos(2 * WorksheetFunction.Pi() * Ls2)
    normsTD = m + s * Miu
End Function

12
szfdtz 在职认证  发表于 2013-7-20 11:40:41
wxxdhr 发表于 2013-7-19 12:03
大侠们好,请问用VBA编正态分布随机数出现负值怎么办?截尾的话要怎么做呢?
Public Function normsTD(ByV ...
在VBA里边可以用概率来限定,根据取值范围求概率范围,然后根据概率范围来生成随机数

13
wxxdhr 学生认证  发表于 2013-7-24 19:54:40
谢谢大侠的回复,我发现截尾的做法不合理,变异SD会变小,不符合实际情况,所以我准备把数据对数转换,用平均值、CV,要如何生成对数正态分布的数据呢?在VBA里如何编代码?

14
szfdtz 在职认证  发表于 2013-7-27 01:54:12
wxxdhr 发表于 2013-7-24 19:54
谢谢大侠的回复,我发现截尾的做法不合理,变异SD会变小,不符合实际情况,所以我准备把数据对数转换,用平 ...
用函数LogInv(随机概率,均值,标准差)来生成对数随机数,随机概率的范围通过你的数据范围来限制(LogNormDist)

15
glhydxz123 发表于 2013-7-28 13:20:06
截尾正态分布的密度函数得重新算过,之后用筛选抽样的办法去做。下面是一个半正态分布的例子: 捕获.JPG

16
wxxdhr 学生认证  发表于 2013-8-6 15:34:43
谢谢大侠们的回复,因为是药代动力学参数,所以我用对数正态分布做了。

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

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