NIG_POST_UPDATE

This function performs conjugate updating for a Normal likelihood with unknown mean and unknown variance using a Normal-Inverse-Gamma prior. It returns the posterior hyperparameters that define the updated joint prior for mean and variance.

With prior (\mu_0, \kappa_0, \alpha_0, \beta_0) and sample summaries (n, \bar{x}, s^2), the posterior updates are:

\kappa_n = \kappa_0 + n, \quad \mu_n = \frac{\kappa_0\mu_0 + n\bar{x}}{\kappa_n}, \quad \alpha_n = \alpha_0 + \frac{n}{2}

\beta_n = \beta_0 + \frac{1}{2}(n-1)s^2 + \frac{\kappa_0 n (\bar{x}-\mu_0)^2}{2\kappa_n}

Excel Usage

=NIG_POST_UPDATE(mu_prior, kappa_prior, alpha_prior, beta_prior, sample_size, sample_mean, sample_var)
  • mu_prior (float, required): Prior location hyperparameter for the mean.
  • kappa_prior (float, required): Prior mean-strength hyperparameter (positive).
  • alpha_prior (float, required): Prior inverse-gamma shape hyperparameter (positive).
  • beta_prior (float, required): Prior inverse-gamma scale hyperparameter (positive).
  • sample_size (int, required): Number of observations summarized by sample statistics (nonnegative).
  • sample_mean (float, required): Observed sample mean.
  • sample_var (float, required): Observed sample variance using denominator n-1 (nonnegative).

Returns (list[list]): 2D array containing posterior Normal-Inverse-Gamma hyperparameters.

Example 1: Posterior update from moderate sample summary

Inputs:

mu_prior kappa_prior alpha_prior beta_prior sample_size sample_mean sample_var
0 2 3 4 12 1.5 2.4

Excel formula:

=NIG_POST_UPDATE(0, 2, 3, 4, 12, 1.5, 2.4)

Expected output:

Result
1.28571 14
9 19.1286
Example 2: Small sample with informative prior

Inputs:

mu_prior kappa_prior alpha_prior beta_prior sample_size sample_mean sample_var
5 10 6 8 3 4.6 1.2

Excel formula:

=NIG_POST_UPDATE(5, 10, 6, 8, 3, 4.6, 1.2)

Expected output:

Result
4.90769 13
7.5 9.38462
Example 3: Large sample with weak prior information

Inputs:

mu_prior kappa_prior alpha_prior beta_prior sample_size sample_mean sample_var
-2 1 2 2 60 -1.1 0.9

Excel formula:

=NIG_POST_UPDATE(-2, 1, 2, 2, 60, -1.1, 0.9)

Expected output:

Result
-1.11475 61
32 28.9484
Example 4: Zero sample size preserves prior hyperparameters

Inputs:

mu_prior kappa_prior alpha_prior beta_prior sample_size sample_mean sample_var
1 3 4 5 0 2.5 1.8

Excel formula:

=NIG_POST_UPDATE(1, 3, 4, 5, 0, 2.5, 1.8)

Expected output:

Result
1 3
4 5

Python Code

pass

def nig_post_update(mu_prior, kappa_prior, alpha_prior, beta_prior, sample_size, sample_mean, sample_var):
    """
    Update Normal-Inverse-Gamma posterior hyperparameters from sample summaries.

    See: https://en.wikipedia.org/wiki/Normal-inverse-gamma_distribution

    This example function is provided as-is without any representation of accuracy.

    Args:
        mu_prior (float): Prior location hyperparameter for the mean.
        kappa_prior (float): Prior mean-strength hyperparameter (positive).
        alpha_prior (float): Prior inverse-gamma shape hyperparameter (positive).
        beta_prior (float): Prior inverse-gamma scale hyperparameter (positive).
        sample_size (int): Number of observations summarized by sample statistics (nonnegative).
        sample_mean (float): Observed sample mean.
        sample_var (float): Observed sample variance using denominator n-1 (nonnegative).

    Returns:
        list[list]: 2D array containing posterior Normal-Inverse-Gamma hyperparameters.
    """
    try:
        mu_prior = float(mu_prior)
        kappa_prior = float(kappa_prior)
        alpha_prior = float(alpha_prior)
        beta_prior = float(beta_prior)
        sample_size = int(sample_size)
        sample_mean = float(sample_mean)
        sample_var = float(sample_var)

        if kappa_prior <= 0 or alpha_prior <= 0 or beta_prior <= 0:
            return "Error: kappa_prior, alpha_prior, and beta_prior must be positive"
        if sample_size < 0:
            return "Error: sample_size must be nonnegative"
        if sample_var < 0:
            return "Error: sample_var must be nonnegative"

        kappa_post = kappa_prior + sample_size
        mu_post = (kappa_prior * mu_prior + sample_size * sample_mean) / kappa_post
        alpha_post = alpha_prior + 0.5 * sample_size

        scatter_term = 0.5 * max(sample_size - 1, 0) * sample_var
        mean_shift_term = 0.5 * (kappa_prior * sample_size / kappa_post) * ((sample_mean - mu_prior) ** 2)
        beta_post = beta_prior + scatter_term + mean_shift_term

        return [[mu_post, kappa_post], [alpha_post, beta_post]]
    except Exception as e:
        return f"Error: {str(e)}"

Online Calculator

Prior location hyperparameter for the mean.
Prior mean-strength hyperparameter (positive).
Prior inverse-gamma shape hyperparameter (positive).
Prior inverse-gamma scale hyperparameter (positive).
Number of observations summarized by sample statistics (nonnegative).
Observed sample mean.
Observed sample variance using denominator n-1 (nonnegative).