6
4

1 に答える 1

6

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
于 2013-03-03T20:56:33.247 に答える