Adam Drake
  • Latest
  • About
  • Case Studies
  • Contact
  • Posts
  • Press
  • 2011-05-31 00:00:00 +0000 UTC
    Adam Drake

    Adam Drake

    May 31, 2011

    Computing Ornstein-Uhlenbeck Process Trajectories in R

    Compared to the Ruby version, computing this in R is much easier due to the built-in stochastic differential equation simulator. Assuming you have R installed, make sure you also install the sde package. Here is all the initial work that cleans up everything from your workspace, sets the initial value of the process, the end-point, how granular you want the simulation to be, and how many trajectories you want.

    rm(list = ls(all = TRUE))
    x0 = 50
    end_point = 200
    discretization_factor = 100
    total_steps = end_point * discretization_factor
    #Use the same seed for multiple trajectories if (number_trajectories > 1)
    number_trajectories = 1
    set.seed(rnorm(1))
    

    Here we have a 0 drift parameter and a standard deviation of 1, followed by the simulation and plot of the process.

    d = expression(0 * x)
    s = expression(1)
    X = sde.sim(M=number_trajectories, X0=x0, T=end_point, N=total_steps, drift=d, sigma=s) plot(X,main="Price Action", xlab="Trading Period", ylab="Price")
    

    Here is an image of one of the trajectories created by the code.

    single trajectory

    Making the small change in the code and switching number_trajectories = 1 to number_trajectories = 3 causes the simulator to produce a very convenient plot with all three trajectories. You could do some averaging or filtering with them if you wanted to. Below is an image of three trajectories.

    three trajectories

    As you can see, doing such simulations with R is very quick and easy. In fact, I think I may displace Ruby as my default language for such tasks.


Adam Drake leads technical business transformations in global and multi-cultural environments. He has a passion for helping companies become more productive by improving internal leadership capabilities, and accelerating product development through technology and data architecture guidance. Adam has served as a White House Presidential Innovation Fellow and is an IEEE Senior Member.