首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有R,随机值的对数正态分布截断分布

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

Stack Overflow用户
提问于 2015-11-22 22:52:50
回答 1查看 1.6K关注 0票数 1

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

代码语言:javascript
复制
Min: 120 seconds
Max: 1260 seconds
Mean: 356 seconds
SD: 98 seconds

我正在生成100个随机数:

代码语言:javascript
复制
library(EnvStats)
sample1 <- rlnormTrunc(100,356,98,120,1260)

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

我不明白我做错了什么,因为我以为我会得到同样的刻薄。

有人能回答这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2017-02-08 15:56:46

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

代码语言:javascript
复制
set.seed(111) 
sample1 <- rnorm(n=10000,mean=356,sd=98)
mean(sample1) #355.7724

这一平均数实际上将接近356。但如果我们取截断正态分布

代码语言:javascript
复制
set.seed(111)
sample2<-rnormTrunc(n=100000,mean=356,sd=98,min=120 ,max=1260)
mean(sample2) #357.9636

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

代码语言:javascript
复制
hist(rnorm(n=10000,mean=356,sd=98),breaks=100,xlim=c(0,1300))
abline(v=120,col="red")
abline(v=1260,col="red")

在这里输入图像描述

通过截断,可以取出非常少见的值(小于120,大于1260)。

LogNormal是一个肥尾分布,向右倾斜。这意味着它包含比正态分布少得多的值,远远超过1260。如果您截断120到1260之间的分布

代码语言:javascript
复制
hist(rlnormTrunc(10000,meanlog=356,sdlog=98,min=120,max=1260),breaks=100)

你会得到

代码语言:javascript
复制
set.seed(111)
mean(rlnormTrunc(10000,meanlog=356,sdlog=98,min=120,max=1260))  #493.3903

在这里输入图像描述

在上面的每个例子中,由于分布不同,计算了不同范围的随机值集的平均值,这就是为什么最终得到不同的平均值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33861242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档