Skip to content

Add regularized horseshoe prior #968

@aloctavodia

Description

@aloctavodia

Similar to horseshoe prior #836, we could have the regularized version.

It could be something like this (needs to be double-checked)

def horseshoe_regularized(
    name,
    scale_global,
    scale_slab,
    nu_global=4,  # nu_global in Stan
    nu_local=1,  # nu_local in Stan
    slab_df=4,  # slab_df in Stan
    shape=None,
    dims=None,
):
    if dims is None and shape is not None:
        dims = f"{name}_dim"

    tau = pm.HalfStudentT(f"{name}_tau", nu=nu_global, sigma=scale_global)
    lam = pm.HalfStudentT(f"{name}_lam", nu=nu_local, sigma=1.0, dims=dims)

    caux = pm.InverseGamma(f"{name}_caux", alpha=slab_df / 2, beta=slab_df / 2)

    c2 = pm.Deterministic(f"{name}_c2", scale_slab**2 * caux)

    z = pm.Normal(f"{name}_z", 0.0, 1.0, dims=dims)

    lam_tilde = pm.Deterministic(
        f"{name}_lam_tilde",
        pm.math.sqrt((c2 * lam**2) / (c2 + tau**2 * lam**2)),
        dims=dims,
    )

    beta = pm.Deterministic(name, z * tau * lam_tilde, dims=dims)

    return beta

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions