私は3つのパラメータa
,b
およびc
の関数を持っており、これらのパラメータごとに異なるpriorを定義します。私はemcee
パッケージを使用しています。emcee内の各パラメータのカスタム事前定義を定義
私は、単純な均一(無情報)前に開始しました:私は、各パラメータ異なる前のために持っていると思います
def lnprior(theta):
m, b, c = theta
if 1.0 < m < 2.0 and 1.0 < b < 2.0 and 1.0 < c < 2.0:
return 0.0
return -np.inf
。たとえばa
の場合は、ノーマル(ミュー、シグマ)を前に、b
をユニフォームに、c
を前に(1/c)
としたいと思います。今まで私は、次のように出てくる:私の知る限り、私は合計1(lnprior
の戻り値)を定義するために一緒にすべての確率を追加する必要が対数スケールで理解されるように
def lnprior(theta):
a, b, c = theta
mu = 0.5 # mean of the Normal prior
sigma = 0.1 # standard deviation of the Normal prior
if not (1.0 < b < 2.0): # the bound on the uniform
return -np.inf
if c < 0.0: # the bound on the Jeffreys
return -np.inf
return .... # total log-prior to be determined
。では、通常のa
から始めましょう:
log_Pr(a) = np.log(1.0/(np.sqrt(2*np.pi)*sigma)) - 0.5*(a - mu)**2/sigma**2
;
その後、前c
上:
log_Pr(c) = -log(c)
。
したがって、ログ前の総数は、Pr(a)+Pr(c)
である必要があります。私の質問、このアプローチは正しいのですか?
おかげ