im hoping joey or bchadwik can answer this, but if anyone else knows plz do answer. I estimated the mean reversion rate by regression Y(T) with Y(T-1) where Y(T) is a rate at time t (or a volatility in some cases) and coming up with the coefficient. My rates are daily, so my final mean reversion rate estimate would be the daily mean reversion rate. In order to convert this to an annual mean reversion, I multiplied by 260. the problem is i notice some of the annual mean reversion rates are negative and some go as high as 4, 5, and 7. and one is even 16(so that would be 1600%). just wondering if its possible to ever have mean reversion rates so high or negative, and if so how do i interpret this? if i multiply my daily rates by SQRT (260) instead of 260 then i dont get mean reversion rates as high (the highest i get is 1.03 so its still greater than 100%). im guessing that if my data is very volatile, that such high mean reversions could be possible? any ideas? thanks so much!

Hmm… I’ll have to think about this more, but my immediate reaction is 1) You may have trouble extrapolating daily mean reversion effects (as you are calling them) to annual effects, because there may be effects that happen at different frequencies (weekly, monthly, etc) that either moderate or exacerbate the total annual effect (plus there may be a separate annual effect). For example, in stocks, you might have one-day momentum, which if you extrapolate for the rest of the year makes the stock look like it’s shooting off to the moon, but in fact, at the end of each month, lots of people rebalance, which has a mean-reverting effect with a magnitude that probably counteracts the sum of daily effects. 2) You may need to be using a difference equation form (letting DY(t-1) = Y(t-1)-Y(t-2) and then using DY in your regressions instead of Y. 3) Yields have more persistent effects than stock returns, so maybe you need a model that uses Y(t) after all (as opposed to the differencing form), and then you need to add the residuals of an initial estimation… 4) If you think the Yield is influenced by more than just a mean reversion effect (most people would), then you definitely need to have other factors that affect your yield in the model. But it depends a lot on what the key output of your model is supposed to be. Joey’s done a lot more yield curve modeling than I have, so probably has more immediately useful reactions.

I’ll throw in my opinion maybe it helps. I am not sure what is the time series you’re working on, but it is possible that it is non-stationary. You have to first perform a unit-root test with a trending variable, and reject the hypothesis that there is a trend in the series, before you start estimating mean-reversion coefficients.

thanks a lot bchadwick! sorry i didnt mention in my original post, but i did do my regression the way you mentioned in #2 of your post. so the black-karasinski model is used which is of the form: ln (RT) - ln (RT-1) = B0 + a (Mu - ln (Rt)) * DT + Error where RT is the rate at time t and Mu is the historical mean, dt is the change in time (always 1 in my case because its daily), and a is the mean reversion rate. so for mean reversion, i regressed ln (RT) - ln (RT -1 ) vs (Mu - ln (Rt)) and estimated a. and I also tried it without the log’s and still came up with the same problems. the data im trying this one are swap rates, swaptions, and volatilities of different maturities.

thanks mo34, i will try that too.

Yes, with time series (and especially financial time series), you always should test for unit roots. If you find one, you generally difference your series and retest for a unit root. Many (if not most) economic and financial series do have a unit root until you difference them at least once.

Expanding on mo34’s comment: stationarity involves not just mean (which a unit-root test would cover) but also stable variance (and I’m sure there’s a test for that, but I don’t know what it is.) > Many (if not most) economic and financial series do have a unit root until you difference them at least once. That’s almost a certainty if the series is valued in an inflating unit (such as the price of an asset quoted in a currency, e.g. $). However over the long term this shouldn’t be the case for interest rates.

thanks guys. so i will run the unit root test, and if it fails, i will keep differencing my data until it is stationary. then, i will do the same analysis on the stationary data. and then once i come up with my estimates of mean reversion, this will be the mean reversion for RT - RT-1. then I will simplify to use this mean reversion number to come up with the mean reversion for RT. then i should get better mean reversion rates for RT than the ones i currently have. does this sound right?

Here’s how I would do it: 1- Check for serial autocorrelation in the time series to determine the number of lags you will need to include in your unit-root test to correct for this correlation. 2 - Perform a unit root test with a trend term and the number of lags you found in step 1. You could use an F-test or a t-test ( I personally use an F-test) and make sure that you can reject the hypothesis that there is a trend term and/or unit root. 3 - Perform a unit root test with a drift term ( a constant) and again use F-test to make sure you have no drift. 4 - Once you have checked for stationarity, next you can model your process as a mean-reverting process and find the mean reversion coefficient. 5 - You mentioned stuff earlier about 260 or something like that, I just want to warn you against multiplying by any number that you don’t know where it came from just because it sounds “cool”. The Sqrt(250) use in Var and volatility forecasting is based on assumptions about the return distribution. Other assumptions about the distribution lead to different factors to annualize. I would recommend you look this up on Google.

Don’t know how I missed this. 1) What’s an annual mean reversion rate? The mean reversion rate isn’t scalable like a volatility or something. 2) “so for mean reversion, i regressed ln (RT) - ln (RT -1 ) vs (Mu - ln (Rt)) and estimated a” I’m deeply suspicious of this. I’m also sure that Brigo and Mercurio have the proper calibration, but my copy is at home and I’m at the office (you kind of need that book if you are going to a bunch of this stuff).

