SITMUF#

Historical context#

The statistical properties of the MUF sequence has been studied extensively, and as early as the 1980s, it was noted that there was correlation between successive material balance periods. Pike and Woods were the first to develop a concept called ITMUF (Independent Transformed MUF) and later SITMUF (Standardized Independent MUF). The SITMUF sequence is a transformed material balance sequence wherein the mean is approximately zero and the standard deviation is approximately one. There are two key advantages to performing statistical testing on such an independent sequence:

  • Alarm thresholds for SITMUF depend only on the sequence length, not the form or properties of the MUF covariance

    • This alleviates the need to determine alarm thresholds by strictly using simulation

  • In a near-real time accountancy context, the variance of SITMUF decreases as the approximate covariance of the MUF sequence approaches the true value

    • Consequently, the detection probability of SITMUF increases over time, often resulting in a higher detection probability than the MUF sequence alone

The transformation from MUF to SITMUF was quite difficult until Picard showed that the SITMUF transform can be easily expressed using the Cholesky decomposition. A series of papers in the late 1980s onward showed that applying Page’s trend test to SITMUF performs well for a wide range of potential material loss scenarios when the pattern is not known. Page’s trend test on SITMUF has been frequently used as an effective test in nuclear material accountancy.

Theory#

Recall that the muf sequence is defined as follows:

muf={muf0,muf1,...mufn}

With

mufi=ll0t=MBPi1MBPiIt,lll1t=MBPi1MBPiOt,lll2(Ci,lCi1,l)

It’s generally assumed that since the error models are normally distributed, individual muf values (i.e., mbpi) and the muf sequence (i.e., muf) will also be normally distributed. Consequently, the muf sequence can be thought of as a multivariate normal distribution such that:

mufN(μ,Σ)

The covariance matrix contains the covariance between different material balances in the sequence. For example, consider the entry σ2n2 of the covariance matrix below. This term is the variance between material balance n and 2.

(1)#Σ=(σ112σ122σ1n2σ212σ222σ2n2σn12σn22σnn2)=(Σi1σi1σi1Tσi,i)

Note

The covariance matrix Σ is symmetric (i.e., σ1,2=σ2,1).

The SITMUF statistic is muf with a mean of zero and standard deviation of one. This can be initially considered through the subtraction of the sequence mean and division by the sequence standard deviation. The independent material balance sequence can be expressed by estimating the sequence mean through the conditional expectation given all previously observed muf values:

itmufi=mufiE(mufi|mufi1,mufi2,...,muf0)

Then note that SITMUF is ITMUF divided by the standard deviation:

sitmufi=itmufi/σitmuf

The using the expression for conditional expectation of the multivariate normal distribution with the covariance expression (1) from the expression then becomes:

itmufi=(mufiσi1TΣi11mufi1)σitmuf=σi,iσi1TΣi11σi1

Picard showed a convenient way to calculating the above expression is through the use of the Cholesky decomposition. Since Picard fully derives the relationship between the expression above and the Cholesky decomposition, we refrain from showing that work here. The final expression for SITMUF becomes

Σi=CiCiTsitmufi=Ci1mufi

Where Ci is the lower triangular Cholesky factor of the covariance matrix.

Calculation of the covariance matrix#

The covariance matrix is calculated using the AuxFunctions.calcCovMat() function. Setting up and calculating the covariance matrix is the most tedious and involved part of the SITMUF transform and is handled by it’s own function. More details regarding the covariance matrix can be found here.

Discussion#

It’s important to note that the variance of SITMUF decreases with time as the estimated covariance matrix approaches the true value. The SITMUF transform is a ‘‘forward-only’’ method in that the transformed MUF values only benefit from the current covariance matrix entries. So, for example, even if you have an entire MUF sequence, the first MUF (MUF1) value can’t benefit from the fact that you have an entire covariance matrix filled with entries from the entire sequence. It only benefits from the information contained in the 1x1 submatrix of the covariance matrix (similarly MUF4 only benefits from the 4x4 submatrix of the covariance matrix) There’s no way to ‘‘back-propagate’’ the covariance matrix to previous MUF values, and this is be design. SITMUF values are usually fixed from a regulatory perspective. It’s not desirable to back correct SITMUF in most cases. If there was ever a use case to ‘‘back-propagate’’ the covariance matrix to past values, a different model would be required (perhaps something like a Kalman filter which could estimate state).

Implementation#

The SITMUF implementation in MAPIT isn’t very expensive thanks to optimized linear algebra libraries used to perform the Cholesky decomposition and other associated matrix operations. The SITMUF function only computes this quantity:

Σi=CiCiTsitmufi=Ci1mufi

Each SITMUF realization (that is, each iteration) is calculated separately as the Cholesky decomposition from Numpy isn’t vectorized (it’s pretty quick on modern machines, anyways). We start by converting the MUF values from a continuous vector in time to a discrete vector on a per balance basis:

StatsTests.py

686    for ZR in range(0,P):
687        tempID[ZR] = MUF[k,ZR*MBP]

After that, we attempt to perform the Cholesky decomposition. The decomposition will fail if the covariance matrix wasn’t constructed properly, so we try to pass a warning/error if this happens.

StatsTests.py

691    try:
692        V = np.linalg.cholesky(tempcovmatrix)

If the decomposition succeeds, then we proceed directly to the transform itself:

StatsTests.py

707    SITMUF = np.matmul(np.linalg.inv(V),tempID)    

Important

MAPIT’s implementation calculates the entire SITMUF sequence in one pass resulting in the full length sequence. In practice, a more near-real time approach is adopted wherein, at each balance period, new values are appended to the covariance matrix and the MUF sequence is extended. Then the calculation is performed on the new sequence and the last value of the resulting SITMUF sequence is the current SITMUF value that is recorded for regulatory purposes. There’s no benefit for us to perform the calculation this way as the values are the same if you iteratively calculate SITMUF (with a increasingly large covariance matrix) or do it at once as we do.

We then convert the discrete SITMUF sequence to a continuous representation before continuing through all iterations. Then the final matrix is returned.

Further reading#