Xav*_*ent 0 random r gaussian truncated
像大多数物理问题一样,我的情况受到边界的影响,因此我想根据截断的高斯分布生成(带有R)随机数.
这个想法是这些数字的平均值不应该取决于边界.我已经找到了包truncnorm,但它不能完成这项工作:
例如,这里是高斯平均值为0.1和宽度为0.1,但约束在0和1之间的情况:
install.packages("truncnorm")
library(truncnorm)
vec=rtruncnorm(n=100000,a=0,b=1,mean=0.1,sd=0.1)
hist(vec,breaks=100)
mean(vec)
[1] 0.1289061
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,最终均值不是作为输入给出的,我可以通过使用标准rnorm函数并对结果进行子设置得到相同的结果.
我不想重新发明轮子,所以欢迎任何进一步包装的想法或建议!谢谢!
截断分发时,这不是您所期望的吗?
#Example
x <- rnorm( 1e7 , mean = 0.1 , sd = 0.1 )
mean( x[ ! ( x < 0 | x > 1 ) ] )
#[1] 0.128814
#Visualising
hist( x , breaks = 100 , xlim = c(-1,1) )
#limits (red)
abline( v = 0 , col = "red" , lwd = 1 , lty = 2 )
abline( v = 1 , col = "red" , lwd = 1 , lty = 2 )
#truncated mean (green)
abline( v = mean( x[ !(x<0|x>1)] ) , col = "green" , lty = 2 , lwd = 1 )
#true mean (blue)
abline( v = 0.1 , col = "blue" , lty = 1 , lwd = 1 )
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
1032 次 |
| 最近记录: |