我对 R 很陌生,所以我希望你能帮助我!
我正在尝试为我的学士论文进行模拟,我想模拟股票的演变方式。
我已经在 Excel 中完成了模拟,但问题是我无法进行那么大的模拟,因为程序崩溃了!因此我在 R 中尝试。
股票演变如下(除了 $\epsilon$ 之外的所有内容都由已知的常数组成):
$$W_{t+\Delta t} = W_t exp^{r\Delta t}(1+\pi(exp((\sigma\lambda -0.5\sigma^2)\Delta t+\sigma\epsilon_{t+\Delta t}\sqrt{\Delta t}-1))$$
这里唯一的随机变量是 $\epsilon$,它由 N(0,1) 的布朗运动表示。
我在 Excel 中所做的:
我在 R 中的问题:
我使用了示例函数:
x <- sample(norm(0,1), 1000, T)
所以我有 1000 个样本,它们是正态分布的。现在我不知道如何将这些结果放入我的股票演变公式中。任何人都可以帮忙吗?
最佳答案
使用 R 进行(离散)模拟
您的问题有两个方面:概念和编码。
让我们首先处理概念,从方程的含义开始:
1.概念问题
首先要注意的是,您的进化方程在时间上是连续的,因此如上所述运行模拟意味着接受问题的离散化。这是否合适取决于您的模型以及您如何获得进化方程。
如果您确实运行了离散仿真,那么您必须做出的关键决定是您将使用的步长 $\Delta t$。您可以探索不同的步长以观察步长的影响,或者您可以继续分析并尝试推导出适当的步长。
一旦你有了步长,你的模拟就包括拉新的冲击(标准正态分布的样本),并迭代地演化方程,直到所需的时间过去。然后您可以根据需要分析最终状态 $W_t$。 (如果您保留所有的 $W_t$,您也有系统轨迹的分布,您可以对其进行分析。)
所以:
2. 模拟编码(简单示例)
R 的有用特性之一是大多数运算符在向量上按元素工作。
因此,您几乎可以按原样或多或少地输入方程式。
我对方程中的参数做了一些假设,我忽略了 $\pi$ 函数——你可以稍后添加它。
所以你最终得到的代码如下所示:
dt <- 0.5 # step-size
r <- 1 # parameters
lambda <- 1
sigma <- 1 # std deviation
w0 <- rep(1,1000) # presumed initial condition -- prices start at 1
# Show an example iteration -- incorporate into one line for production code...
x <- rnorm(1000,mean=0,sd=1) # random shock
w1 <- w0*exp(r*dt)*(1+exp((sigma*lambda-0.5*sigma^2)*dt +
sigma*x*sqrt(dt) -1)) # evolution
当你准备好让模拟运行时,然后合并最后两行,即在进化语句中包含采样语句。然后,您将获得一行代码,您可以手动运行这些代码或将其嵌入到循环中,以及您想要运行的任何其他分析。
# General simulation step
w <- w*exp(r*dt)*(1+exp((sigma*lambda-0.5*sigma^2)*dt +
sigma*rnorm(1000,mean=0,sd=1)*sqrt(dt) -1))
您还可以轻松地将更改可视化并获取汇总统计信息(5 位数汇总):
hist(w)
summary(w)
当然,您仍然需要详细了解您实际想要建模的内容以及您想要如何对其进行分析 --- 并且您已经有了 $\pi$ 函数来处理---但是这应该会让您开始使用 R 进行离散仿真。
关于r - 尝试在 R 中进行模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22612557/