Main Content


Variance ratio test for random walk


h = vratiotest(y)
h = vratiotest(y,'ParameterName',ParameterValue,...)
[h,pValue] = vratiotest(...)
[h,pValue,stat] = vratiotest(...)
[h,pValue,stat,cValue] = vratiotest(...)
[h,pValue,stat,cValue,ratio] = vratiotest(...)


h = vratiotest(y) assesses the null hypothesis of a random walk in a univariate time series y.

h = vratiotest(y,'ParameterName',ParameterValue,...) accepts optional inputs as one or more comma-separated parameter-value pairs. 'ParameterName' is the name of the parameter inside single quotation marks. ParameterValue is the value corresponding to 'ParameterName'. Specify parameter-value pairs in any order; names are case-insensitive. Perform multiple tests by passing a vector value for any parameter. Multiple tests yield vector results.

[h,pValue] = vratiotest(...) returns p-values of the test statistics.

[h,pValue,stat] = vratiotest(...) returns the test statistics.

[h,pValue,stat,cValue] = vratiotest(...) returns critical values for the tests.

[h,pValue,stat,cValue,ratio] = vratiotest(...) returns a vector of ratios.

Input Arguments


Vector of time-series data. The last element is the most recent observation. The test ignores NaN values, which indicate missing entries.

The input series y is in levels. To convert a return series r to levels, define y(1) and let y = cumsum([y(1);r]).

Name-Value Arguments


Scalar or vector of nominal significance levels for the tests. Set values between 0 and 1.

The test is two-tailed, so vratiotest rejects the random-walk null when the test statistic is outside of the critical interval [-cValue,cValue]. Each tail outside of the critical interval has probability alpha/2.

Default: 0.05


Scalar or vector of Boolean values indicating whether to assume independent identically distributed (IID) innovations.

To strengthen the null model and assume that the e(t) are independent and identically distributed (IID), set IID to true.

The IID assumption is often unreasonable for long-term macroeconomic or financial price series. Rejection of the random-walk null due to heteroscedasticity is not interesting for these cases.

Default: false


Scalar or vector of integers greater than one and less than half the number of observations in y, indicating the period q used to create overlapping return horizons for the variance ratio.

When the period q has the default value of 2, the first-order autocorrelation of the returns is asymptotically equal to ratio1.

The test finds the largest integer n such that n*q ≤ T1, where T is the sample size. It then discards the final (T1)–n*q observations. To include these final observations, discard the initial (T1)–n*q observations in y before running the test.

Default: 2

Output Arguments


Vector of Boolean decisions for the tests, with length equal to the number of tests. Values of h equal to 1 indicate rejection of the random-walk null in favor of the alternative. Values of h equal to 0 indicate a failure to reject the random-walk null.


Vector of p-values of the test statistics, with length equal to the number of tests. Values are standard normal probabilities.


Vector of test statistics, with length equal to the number of tests. Statistics are asymptotically standard normal.


Vector of critical values for the tests, with length equal to the number of tests. Values are for standard normal probabilities.


Vector of variance ratios, with length equal to the number of tests. Each ratio is the ratio of:

  • The variance of the q-fold overlapping return horizon

  • q times the variance of the return series

For a random walk, these ratios are asymptotically equal to one. For a mean-reverting series, the ratios are less than one. For a mean-averting series, the ratios are greater than one.


collapse all

Test whether a US equity index is a random walk using various step sizes. Perform the test with and without the assumption that the innovations are independent and identically distributed.

Load the global large-cap equity indices data set. Focus on the daily S & P 500 index (SP).

load Data_GlobalIdx1
logSP = log(DataTable.SP);

axis tight

Figure contains an axes object. The axes object contains an object of type line.

The plot indicates possible conditional heteroscedasticity.

Test whether the series is a random walk using various periods and whether the innovations are independent and identically distributed.

q = [2 4 8 2 4 8];
flag = logical([1 1 1 0 0 0]);
[h,pValue,stat,cValue,ratio] = ...
h = 1x6 logical array

   0   0   1   0   0   0

pValue = 1×6

    0.5670    0.3307    0.0309    0.7004    0.5079    0.1303

stat = 1×6

    0.5724   -0.9727   -2.1579    0.3847   -0.6621   -1.5128

cValue = 1×6

    1.9600    1.9600    1.9600    1.9600    1.9600    1.9600

ratio = 1×6

    1.0111    0.9647    0.8763    1.0111    0.9647    0.8763

rho1 = ratio(1)-1 % First-order autocorrelation of returns
rho1 = 0.0111

h indicates that the test fails to reject that the series is a random walk at 5% level, except in the case where period = 8 and IID = true. This rejection is likely due to the test not accounting for the heteroscedasticity.

More About

collapse all

Variance Ratio Test

The variance ratio test assesses the null hypothesis that a univariate time series y is a random walk. The null model is

y(t) = c + y(t–1) + e(t),

where c is a drift constant and e(t) are uncorrelated innovations with zero mean.

  • When IID is false, the alternative is that the e(t) are correlated.

  • When IID is true, the alternative is that the e(t) are either dependent or not identically distributed (for example, heteroscedastic).


The vratiotest test statistics are based on a ratio of variance estimates of returns r(t) = y(t)–y(t–1) and period q return horizons r(t) + ... + r(tq+1). Overlapping horizons increase the efficiency of the estimator and add power to the test. Under either null, uncorrelated innovations e(t) imply that the period q variance is asymptotically equal to q times the period 1 variance. The variance of the ratio, however, depends on the degree of heteroscedasticity, and, therefore, on the null.

Rejection of the null due to dependence of the innovations does not imply that the e(t) are correlated. Dependence allows that nonlinear functions of the e(t) are correlated, even when the e(t) are not. For example, it can hold that Cov[e(t),e(tk)] = 0 for all k ≠ 0, while Cov[e(t)2,e(tk)2] ≠ 0 for some k ≠ 0.

Cecchetti and Lam [2] show that sequential testing using multiple values of q results in small-sample size distortions beyond those that result from the asymptotic approximation of critical values.


[1] Campbell, J. Y., A. W. Lo, and A. C. MacKinlay. Chapter 12. “The Econometrics of Financial Markets.” Nonlinearities in Financial Data. Princeton, NJ: Princeton University Press, 1997.

[2] Cecchetti, S. G., and P. S. Lam. “Variance-Ratio Tests: Small-Sample Properties with an Application to International Output Data.” Journal of Business and Economic Statistics. Vol. 12, 1994, pp. 177–186.

[3] Cochrane, J. “How Big is the Random Walk in GNP?” Journal of Political Economy. Vol. 96, 1988, pp. 893–920.

[4] Faust, J. “When Are Variance Ratio Tests for Serial Dependence Optimal?” Econometrica. Vol. 60, 1992, pp. 1215–1226.

[5] Lo, A. W., and A. C. MacKinlay. “Stock Market Prices Do Not Follow Random Walks: Evidence from a Simple Specification Test.” Review of Financial Studies. Vol. 1, 1988, pp. 41–66.

[6] Lo, A. W., and A. C. MacKinlay. “The Size and Power of the Variance Ratio Test.” Journal of Econometrics. Vol. 40, 1989, pp. 203–238.

[7] Lo, A. W., and A. C. MacKinlay. A Non-Random Walk Down Wall St. Princeton, NJ: Princeton University Press, 2001.

Introduced in R2009b