NN_POST_UPDATE

This function performs conjugate updating for a Normal likelihood with known observation variance and a Normal prior on the mean. It returns posterior mean and posterior variance for the unknown mean parameter.

If the prior is \mu \sim \mathcal{N}(\mu_0, \sigma_0^2) and the sample mean is \bar{x} from n observations with known variance \sigma^2, then:

\sigma_n^2 = \left(\frac{1}{\sigma_0^2} + \frac{n}{\sigma^2}\right)^{-1}, \qquad \mu_n = \sigma_n^2\left(\frac{\mu_0}{\sigma_0^2} + \frac{n\bar{x}}{\sigma^2}\right)

Excel Usage

=NN_POST_UPDATE(mu_prior, var_prior, sample_mean, known_var, sample_size)
  • mu_prior (float, required): Prior mean for the unknown normal mean parameter.
  • var_prior (float, required): Prior variance for the unknown mean parameter (positive).
  • sample_mean (float, required): Observed sample mean.
  • known_var (float, required): Known observation variance (positive).
  • sample_size (int, required): Number of observations used to compute sample mean (nonnegative).

Returns (list[list]): 2D array containing posterior mean/variance and precision summaries.

Example 1: Posterior mean shrinks between prior mean and sample mean

Inputs:

mu_prior var_prior sample_mean known_var sample_size
0 4 1.2 1 10

Excel formula:

=NN_POST_UPDATE(0, 4, 1.2, 1, 10)

Expected output:

Result
1.17073 0.097561
10.25 10
Example 2: Strong prior influence with small sample size

Inputs:

mu_prior var_prior sample_mean known_var sample_size
2 0.5 5 4 3

Excel formula:

=NN_POST_UPDATE(2, 0.5, 5, 4, 3)

Expected output:

Result
2.81818 0.363636
2.75 0.75
Example 3: Weak prior and large sample produce data-dominant posterior

Inputs:

mu_prior var_prior sample_mean known_var sample_size
-1 10 0.2 2 50

Excel formula:

=NN_POST_UPDATE(-1, 10, 0.2, 2, 50)

Expected output:

Result
0.195219 0.0398406
25.1 25
Example 4: Zero sample size returns prior-driven posterior

Inputs:

mu_prior var_prior sample_mean known_var sample_size
1.5 3 4 2 0

Excel formula:

=NN_POST_UPDATE(1.5, 3, 4, 2, 0)

Expected output:

Result
1.5 3
0.333333 0

Python Code

pass

def nn_post_update(mu_prior, var_prior, sample_mean, known_var, sample_size):
    """
    Update Normal posterior parameters for unknown mean with known variance.

    See: https://en.wikipedia.org/wiki/Conjugate_prior#Continuous_distributions

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

    Args:
        mu_prior (float): Prior mean for the unknown normal mean parameter.
        var_prior (float): Prior variance for the unknown mean parameter (positive).
        sample_mean (float): Observed sample mean.
        known_var (float): Known observation variance (positive).
        sample_size (int): Number of observations used to compute sample mean (nonnegative).

    Returns:
        list[list]: 2D array containing posterior mean/variance and precision summaries.
    """
    try:
        mu_prior = float(mu_prior)
        var_prior = float(var_prior)
        sample_mean = float(sample_mean)
        known_var = float(known_var)
        sample_size = int(sample_size)

        if var_prior <= 0 or known_var <= 0:
            return "Error: var_prior and known_var must be positive"
        if sample_size < 0:
            return "Error: sample_size must be nonnegative"

        prior_precision = 1.0 / var_prior
        data_precision = sample_size / known_var
        post_precision = prior_precision + data_precision
        var_post = 1.0 / post_precision
        mu_post = (prior_precision * mu_prior + data_precision * sample_mean) / post_precision

        return [[mu_post, var_post], [post_precision, data_precision]]
    except Exception as e:
        return f"Error: {str(e)}"

Online Calculator

Prior mean for the unknown normal mean parameter.
Prior variance for the unknown mean parameter (positive).
Observed sample mean.
Known observation variance (positive).
Number of observations used to compute sample mean (nonnegative).