具有R,随机值的对数正态截断分布

时间:2015-11-22 22:52:50

标签: r

我需要生成随机值,这些值表示遵循对数正态分布的时间(以秒为单位):

Min: 120 seconds
Max: 1260 seconds
Mean: 356 seconds
SD: 98 seconds

我正在生成100个随机数:

library(EnvStats)
sample1 <- rlnormTrunc(100,356,98,120,1260)

当我计算平均值时,它不是356,而是更高,大约490秒。为什么呢?

我不明白我做错了什么,因为我会得到同样的意思。

有没有人对此有答案?

1 个答案:

答案 0 :(得分:3)

原因是您比较了不同的分布,因此当您从这些分布中创建随机数时,它们的均值是不同的。 如果我们以正态分布为例

set.seed(111) 
sample1 <- rnorm(n=10000,mean=356,sd=98)
mean(sample1) #355.7724

平均值确实差不多356.但是如果我们采用截断的正态分布那么

set.seed(111)
sample2<-rnormTrunc(n=100000,mean=356,sd=98,min=120 ,max=1260)
mean(sample2) #357.9636

平均值略有不同,大约358 但不是356 。差异如此之小的原因是因为,如直方图所示

hist(rnorm(n=10000,mean=356,sd=98),breaks=100,xlim=c(0,1300))
abline(v=120,col="red")
abline(v=1260,col="red")

enter image description here

通过截断,您可以获取非常罕见的值(小于120且大于1260)。

LogNormal是一个胖尾分布,偏向右边。这意味着它包含的偶发值远远超过正态分布,远远超过1260.如果截断120到1260之间的分布

hist(rlnormTrunc(10000,meanlog=356,sdlog=98,min=120,max=1260),breaks=100)

你得到了

set.seed(111)
mean(rlnormTrunc(10000,meanlog=356,sdlog=98,min=120,max=1260))  #493.3903

enter image description here

在上面的每个示例中,您可以计算不同范围的随机值集的均值,因为它们的分布不同,这就是为什么您最终得到不同的平均值。