# Interpretation of Drift

Consider the common model of stock prices given by a geometric Brownian motion (GBM), which follows the SDE $$dS(t) = \mu S(t) dt + \sigma S(t) dW(t).$$

Below is a plot of a simulation of such a GBM using $N = 1000$ points starting at $S(0) = 100$ and volatility $\sigma = 0.2$. What would you think the drift $\mu$ was set to? If you were to do an MLE estimate of $\mu$ and $\sigma$ on this time series you would get $\mu = 0.5054$ and $\sigma = 0.1966$. In fact, this simulation was run with $\mu = 0$.

It's clear to me that I don't have a good intuition for $\mu$, as I would be tempted to agree with the MLE estimates. How should I be thinking of $\mu$?

I think this has important implications for understanding calibration in practice. I've done an MLE estimate to a GBM because I believe the process I'm trying to model follows a GBM to some extent - in this case, it IS a GBM, so there is no "modelling error". My "best guess" of its parameters are $\mu = 0.5054$ and $\sigma = 0.1966$. But, in fact, $\mu = 0$. That is, my GBM model for a GBM with drift $0$ has drift $0.5054$. What.

Some requested details: Set $R_i = \log \left( \frac{S(t_i)}{S(t_{i-1})} \right)$, $i = 1,\ldots,N$. The likelihood function $L$ for the data $\{R_i\}$ is \begin{align*} L(\mu, \sigma) = \prod_{i=1}^N \phi(R_i; \left(\mu - \frac{\sigma^2}{2}\right)\Delta t, \sigma \sqrt{\Delta t}) \end{align*} where $\phi(x; m,s)$ is the pdf for a $\mathcal{N}(m,s^2)$-distributed random variable.

The MATLAB code I'm using:

% Simulates a GBM(mu,sigma) and plots the path.
% Here, GBM(mu,sigma) ~ log N((mu - sigma^2/2)*t, sigma^2*t)

% ----------------- Simulation (Generation of Data) ---------------------

%------------ set up parameters ----------------
N=1000; % number of points in path
mu=0;  % drift
sigma=0.2;  % vol
S0=100;  % initial value of process
T=1;  % final time
dt=T/N;  % time step

%------------ allocation & initialization ----------------
t=linspace(0,T,N+1);  % time axis values
S=zeros(1,N+1);  % allocate vector of process values
Z=normrnd(0,1,1,N);  % std normals

%------------ compute paths ----------------
for i=2:N+1
S(i)=S(i-1)*exp((mu - sigma^2/2)*dt + sigma*sqrt(dt)*Z(i-1));
end

% create plot of process
plot(t,S);

% ----------------- Parameter Estimation ----------------------
% create vector of log returns
R=zeros(1,N);
for i=2:N+1
R(i-1) = log(S(i)/S(i-1));
end

%------------ MLE Estimates ----------------
mle_est = mle(R,'distribution','normal');
theta(2) = sqrt(mle_est(2)^2/dt);  % sigma
theta(1) = mle_est(1)/dt + 0.5*theta(2)^2;  % mu

disp('MLE Estimates:')
disp(sprintf('mu = %f, sigma = %g',theta(1), theta(2)));

• Can you please write out specifically your likelihood function, and your simulation algorithm? Otherwise, we are not able to isolate the problem. – Gordon Jun 19 '15 at 18:58
• Since you are using T=1 mu=0 and sigma=0.2, any result between -0.4 and +0.4 could be considered acceptable (i..e within 95% confidence interval). Admittedly 0.5 is above that, but not enormously so. I am not sure there is anything shocking going on here. To estimate more accurately you need a much bigger value of T. The confidence interval varies inversely with the square root of T. – noob2 Jun 19 '15 at 19:31
• @Gordon Just added, hope it clears things up. – bcf Jun 19 '15 at 19:44
• as @emcor pointed out you need to average out many discretizations (not just one) in order to meaningfully isolate the drift. Your drift isolation via MLE should come very close to your actual drift. – Matthias Wolf Jun 21 '15 at 1:45
• I think it may be the Matlab problem. I tried it using C++, and based on my manual estimation, I obtain that $\mu= 1.48\%$ and $\sigma = 20.29\%$. If I increase the number $N$, the accuracy is further improved. – Gordon Jun 22 '15 at 19:42

You generated only one realization of the GBM. The variance of a GBM increases with time and so you must generate more realizations to get accurate estimates.

Here see a sample of Brownian simluations: https://tex.stackexchange.com/questions/59926/how-to-draw-brownian-motions-in-tikz-pgf

• There's no doubt I need more realizations to obtain better estimates. I'm just trying to get a better handle on my understanding of "drift" - maybe I should think of it as an average return, where the average is taken over many realizations? – bcf Jun 19 '15 at 21:25
• @bcf The randomness in your simulation is only the Brownian motion $W_t$. Since $W_t\sim N(0,t)$, you have a larger variance and estimation error the more time you go forward. In your example, you estimate the drift of one realization of a GBM, but that drift has a large standard error so you need more trials for an accurate estimate. If you repeat your simulation 1000 times, you should get an average drift closer to zero. – emcor Jun 19 '15 at 21:29
• Since $\log$-returns are iid random variables in this case, I do not really see why would one need to generate several paths for a better estimation rather than using one long path. – Ulysses Jun 25 '15 at 6:31

This is related to a common misconception called the Time Diversification fallacy. Returns do not average out over longer periods of time. On the contrary, as emcor points out, the variance increases.

• returns $\sim \mathcal{N}\left(\left(\mu - \frac{\sigma^2}{2}\right)\Delta t, \sigma^2 \Delta t \right)$. Time has no effect on the distribution of returns. – bcf Jun 24 '15 at 17:50
• What about that $\Delta t$ term? – jaamor Jun 24 '15 at 21:45
• The $\Delta t$ is just the time interval between stock price dates. OTOH $\log\left(\frac{S(t)}{S(0)}\right) \sim \mathcal{N}\left(\left(\mu - \frac{\sigma^2}{2}\right)t, \sigma^2 t\right)$, so the returns from the initial date do have increasing variance, so this may be what you're referring to. – bcf Jun 25 '15 at 0:13