Is there a way to simulate data points that have been drawn from a Geometric Brownian Motion (Weiner Process)?
I am looking at this function:SAS(R) 9.2 Language Reference: Dictionary, Fourth Edition
But I don't see an option for a Weiner process.
I know the Black Scholes internally simulates a Weiner process but is it possible to see what a set of 10,000 numbers drawn from a Weiner process looks like?
I'll show you the standard Weiner process (mean=0, std dev=1) and you can generalize it if necessary.
A reference is https://me.ucsb.edu/~moehlis/APC591/tutorials/tutorial7/node2.html
The key observation is that the STEP SIZES of the Weiner process are Gaussian distribution, so you can use the RAND function in the DATA step to simulate the step sizes. In SAS/IML, you can use the RANDGEN or RANDFUN functions to generate the normally distributed step sizes.
proc iml;
/* simulate N time steps from Weiner process on interval [0,Tf] */
N = 1000;
Tf = 5;
call randseed(12345);
/* algorithm: step sizes are normally distributed */
N = N-1; /* X(0)=0, so N-1 random values */
dt = Tf/N;
sd = sqrt(dt);
steps = randfun(N, "Normal", 0, sd); /* random step sizes */
x = 0 // cusum(steps); /* X(0)=0 */
I suggest you post this under the "SAS Statistical Procedures" and "SAS/IML Software and Matrix Computations" forums, I think you'll be more likely to catch the eye of someone familiar with this topic.
Tom
Thanks Tom! eagles_dare13, I moved this thread to the SAS/IML community.
Anna
Join us for SAS Community Trivia
SAS Bowl XXIX, The SAS Hackathon
Wednesday, March 8, 2023, at 10 AM ET | #SASBowl
I'll show you the standard Weiner process (mean=0, std dev=1) and you can generalize it if necessary.
A reference is https://me.ucsb.edu/~moehlis/APC591/tutorials/tutorial7/node2.html
The key observation is that the STEP SIZES of the Weiner process are Gaussian distribution, so you can use the RAND function in the DATA step to simulate the step sizes. In SAS/IML, you can use the RANDGEN or RANDFUN functions to generate the normally distributed step sizes.
proc iml;
/* simulate N time steps from Weiner process on interval [0,Tf] */
N = 1000;
Tf = 5;
call randseed(12345);
/* algorithm: step sizes are normally distributed */
N = N-1; /* X(0)=0, so N-1 random values */
dt = Tf/N;
sd = sqrt(dt);
steps = randfun(N, "Normal", 0, sd); /* random step sizes */
x = 0 // cusum(steps); /* X(0)=0 */
Thank you. I copied your code but am getting:
ERROR: Invocation of unresolved module RANDFUN
Then replace that line with
steps = j(N,1);
call randgen(steps, "Normal", 0, sd); /* random step sizes */
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.
Find more tutorials on the SAS Users YouTube channel.