[R-SIG-Finance] Mean reversion

Yihao Lu aeolus_lu aeolus_lu at hotmail.com
Tue Oct 19 03:35:21 CEST 2010


I am doing rolling ADF test on some time series to check mean reversion. When I use short period rolling, I find the residue is not stationary at all. However, when I use horizon longer than 5 years, I find very significant stationary. On the other hand, I find the half life is only around 30 days.
Is there anyone who can give me some possible explanation or guide me to some reference? thanks

Best,
Yihao







________________________________
> Date: Tue, 19 Oct 2010 09:03:55 +1100
> From: stephen at organicfoodmarkets.com.au
> To: r-sig-finance at stat.math.ethz.ch
> CC: bjorn.skogtro at gmail.com
> Subject: Re: [R-SIG-Finance] Ornstein-Uhlenbeck
>
> Hi
>
> I am still trying to sort this one out. Any comments from anyone would
> be most welcome.
>
> Stephen Choularton Ph.D., FIoD
>
>
>
> On 14/10/2010 7:29 AM, Stephen Choularton wrote:
> Thanks for this help.
>
> Trying to make sense of it so I have added some notes to the code. I
> have marked them #?#
>
> Delighted if you can tell me if I am write or wrong, add any comments,
> answers.
>
>
> #?# This appears to be the function that is doing the 'Ornstein-Uhlenbeck
> #?# process work' particularly via dcOU
> #?# I have noted in several places that I am after:
> #?# 'the half-life of the decay equals ln(2)/θ'
> #?# 'The half-life is given as log(2)/mean-reversion speed.'
> #?# and I see theta appearing at a number of points in the code.
> #?# Can you tell me why 3 thetas viz theta1, theta2, theta3 and what they do?
> #?# eg is one of these the theta I am after?
>
> # ex3.01.R
> OU.lik <- function(theta1, theta2, theta3){
> n <- length(X)
> dt <- deltat(X)
> -sum(dcOU(X[2:n], dt, X[1:(n-1)], c(theta1,theta2,theta3), log=TRUE))
> }
>
> require(stats4)
> require(sde)
>
> #?# random numer generation seed
> set.seed(123)
>
> #?# creation of a data set
> X <- sde.sim(model="OU", theta=c(3,1,2), N=1000, delta=1)
> #?# If I Look at X its like this:
> #?# Time Series:
> #?# Start = 0
> #?# End = 1000
> #?# Frequency = 1
> #?# [1] 1.00000000 etc
> #?# What sort of data object is it and how would I coerce an object with one
> #?# column from a read.csv into it?
>
>
> mle(OU.lik, start=list(theta1=1, theta2=0.5, theta3=1),
> method="L-BFGS-B", lower=c(-Inf,0,0)) -> fit
> summary(fit)
>
> #?# This gives:
>
> #?# Maximum likelihood estimation
>
> #?# Call:
> #?# mle(minuslogl = OU.lik, start = list(theta1 = 1, theta2 = 0.5,
> #?# theta3 = 1), method = "L-BFGS-B", lower = c(-Inf, 0, 0))
>
> #?# Coefficients:
> #?# Estimate Std. Error
> #?# theta1 3.355322 0.28159504
> #?# theta2 1.106107 0.09010627
> #?# theta3 2.052815 0.07624441
>
> #?# -2 log L: 3366.389
>
> #?# What's this telling me?
>
> # ex3.01.R (cont.)
> prof <- profile(fit)
> par(mfrow=c(1,3))
> plot(prof)
> par(mfrow=c(1,1))
> vcov(fit)
> confint(fit)
>
> #?# This provides me with this output using 'fit' from before:
>
> #?# > vcov(fit)
> #?# theta1 theta2 theta3
> #?# theta1 0.07929576 0.024620718 0.016634557
> #?# theta2 0.02462072 0.008119141 0.005485549
> #?# theta3 0.01663456 0.005485549 0.005813209
> #?# > confint(fit)
> #?# Profiling...
> #?# 2.5 % 97.5 %
> #?# theta1 2.8448980 3.960982
> #?# theta2 0.9433338 1.300629
> #?# theta3 1.9147136 2.216113
>
> #?# and 'fit' is:
>
> #?# Call:
> #?# mle(minuslogl = OU.lik, start = list(theta1 = 1, theta2 = 0.5,
> #?# theta3 = 1), method = "L-BFGS-B", lower = c(-Inf, 0, 0))
>
> #?# Coefficients:
> #?# theta1 theta2 theta3
> #?# 3.355322 1.106107 2.052815
>
> #?# plus some graphic output
>
> #?# Again, what's this telling me.
>
> #?# This looks like a further example?
> # ex3.01.R (cont.)
> set.seed(123)
> X <- sde.sim(model="OU", theta=c(3,1,2), N=1000, delta=1e-3)
> mle(OU.lik, start=list(theta1=1, theta2=0.5, theta3=1),
> method="L-BFGS-B", lower=c(-Inf,0,0)) -> fit2
> summary(fit2)
>
>
>
>
> Please excuse the length of this email (and my lack of understanding)
>
> Hope you can help and thanks.
>
>
>
>
> Stephen Choularton Ph.D., FIoD
>
>
> On 13/10/2010 2:41 AM, stefano iacus wrote:
>
> just for completeness: OU process is gaussian and transitiion density is known in exact form. So maximum likelihood estimation works fine and I suggest to avoid GMM.
>
> sde package contains exact transition density for this process (e.g. ?dcOU) which you can use to build the likelihood to pass to mle() function.
>
> This example taken from the "inst" directory of the package sde. For the parametrization of the model see ?dcOU
>
>
> # ex3.01.R
> OU.lik <- function(theta1, theta2, theta3){
> n <- length(X)
> dt <- deltat(X)
> -sum(dcOU(X[2:n], dt, X[1:(n-1)], c(theta1,theta2,theta3), log=TRUE))
> }
>
> require(stats4)
> require(sde)
> set.seed(123)
> X <- sde.sim(model="OU", theta=c(3,1,2), N=1000, delta=1)
> mle(OU.lik, start=list(theta1=1, theta2=0.5, theta3=1),
> method="L-BFGS-B", lower=c(-Inf,0,0)) -> fit
> summary(fit)
>
> # ex3.01.R (cont.)
> prof <- profile(fit)
> par(mfrow=c(1,3))
> plot(prof)
> par(mfrow=c(1,1))
> vcov(fit)
> confint(fit)
>
> # ex3.01.R (cont.)
> set.seed(123)
> X <- sde.sim(model="OU", theta=c(3,1,2), N=1000, delta=1e-3)
> mle(OU.lik, start=list(theta1=1, theta2=0.5, theta3=1),
> method="L-BFGS-B", lower=c(-Inf,0,0)) -> fit2
> summary(fit2)
>
>
> I hope this helps out
>
> stefano
>
> On 12 Oct 2010, at 12:33, Bjorn Skogtro wrote:
>
>
>
> Hi Stephen,
>
> You could take a look at
>
> http://sitmo.com/doc/Calibrating_the_Ornstein-Uhlenbeck_model
>
> for the linear regression method, or take a look at the package "sde" which
> contains some examples using GMM (not for the Ornstein-Uhlenbeck process,
> though, only the CIR).
>
> The half-life is given as log(2)/mean-reversion speed.
>
> Do keep an eye on the partition of the time-axis, e.g. what frequency you
> are using (daily, yearly) for interpreting the half-life.
>
> BR,
> Bjørn
>
>
>
>
>
>
>
>
> ------------------------------
>
> Message: 2
> Date: Tue, 12 Oct 2010 05:43:32 -0400
> From: Sarbo
> To: r-sig-finance at stat.math.ethz.ch
> Subject: Re: [R-SIG-Finance] Ornstein-Uhlenbeck
> Message-ID:
> Content-Type: text/plain; charset="utf-8"
>
> By half-life, do you mean the speed of mean-reversion?
>
> If so, there's a bit of algebraic tomfoolery that's required to
> discretise the equation and then fit the data to it. I don't have the
> time right now to go into all the details but it's not hard- you can
> parameterise the process using simple linear regression. If you need
> help with that I'll try and get back to you tonight about it.
>
> On Tue, 2010-10-12 at 13:47 +1100, Stephen Choularton wrote:
>
>
>
> Hi
>
> Wonder if anyone could point me how I use this method to discover the
> half life of a mean reverting process.
>
> I am looking into pair trading and the time it takes for a
> cointegrated pair to revert to the norm.
>
> --
> Stephen Choularton Ph.D., FIoD
>
> 9999 2226
> 0413 545 182
>
>
> for insurance go to www.netinsure.com.au
> for markets go to www.organicfoodmarkets.com.au
>
>
> _______________________________________________
> R-SIG-Finance at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions
>
>
> should go.
>
>
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <
> https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20101012/26e32fc7/attachment-0001.html
>
>
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: CoS2010Winner.JPG
> Type: image/jpeg
> Size: 16091 bytes
> Desc: not available
> URL: <
> https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20101012/26e32fc7/attachment-0001.jpe
>
>
> ------------------------------
>
> _______________________________________________
> R-SIG-Finance mailing list
> R-SIG-Finance at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>
>
> End of R-SIG-Finance Digest, Vol 77, Issue 8
> ********************************************
>
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-SIG-Finance at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions should go.
>
>
>
> -----------------------------------
> Stefano M. Iacus
> Department of Economics,
> Business and Statistics
> University of Milan
> Via Conservatorio, 7
> I-20123 Milan - Italy
> Ph.: +39 02 50321 461
> Fax: +39 02 50321 505
> http://www.economia.unimi.it/iacus
> ------------------------------------------------------------------------------------
> Please don't send me Word or PowerPoint attachments if not
> absolutely necessary. See:
> http://www.gnu.org/philosophy/no-word-attachments.html
>
> _______________________________________________
> R-SIG-Finance at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions should go.
>
>
>
>
>
> No virus found in this incoming message.
> Checked by AVG - www.avg.com
>
>
>
>
>
>
>
> _______________________________________________
> R-SIG-Finance at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions should go.
>
>
>
>
>
> No virus found in this incoming message.
> Checked by AVG - www.avg.com
>
>
>
>
> _______________________________________________
> R-SIG-Finance at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance --
> Subscriber-posting only. If you want to post, subscribe first. -- Also
> note that this is not the r-help list where general R questions should
> go.
 		 	   		  


More information about the R-SIG-Finance mailing list