1 に答える
1.
ガウス分布の場合、条件付きガウス分布
からサンプリングするだけ
(X1,...,Xn)
の条件でサンプリングします。X1+...+Xn=s
ベクトル (X1,X2,...,Xn,X1+...+Xn) は、平均がゼロのガウス分布と分散行列をもちます。
1 0 0 ... 0 1
0 1 0 ... 0 1
0 0 1 ... 0 1
...
0 0 0 ... 1 1
1 1 1 ... 1 n.
したがって、次のようにサンプリングできます。
s <- 1 # Desired sum
n <- 10
mu1 <- rep(0,n)
mu2 <- 0
V11 <- diag(n)
V12 <- as.matrix(rep(1,n))
V21 <- t(V12)
V22 <- as.matrix(n)
mu <- mu1 + V12 %*% solve(V22, s - mu2)
V <- V11 - V12 %*% solve(V22,V21)
library(mvtnorm)
# Random vectors (in each row)
x <- rmvnorm( 100, mu, V )
# Check the sum and the distribution
apply(x, 1, sum)
hist(x[,1])
qqnorm(x[,1])
任意の分布の場合、このアプローチでは条件付き分布を計算する必要があり、これは簡単ではない可能性があります。
2. 別の簡単な特殊なケースがあります: 一様分布です。
合計が 1 になる n (正) の数値を均一にサンプリングするには、n-1 の数値を [0,1] で均一に取り、それらを並べ替えることができます。均一に分布します。
これらの点はポアソン過程を形成するため、指数分布で生成することもできます。
x <- rexp(n)
x <- x / sum(x) # Sums to 1, and each coordinate is uniform in [0,1]
このアイデアは、次の記事で (多くの写真とともに) 説明されています: 一般収益分布を使用した VaR、CVaR、オメガ、ユーティリティのポートフォリオ最適化(WT Shaw、2011 年)、6 ~ 8 ページ。
3.sum(pnorm(x))
(編集) 私は当初、 ではなく
について尋ねていた質問を読み違えていましたsum(x)
。これは簡単であることがわかりました。
X
がガウス分布の場合pnorm(X)
、一様分布になります。問題は、一様分布から所定の合計でサンプリングすることです。
n <- 10
s <- 1 # Desired sum
p <- rexp(n)
p <- p / sum(p) * s # Uniform, sums to s
x <- qnorm(p) # Gaussian, the p-values sum to s