メリディアンには、複数の分布族を 1 つの事前分布に結合できるカスタムの分布オブジェクト(prior_distribution.IndependentMultivariateDistribution)が用意されています。たとえば LogNormal 分布を使用して、3 つのメディア チャネルの ROI 事前分布、および 4 つ目のチャネルの HalfNormal 事前分布を定義したい場合などです。
import numpy as np
import tensorflow_probability.substrates.jax as tfp_jax
from meridian.model import model, prior_distribution, spec
distributions = [
tfp_jax.distributions.LogNormal(
np.array([0.2, 0.2, 0.2], dtype=np.float64),
np.array([0.9, 0.9, 0.9], dtype=np.float64),
),
tfp_jax.distributions.HalfNormal(np.float64(5.0)),
]
roi_m_prior = (
prior_distribution.IndependentMultivariateDistribution(distributions)
)
prior = prior_distribution.PriorDistribution(roi_m=roi_m_prior)
model_spec = spec.ModelSpec(prior=prior)
meridian_model = model.Meridian(
input_data=..., # an `InputData` object
model_spec=model_spec,
)
IndependentMultivariateDistribution は内部でテンソルを分割して子分布に委任するため、実行時間が若干長くなることがあります。IndependentMultivariateDistribution を使用する前に、チャネル間でパラメータを変更して(同じ分布族内)機能するかどうか、または別の分布族を使用する方がよいかどうかを検討してください。