Why One GBM Path Gives an Uncertain Drift Estimate
Summary
The document examines why a single simulated geometric Brownian motion path with zero drift can produce a maximum likelihood drift estimate far from zero. It defines log returns and gives the likelihood setup used to estimate drift and volatility, then reports one path's estimates alongside the parameters used to generate it. The example illustrates that a fitted parameter from one realization need not recover the value used in simulation.
The answers emphasize that uncertainty in the path grows over time and recommend considering multiple realizations when assessing parameter accuracy. They also warn against assuming that returns average out simply by observing a longer horizon. The discussion is conceptual rather than a full treatment of estimator bias, confidence intervals, or optimal sample design; its evidence is a single simulated path and brief explanations, so it does not quantify how many paths or observations are needed for reliable calibration.
Key ideas
- A single GBM realization can yield a drift estimate that differs substantially from the generating drift.
- The likelihood is formed from normally distributed log returns with a mean adjusted for volatility.
- The example contrasts a zero generating drift with a positive estimate from one path.
- Parameter uncertainty remains important because price-path variance increases over time.
- More simulated realizations can help assess estimation accuracy, though the document gives no sample-size guidance.
Tags
Full text
# Interpretation of Drift
# 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
S(1)=S0; % assign initial value to process' first value
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)));
```
## Answer by emcor (score 1)
https://quant.stackexchange.com/a/18452
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
## Answer by jaamor (score 1)
https://quant.stackexchange.com/a/18460
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.
You might find this article named Risk and Time by John Norstad interesting.Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.