0

ほとんどの物理的な問題と同様に、私の場合は境界に苦しんでいるため、切り捨てられたガウス分布に従って (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

ご覧のとおり、最終的な平均は入力として与えられたものではありません。標準の rnorm 関数を使用して結果をサブセット化することで、同じ結果を得ることができました。

車輪の再発明はしたくないので、さらなるパッケージのアイデアや提案は大歓迎です! ありがとう!

4

2 に答える 2

1

したがって、切り捨ての前後の平均値を区別する必要がある場合があり、切り捨てられたサンプルがおそらく収束する観測可能な平均値を制御するつもりであると思われますが、rnorm()(おそらくrtruncnorm()、私にはわかりませんが)「前」の意味を期待しています。stats.stackexchange.com の一部の統計学者は、より完全な分析ソリューションを提供するかもしれませんが、遊び心のある最適化は、適切な「前」パラメーターを見つけるのにも役立つ可能性があります (「前」- sd パラメータも変更する必要があります):

myrtruncnorm <- function(n,a,b,mean=0,sd=1) 
    qnorm(runif(n,pnorm(a,mean=mean,sd=sd),pnorm(b,mean=mean,sd=sd)),mean=mean,sd=sd)
set.seed(1)
optim(list(mean=.1,sd=.1), function(x)
    abs(mean(myrtruncnorm(n=100000,a=0,b=1,mean=x[[1]],sd=x[[2]]))-.1))
# returns mean=0.07785390 and sd=0.07777597, let's test that: 
x1 <- myrtruncnorm(100000,0,1,0.07785390,0.07777597)
hist(x1); mean(x1) # Is "mean=0.1003832" sufficiently close?
于 2014-04-24T10:18:23.807 に答える