thanks guys! i just thought id multiply by 260 because there are about 260 weekdays in a year and so multiplying my mean reversion estimate by 260 would be the same as doing the regression with (Mu - ln (Rt)) * DT as my independent variable where DT is the change in time (1/260). i would like to work with annual data and find my mean reversion estimate but i only have data for 5 years so i wouldnt be able to get much results out of regression with only 5 rows of data. but multiplying by 260 doesnt sound right to you guys? any other suggestions? joey could you provide me with the title of the brigo and mercurio book you were mentioning. i searched them and i see many books by these two.

^ That’s it…

sorry guys i just have one follow up. so for one of my variables, the test for stationarity failed. after differencing the data once, the test passed. so i ran an AR(1) model to come up with my parameter estimates. but now these parameter estimates are for the differenced variable, and im confused how to get the undifferenced parameter estimates from these. so my original model was of the form: RT+1 = A * RT + B now because i did the analysis on the differenced variable, I know what A and B are in the following: RT+1 - RT = A * (RT - RT-1) + B but i dont know how to go from the A and B estimates here to my estimates in my original equation because now I have both RT and RT-1 on the other side of the equation. any suggestions how ic an do this? thanks so much.

So what this means is that the change in interest rates follows an AR(1) process. To get back to predicting actual interest rates, you just start off your model at some point in time with the observed rates. R(t+1) = R(t) + DR(t) Where DR(t) is defined as DR(t) = R(t+1) - R(t), and you have some R(0) where you have an observed value of interest rates that you use to start things off. Every time you difference, it means that there is an extra starting value that you need to provide to put things back in terms of your original time series variable. — Now, if I can rewrite your equation in DR(t) form it’s a little clearer… your estimation (from your post) > RT+1 - RT = A * (RT - RT-1) + B Can be written as DR(t) = A*DR(t-1) + B This is what you estimated with your regression. ----- And substituting back into the first equation I wrote in this reply: R(t+1) = R(t) + DR(t) = R(t) + A*DR(t-1) + B + err Or… Next period’s interest rate = Last period’s interest rate + some fraction of the last interest rate change (A) + some constant increase (B) (probably not statistically significant in your case) + some random error term

thanks a lot bchadwick! i notice that the final equation contains both R(T) and R(T-1). i just want to estimate the mean reversion speed using the black-karasinski model. so this is the BK model equation (without the logs): DR(T+1) = a (Mu - RT) * DT + Error where a is the mean reversion speed and Mu is the mean reversion level and then i was going to simplify the equation to get: R(T+1) = (1-a) * RT + a * Mu + Error and then i planned to model this simplified equation as an AR(1) process to come up with my estimate of a. but if i was to have another R(T-1) on the right side of this equation as well as the RT, then i wouldn’t be able to come up with these parameters? it seems like in the case where the data is not stationary but the first difference is, i still can’t predict the mean reversion speed but instead i should just conclude since the data is not stationary, mean reversion doesnt exist (regardless of if the difference is stationary or not). any ideas? does thsi sound right to you? thanks.

i was just thinking that the units root test would probably pass if i used annual or monthly data instead of daily data? for example, one of my rates failed the unit root test. those were daily rates. although i cant conduct the units root test for the monthly data right now, but my parameter estimate was .98. in all my daily data tests, when the estimate of the parameter was close to .98, the stationarity test passed while it failed when the parameters were a lot closer to 1. could it be possible that the unit roots test for stationarity would fail on daily data but pass on monthly averaged data of the same variable? thanks.

In a rush, but most econometric time series data needs to be differenced at least once. That means (always, as far as I can tell) that the unit root test will fail on the raw data series (meaning you’ll have a unit root). So you should expect that. It gets more tricky if the differenced series still has a unit root, since it basically means that it’s the rate of the rate of change that you are trying to model, and that’s just more abstract to interpret. So taking longer time periods shouldn’t change whether there’s a unit root or not. It probably will affect your parameter estimates, though.

thanks bchadwick!

So I tried to let this go, but I just can’t. The following is pretty suspect. “so the black-karasinski model is used which is of the form: ln (RT) - ln (RT-1) = B0 + a (Mu - ln (Rt)) * DT + Error where RT is the rate at time t and Mu is the historical mean, dt is the change in time (always 1 in my case because its daily), and a is the mean reversion rate. so for mean reversion, i regressed ln (RT) - ln (RT -1 ) vs (Mu - ln (Rt)) and estimated a. and I also tried it without the log’s and still came up with the same problems. the data im trying this one are swap rates, swaptions, and volatilities of different maturities.” So Black-Karasinski is a short rate model. It means that r(t) is the instantaneous short term interest rate which you could reasonably say is the overnight rate. If you give me all the parameters of the model (which include the vol of that error term which is not explicitly shown above) I can price out swaps, swaptions, etc. However, I think that even zero coupon bonds don’t have analytical expressions under Black-Karasinski (keep meaning to check my book on that, but I’m 90% sure). I’m probably 99.8% sure that swaptions don’t. You can surely use swaption, etc prices to calibrate a B-K model but you should probably think hard about why you are doing that. First, it’s a pain in the butt. Second, it’s not a simple regression problem but some numerical tree problem. Third, it’s a pain in the butt. Fourth, what are you going to do with it? Swaption prices are real and much richer than anything you are going to get from a simple short-rate model. Your calibrated B-K model is never going to fit them very well (actually, it probably depends on how you constrain your parameters since B-K allows all those parameters to be time varying B-K could fit swaptions exactly with a different parameter set for each swaption I think). Maybe some details on the project you are trying to do would be helpful.