多変量法線を生成します X∼MN(μ,Σ) と μ∈Rn そして Σ∈Rn×nそれらの合計が私たちの条件を満たすように。しましょうZ=X1+⋯+Xn。
一般的な意味として、
μ1=⋯=μn=a+b2n.
そのために Z∈[a,b] 確率で p、その標準偏差は満たす必要があります
σZ=b−aqα,
どこ qα レベルに対する標準の通常の分位数です α、 ここに α=1−1−p2。
次に指定する必要があります Σ。ここには多くの余裕があります。私たちはそれぞれが欲しいと仮定しましょうXiの分散 σ2 そして共分散は cov(Xi,Xj)=τ ために i≠j。「良い」を作るための鍵Σあるprobabilityislogicことで、この前の答えが。それは私たちの合計Xisには分散があります
nσ2+n(n−1)τ
それが必要です
nσ2+n(n−1)τ=b−aqα.
また、 Σ正定ですが、これはそれほど難しいことではありません。これを行う最も簡単な方法は、すべてのエントリがΣ 例えば、設定により
σ2:=σ2Z2n,τ:=σ2Z2n(n−1),
しかし、これは非常に小さな値と非常に退屈な累積合計と軌道を与えます:
設定するのは退屈ではありません
σ2:=1,τ:=1n−1(σ2Zn−σ2),
より興味深い軌跡が得られます:
これを設定すると、実際に有効な共分散行列が生成されることに注意してください。 Σ 次に、 Σij=m(i−j)、すなわち
m(0)=σ2,m(j)=τ for j>0,
そして私たちはそれを持っています
∑j>0|m(j)|=(n−1)|τ|=∣∣σ2Zn−σ2∣∣=∣∣σ2Zn−1∣∣<1=σ2=m(0),
これは十分な条件です Σウィキペディアで明確に明確に定義されていること(「その他のプロパティ」のポイント7 )。
以下のRコードですが、最初に、proposisislogic の回答に賛成して投票してください。
n_steps <- 1000
target_min <- 1.99
target_max <- 2.01
target_prob <- 0.99
target_mean <- mean(c(target_min,target_max))
target_sd <- (target_max-target_mean)/qnorm(p=1-(1-target_prob)/2)
mm <- rep(target_mean/n_steps,n_steps)
# boring setting:
# sigma_sq <- target_sd^2/(2*n_steps)
# tau <- target_sd^2/(2*n_steps*(n_steps-1))
sigma_sq <- 1
tau <- (target_sd^2/n_steps-sigma_sq)/(n_steps-1)
CC <- matrix(tau,nrow=n_steps,ncol=n_steps)
diag(CC) <- sigma_sq
library(MASS)
foo <- mvrnorm(1,mu=mm,Sigma=CC)
sum(foo)
plot(cumsum(foo),type="l",xlab="",ylab="")
abline(h=target_mean,lty=2)