Cómo establecer distribuciones a priori personalizadas a partir de una combinación de familias de distribuciones

Meridian ofrece un objeto de distribución personalizado (prior_distribution.IndependentMultivariateDistribution) que te permite combinar distribuciones de varias familias en una sola distribución a priori. Por ejemplo, es posible que desees usar distribuciones LogNormal para definir una distribución a priori del ROI para tres canales de medios y una distribución a priori HalfNormal para un cuarto:

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

Es posible que observes tiempos de ejecución un poco más extensos porque IndependentMultivariateDistribution divide y delega tensores de forma interna a sus distribuciones secundarias. Antes de usar IndependentMultivariateDistribution, considera si sería útil variar los parámetros entre los canales, pero dentro de la misma familia de distribución, o si es mejor usar una familia de distribución diferente.