Definir distribuições a priori personalizadas com base em uma combinação de famílias de distribuição

O Meridian oferece um objeto de distribuição personalizada (prior_distribution.IndependentMultivariateDistribution) que permite combinar distribuições de várias famílias em uma a priori. Por exemplo, você pode usar distribuições log-normais para definir uma distribuição a priori de ROI para três canais de mídia e uma distribuição a priori Half-Normal para um quarto canal:

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,
)

Talvez você note tempos de execução um pouco mais longos porque o IndependentMultivariateDistribution divide e delega tensores internamente para as distribuições secundárias. Antes de usar IndependentMultivariateDistribution, avalie se variar os parâmetros entre canais, mantendo-os dentro da mesma família de distribuição, seria útil ou se seria melhor usar uma família de distribuição diferente.