事前に指定された合計で、同一に分布する従属正規乱数を生成します


7

生成する方法 n それらの合計が事前に指定された間隔内に収まるように、同一に分布しているが独立していない通常の乱数 [a,b] 確率で p

(この質問は、事前に指定されたポイントで終わるランダムウォークを生成することによって動機付けられます。結局、ランダムプロセスはそれほどランダムではありません(決定論的)。最終的に間隔全体を要求します。)


編集:特異ガウス分布からのサンプルの生成は、重複として提案されています。これは、正定共分散行列を使用して正規分布乱数生成するの重複として閉じられます。これらの両方が役立つことに同意します。ただし、現在の質問(より具体的には、回答)のポイントは、まず多変量正規分布を使用して質問に対処できることを理解し、次に、どのような共分散行列が機能するかを理解することです。その共分散のある分布からサンプリングする方法は、リンクされたスレッドが役立つ3番目のステップです。


2
ブラウン橋に関する文献もご覧ください。
ベンボルカー2018

@BenBolker:私よりもずっといいアイデアのように思えます。答えを書いてみませんか?
ステファンコラサ

多分私はそれに行くでしょうが、これを読んでいる人は誰でも気軽に飛び込んで答えを書いてください。私は気にしません。
ベンボルカー2018

1
(申し訳ありませんが、もちろん「BB-BB」を意味します。)
Stephan Kolassa

回答:


7

多変量法線を生成します XMN(μ,Σ)μRn そして ΣRn×nそれらの合計が私たちの条件を満たすように。しましょうZ=X1++Xn

一般的な意味として、

μ1==μn=a+b2n.

そのために Z[a,b] 確率で p、その標準偏差は満たす必要があります

σZ=baqα,

どこ qα レベルに対する標準の通常の分位数です α、 ここに α=11p2

次に指定する必要があります Σ。ここには多くの余裕があります。私たちはそれぞれが欲しいと仮定しましょうXiの分散 σ2 そして共分散は cov(Xi,Xj)=τ ために ij。「良い」を作るための鍵Σあるprobabilityislogicことで、この前の答えが。それは私たちの合計Xisには分散があります

nσ2+n(n1)τ

それが必要です

nσ2+n(n1)τ=baqα.

また、 Σ正定ですが、これはそれほど難しいことではありません。これを行う最も簡単な方法は、すべてのエントリがΣ 例えば、設定により

σ2:=σZ22n,τ:=σZ22n(n1),

しかし、これは非常に小さな値と非常に退屈な累積合計と軌道を与えます:

退屈な

設定するのは退屈ではありません

σ2:=1,τ:=1n1(σZ2nσ2),

より興味深い軌跡が得られます:

面白い

これを設定すると、実際に有効な共分散行列が生成されることに注意してください。 Σ 次に、 Σij=m(ij)、すなわち

m(0)=σ2,m(j)=τ for j>0,

そして私たちはそれを持っています

j>0|m(j)|=(n1)|τ|=|σZ2nσ2|=|σZ2n1|<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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.