A Simple Test for Structural Breaks in Variance


Though many standard econometric models assume that variance is constant, structural breaks in variance are well-documented, particularly in economic and finance data. If these changes are not accurately accounted for, they can hinder forecast inference measures, such as forecast variances and intervals.

In this blog, we consider a tool that can be used to help locate structural breaks in variance -- the iterative cumulative sum of squares algorithm (ICSS) (Inclan and Tiao, 1994).

Centered Cumulative Sum of Squares

The first step of the algorithm is to find the cumulative sum of squares test statistic. This statistic can be found in four easy steps:

  1. Using the model error terms find the cumulative sum of squares (CSS) for all potential breakpoints observations 1 through k : $$C_1 = \sum_{t=1}^1 a_t^2 \\ C_2 = \sum_{t=1}^2 a_t^2 \\ \vdots \\ C_k = \sum_{t=1}^k a_t^2 \\ C_T = \sum_{t=1}^T a_t^2$$   $$ a = \begin{bmatrix} 0.1 \\ 0.3 \\ 0.5 \\ 0.7 \\ 0.2 \end{bmatrix} \rightarrow C_{k=1,2,..T} = \begin{bmatrix} 0.01 \\ 0.1 \\ 0.35 \\ 0.84 \\ 0.88 \end{bmatrix} $$  
  2. Normalize and center the cumulative sum of squares, using the partial series CSS , $C_k$, and the full series CSS, $C_T$ : $$D_k = \frac{C_k}{C_T} - \frac{k}{T}\\$$   $$D_{k=1,2,..T} = \begin{bmatrix} 0.01/0.88 \\ 0.1/0.88 \\ 0.35/0.88 \\ 0.84/0.88 \\ 0.88/0.88 \end{bmatrix} - \begin{bmatrix} 1/5 \\ 2/5 \\ 3/5 \\ 4/5 \\ 5/5 \end{bmatrix} = \begin{bmatrix} -0.189\\ -0.286 \\ -0.202\\ 0.155 \\ 0.000 \end{bmatrix} $$  
  3. Find the maximum centered cumulative sum of squares. The potential breakpoint, k*, is the location in the series of the maximum absolute value of the centered cumulative sum of squares, $D_{k^{*}}$ : $$D_{k^{*}} = \max\limits_{k} | D_k |\\$$   $$ \begin{bmatrix} abs(-0.189)\\ abs(-0.286) \\ abs(-0.202)\\ abs(0.155)\\ abs(0.000) \end{bmatrix} \rightarrow D_{k^{*}} = 0.286, k^{*} = 2 $$  
  4. Finally, if $IT = \sqrt{T/2}D_{k^{*}}$ exceeds the critical value of the limiting distribution, then $k^*$ represents a statistically significant breakpoint.

Iterative Cumulative Sum of Squares Algorithm

Finding $k^*$ would be sufficient if we were certain that there was only one break point in the variance. However, how can we definitively know that this is the case?

Because we cannot eliminate the possibility that there are multiple breaks in the variance, we must iteratively search for all potential additional breakpoints.

The ICSS algorithm searches for breakpoints in each of the sections created by newly found breakpoints. Once new breakpoints are no longer found, the search stops.

Considering our hypothetical example, our first potential break was located at $k^{*} = 2$, therefore, our iterative search for breakpoints would begin again in the section of data bounded by $t = 3$ and $t = 5$.

Using the ICSS algorithm in GAUSS

The ICSS test is available in the GAUSS carrionlib package. This package is a free package that should be installed using the GAUSS Package Manager.

The icss Procedure

The carrionlib package includes the icss procedure for implementing the ICSS test. Because the icss function also provides options to perform the modifications discussed in the paper, the icss function requires the following three inputs:

Vector, the stochastic series to be tested.
Scalar, an indicator of which test to run, should always be set to zero to run the standard ICSS test.
Vector, 3x1, sets the bandwidth for the modification models. This is irrelevant to the standard ICSS and can be set to any 3x1 vector.

{ cp, nbre } = icss(e, test, cri);

Empirical Example

Let's use quick empirical example to get a better understanding of how to use the icss procedure.

ICSS structural break test.

Today, we'll use the S&P 500 data provided by Sanso, Arago, and Carrion-i-Silvestre, 2004 to demonstrate how to use the icss procedure.

The first step is to load the library and load our data using the loadd procedure:

// Load library
library carrionlib;

// Load S&P data
x = loadd("sp.dat");

Next, to prepare our data for testing, we'll demean our data:

// Demean data
e = x - meanc(x);

Finally we are ready to run our test:

// Set our test to run ICSS
test = 0;

// Set cri vector to be any
// 3x1 vector
cri = 0|0|0;

// Run
{ cp, nbre } = icss(e, test, cri);

The function returns two outputs:

  1. A vector containing the change points (cp).
  2. A scalar containing the number of break points (nbre).


Identifying structural breaks in the variance of data is an important step in modeling time series data. In this tutorial we've covered:

  • What the ICSS algorithm is.
  • How to use the ICSS algorithm in GAUSS.

Code and data from this blog can be found here.


Inclan, C., & Tiao, G. C. (1994). Use of cumulative sums of squares for retrospective detection of changes of variance. Journal of the American Statistical Association, 89(427), 913-923.

Sansó, A., Aragó, V., & Carrion, J. L. (2004). Testing for changes in the unconditional variance of financial time series. Revista de Economía financiera, 4(1), 32-53.

Leave a Reply

Have a Specific Question?

Get a real answer from a real person

Need Support?

Get help from our friendly experts.

Try GAUSS for 14 days for FREE

See what GAUSS can do for your data

© Aptech Systems, Inc. All rights reserved.

Privacy Policy