sde.sim {sde} | R Documentation |
Generic interface to different methods of simulations of solutions to stochastic differential equations.
sde.sim(t0 = 0, T = 1, X0 = 1, N = 100, delta, drift, sigma, drift.x, sigma.x, drift.xx, sigma.xx, drift.t, method = c("euler", "milstein", "KPS", "milstein2", "cdist","ozaki","shoji","EA"), alpha = 0.5, eta = 0.5, pred.corr = T, rcdist = NULL, theta = NULL, model = c("CIR", "VAS", "OU", "BS"), k1, k2, phi, max.psi = 1000, rh, A, M=1)
t0 |
time origin. |
T |
horizon of simulation. |
X0 |
initial value of the process. |
N |
number of simulation steps. |
M |
number of trajectories. |
delta |
time-step of the simulation. |
drift |
drift coeffcient: a expression of two variables t and x . |
sigma |
diffusion coeffcient: a expression of two variables t and x . |
drift.x |
partial derivative of drift coeffcient wrt to x : a function of two variables t and x . |
sigma.x |
partial derivative of diffusio coefficient wrt to x : a function of two variables t and x . |
drift.xx |
second partial derivative of drift coefficient wrt to x : a function of two variables t and x . |
sigma.xx |
second partial derivative of diffusion coefficient wrt to x : a function of two variables t and x . |
drift.t |
partial derivative of drift coefficient wrt to t : a function of two variables t and x . |
method |
method of simulation, see details. |
alpha |
weight alpha of the predictor-corrector scheme. |
eta |
weight eta of the predictor-corrector scheme. |
pred.corr |
boolean: wheter to apply the predictor-correct adjustment. See details. |
rcdist |
a function which is a random number generator from the conditional distribution of the process. See details. |
theta |
vector of parameters for cdist . See details. |
model |
model from which to simulate. See details. |
k1 |
lower bound for psi(x) = 0.5*drift(x)^2 + 0.5*drift.x(x) . See details. |
k2 |
upper bound for psi(x) = 0.5*drift(x)^2 + 0.5*drift.x(x) . See details. |
phi |
the function psi(x) - k1 . |
max.psi |
upper value of the support of psi to search for its maximum. |
rh |
the rejection function. Seed details. |
A |
A(x) is the integral of the drift between 0 and x . |
The function returns a ts
object of length N+1
, i.e. X0
and
the new N
simulated values if M=1
.
For M>1
a mts
(multi-dimensional ts
object) is returned, which
means that M
independent trajectories are simulated.
If the initial value X0
is not of the length M
, the values are recycled
in order to have an initial vector of the correct length.
If delta
is not specified, then delta = (T-t0)/N
.
If delta
is specified, then N
values of the solution of the sde are generated and
the time horizon T
is adjusted to be N * delta
.
If any of drift.x
, drift.xx
, drift.t
,
sigma.x
and sigma.xx
are not specified,
then numerical derivation is attempted when needed.
If sigma
is not specified, it is assumed to be the constant function 1
The method
of simulation can be one among: euler
, milstein
,
milstein2
, KPS
, cdist
, EA
, ozaki
and shoji
.
No assumption on the coefficients or on cdist
is checked: the user is
responbile for using the right method for the process object of simulation.
The model
is one among: CIR
: Cox-Ingersoll-Ross, VAS
: Vasicek,
OU
Ornstein-Uhlenbeck, BS
: Black and Scholes.
No assumption on the coefficients theta
is checked: the user is responbile
for using the right ones.
If method
is cdist
then the process is simulated according to its
known conditional distribution. The random generator rcdist
must be a
function of n
: the number of random numbers, dt
: the time lag,
x
: the value of the process at time t
- dt
and the
vector of parameters theta
.
For exact algorithm method EA
: if missing k1
and k2
as well
as A
, rh
and phi
are calculated numerically by the function.
x |
returns and invisible ts object |
Stefano Maria Iacus
See Chapter 2 of the book
# Ornstein-Uhlenbeck process set.seed(123) d <- expression(-5 * x) s <- expression(3.5) sde.sim(X0=10,drift=d, sigma=s) -> X plot(X,main="Ornstein-Uhlenbeck") # Multiple trajectories of the O-U process set.seed(123) sde.sim(X0=10,drift=d, sigma=s, M=3) -> X plot(X,main="Multiple trajectories of O-U") # Cox-Ingersoll-Ross process # dXt = (6-3*Xt)*dt + 2*sqrt(Xt)*dWt set.seed(123) d <- expression( 6-3*x ) s <- expression( 2*sqrt(x) ) sde.sim(X0=10,drift=d, sigma=s) -> X plot(X,main="Cox-Ingersoll-Ross") # Cox-Ingersoll-Ross using the conditional distribution "rcCIR" set.seed(123) sde.sim(X0=10, theta=c(6, 3, 2), rcdist=rcCIR, method="cdist") -> X plot(X, main="Cox-Ingersoll-Ross") set.seed(123) sde.sim(X0=10, theta=c(6, 3, 2), model="CIR") -> X plot(X, main="Cox-Ingersoll-Ross") # Exact simulation set.seed(123) d <- expression(sin(x)) d.x <- expression(cos(x)) A <- function(x) 1-cos(x) sde.sim(method="EA", delta=1/20, X0=0, N=500, drift=d, drift.x = d.x, A=A) -> X plot(X, main="Periodic drift")