首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从截断正态分布中绘制会产生错误的R标准差

从截断正态分布中绘制会产生错误的R标准差
EN

Stack Overflow用户
提问于 2019-05-16 23:25:06
回答 1查看 395关注 0票数 1

我从一个截断的正态分布中抽取随机数。假设截断正态分布在左侧0处截断后的平均值为100,标准差为60。我计算了一个算法,在截断之前计算正态分布的均值和sd (mean_old和sd_old)。函数vtruncnorm给出了(想要的)方差60^2。然而,当我从分布中抽取随机变量时,标准差约为96。我不明白为什么随机变量的sd与60的计算值不同。

我试着增加抽取量-- sd仍然在96左右。

代码语言:javascript
复制
 require(truncnorm)
 mean_old = -5425.078
 sd_old = 745.7254
 val = rtruncnorm(10000, a=0,  mean = mean_old, sd = sd_old)
 sd(val)
 sqrt(vtruncnorm( a=0,  mean = mean_old, sd = sd_old))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-17 05:00:36

好的,我做了个快速测试

代码语言:javascript
复制
require(truncnorm)

val = rtruncnorm(1000000, a=7.2,  mean = 0.0, sd = 1.0)
sd(val)
sqrt(vtruncnorm( a=7.2,  mean = 0.0, sd = 1.0))

典型截断高斯。在a=6,它们非常接近,0.1554233比0.1548865 f.e.,这取决于种子等。在a=7时,它们有系统地不同,0.1358143比0.1428084 (采样值小于函数调用)。我已经检查了Python的实现

代码语言:javascript
复制
import numpy as np
from scipy.stats import truncnorm

a, b = 7.0, 100.0

mean, var, skew, kurt = truncnorm.stats(a, b, moments='mvsk')

print(np.sqrt(var))

r = truncnorm.rvs(a, b, size=100000)
print(np.sqrt(np.var(r)))

并得到了0.1428083662823426的回归率,与result结果一致。在你的a=7.2上,结果甚至更糟。

故事的寓意-在高a值时,从rtruncnorm采样有一个bug。Python也有同样的问题。

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

https://stackoverflow.com/questions/56171917

复制
相关文章

相似问题

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