0

次のようにパラメータの指数事前分布を定義したい

ここに画像の説明を入力

したがって、私はpymcでそれを定義しました

@pm.stochastic
def MASS(value=math.pow(10,15), rate = math.pow(10,15)):
    """mass is a stochastic parameter with exponential distribution.p(M)~exp(-M/10^15)"""
    return pm.exponential_like(value, rate)
@pm.potential
def MASS_bound(MASS=MASS):
    if ((MASS >= math.pow(10,13)) and (MASS < math.pow(10,16))):
       return 0.0
    else:
       return -np.inf

という制約も満たしてほしい

ここに画像の説明を入力

しかし、MCMC コードの変更を非常にゆっくりと実行すると、とMASSの間でこの 3 桁の速度で変更したいと思います。パラメータ空間で大幅に変更するために、どのように前もって定義できますか?1e+131e16

4

1 に答える 1

0

範囲間で定義すると、事前確率が指数関数のように見えることがわかり、それ[1e-2,10]を対数尤度で使用するには、それを乗算して1e15、さらに分析するために必要な振幅の順序を取得します

import pymc as pm
import numpy as np
M0=1e15

@pm.stochastic(dtype=np.float, observed=False, trace=True)
def ma(name='ma',value=0.1, rate = 1):
    """mass is a stochastic parameter with exponential distribution.p(M)~exp(-M/10^15)"""
    return pm.exponential_like(value, rate)
@pm.potential
def ma_bound(ma=ma):
    if ((ma >= 0.01) and (ma < 10)):
       return 0.0
    else:
       return -np.inf

M=pm.MCMC([ma,ma_bound])
M.sample(15000,5000,50)
于 2014-07-23T11:39:06.240 に答える