Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.
Transcript of Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.
![Page 1: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/1.jpg)
Simulation
![Page 2: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/2.jpg)
Downloads
Today’s work is in: matlab_lec03.m
Datasets we need today: data_msft.m
![Page 3: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/3.jpg)
Histograms: hist()
>>X=[2*ones(3,1); 3*ones(5,1); 7*ones(4,1)];>>subplot(2,1,1); >>hist(X); %draws histogram of X>>subplot(2,1,2); >>hist(X,[0:.25:10]); %draws histogram of X %on the interval [0 10] with bins of size .25 Default is a histogram with 20 bins,
from min(X) to max(X) hist(X,n) will keep default min and max
but make n bins
![Page 4: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/4.jpg)
![Page 5: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/5.jpg)
Uniform rv: rand()
A uniform random variable (rv) has equal probability of occurring at any point on its support
>>T=1000;>>X=rand(T,1); %creates a matrix of size %(Tx1) of uniform rv’s on (0,1)>>a=5; b=50;>>Y=a+b*rand(T,1); %creates a matrix of %size (Tx1) of unifrom rv’s on (a,a+b)
![Page 6: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/6.jpg)
Using hist() and rand()
>>subplot(3,1,1);>>hist(X,[-.25:.025:1.25]); %draws %histogram of X>>subplot(3,1,2); >>hist(Y,[.9*a:(b/30):1.1*(a+b)]); %draw>>T=100000; Z=a+b*rand(T,1); >>subplot(3,1,3);>>hist(Z,[.9*a:(b/30):1.1*(a+b)]); subplot;
![Page 7: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/7.jpg)
![Page 8: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/8.jpg)
Law of Large Numbers (LLN)
Note that E[X]=.5>>X=rand(5,1); disp(mean(X));>>X=rand(10,1); disp(mean(X));>>clear Y; for i=1:200; Y(i)=mean(rand(i,1)); end;>>plot(Y); How quickly does Y tend to .5? CLT will tell us
![Page 9: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/9.jpg)
![Page 10: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/10.jpg)
Discrete rv’s
Oftentimes you will need to simulate rv’s with a small number of possible outcomes
You can use the uniform rv to create discrete rv’s (ie coinflips)
%x=1 with probability p and 0 with (1-p)>>p=.25; if rand(1,1)<p; x=1; else; x=0; end;%x=3 with p=.25, 2 with p=.5, 1 with p=.25>>y=rand(20,1); >>x=3.*(y>.75)+2*(y<=.75 & y>.25)+1*(y<=.25);>>hist(x,[0:.25:4]);
![Page 11: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/11.jpg)
![Page 12: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/12.jpg)
Central Limit Theorem (CLT)
Tells us that means of many rv’s converge to a normal rv
This is why normals are so common in nature!
Let x=uniform rv Let y=0 if x<.3 and 1 if x>=.3 Let z be the mean of j binomial rv’s Note that z itself is a rv, in particular,
when j=1, y=z
![Page 13: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/13.jpg)
CLT (cont’d)
Think of y as a biased coin flip Think of z as the mean of j coinflips>>A=[1 5 10 25 50 100]; for k=1:6; j=A(k); for i=1:5000; x=rand(j,1); y=(x<.3)*0+(x>=.3)*1; z(i,k)=mean(y); end; end;
![Page 14: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/14.jpg)
CLT (con’d)
>>for k=1:6; subplot(3,2,k); hist(z(:,k),50); end; subplot; We will now have 6 plots. Each will have a
histogram of rv z, which is a mean of j binomial rv’s y.
What do distributions with high j look like? Ever wonder why distribution of human
heights looks like a normal rv?
![Page 15: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/15.jpg)
![Page 16: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/16.jpg)
Normal rv:randn()
Works same as uniform, but produces a normal of mean 0, standard deviation 1
>>X=randn(10000,1);>>subplot(2,1,1); hist(X,50); To produce normal rv’s with different
mean or variance, just skew and shift>>m=1.1; s=.16; X=m+s*randn(10000,1);>>subplot(2,1,2); hist(X,50);
![Page 17: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/17.jpg)
![Page 18: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/18.jpg)
A simple security process
R(t)=mu+sigma*x(t) (x is normal, R is normal)
10% annual return and 30% annual standard deviation are quite typical for equity
>>T=10000; mu=1.1; sigma=.3; >>x=randn(T,1);>>R=mu+sigma*x;>>subplot; hist(R,50); Do you notice anything “strange” about
this process or the histogram?
![Page 19: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/19.jpg)
![Page 20: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/20.jpg)
A better process
R=exp(mu+sigma*X(t)) (R is log-normal)
exp(x) is approximately 1+x, so if want mean of process approximately 1.1, you need x to be approximately .1
Can this return be negative?
![Page 21: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/21.jpg)
Calibration Issue: Jensen’s Inequality
Jensen’s Inequality: E[f(X)] ≠ f(E[X]) Stein’s Lemma:
E[exp(X)]=exp(m+.5*s2) where X is normal rv with mean m, standard deviation s
If you want R to have mean exp(m), than make sure rv X inside of exponent has mean m-.5*s2
With non-normal processes (ie jumps), things will be more complicated
![Page 22: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/22.jpg)
Calibration Issue: Interval length
The “right” way to simulate is:
X(t) is N(0,1) dt=1/T where T is the number simulations per period m is the mean per period, σ is the standard deviation
per period For example, if one period is one year and we are
simulating monthly, than T=12, m is the annual mean (ie 10%), σ is the annual standard dev (ie 20%)
When the length of the period (over which we measure parameters) is equal to the simulation period, than T=1 and this reduces to what we saw earlier
dttXdtmtR **)(*exp)(
![Page 23: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/23.jpg)
Calibrate Microsoft
Get daily microsoft data from CRSP or course website
>>data_msft;>>disp(mean(msft(:,4)));>>disp(std(msft(:,4)));%Microsoft returns have a daily mean of%.097% and standard deviation of 2.21%>>subplot(2,1,1); hist(msft(:,4),[-.2:.01:.2]);>>axis([-.2 .2 0 800]); xlabel('Actual');
![Page 24: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/24.jpg)
Simulate Microsoft
>>T=3022; >>mu=.00097-.5*.0221^2; sigma=.0221;>>x=randn(T,1);>>r=exp(mu+sigma*x)-1; >>subplot(2,1,2);>>hist(r,[-.2:.01:.2]); axis([-.2 .2 0 800]);>>disp(mean(r)); disp(std(r));>>disp([skewness(r) skewness(msft(:,4))]);>>disp([kurtosis(r) kurtosis(msft(:,4))]);
![Page 25: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/25.jpg)
![Page 26: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/26.jpg)
Compare simulated to actual
Mean, standard deviation, skewness match well
Kurtosis (extreme events) does not match well
Actual has much more mass in the tails (fat tails)
This is extremely important for option pricing!
CLT fails when tails are “too” fat
![Page 27: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/27.jpg)
Next Week: Modelling Volatility
How to make tales fatter? Add jumps to log normal distribution to
make tails fatter Jumps also help with modeling default Make volatility predictable: Stochastic volatility, governed by state
variable ARCH process (2003 Nobel prize, Rob
Engle)
![Page 28: Simulation. Downloads Today’s work is in: matlab_lec03.m Datasets we need today: data_msft.m.](https://reader035.fdocuments.in/reader035/viewer/2022062517/56649f005503460f94c1619b/html5/thumbnails/28.jpg)
Optional Homework (1)
Create a function that will simulate microsoft stock using a log-normal process
The function should take in arguments mu (mean), sigma (standard deviation), and T (number of days)
Its output should be a vector of daily returns