如何解决将马尔可夫链蒙特卡罗模拟存储到数据帧中并将其可视化
我正在尝试模拟股票价格的演变,所以我决定使用 MCMC 模拟(我不知道是否有可以帮助我的库)。 我打算做的是:
price.path <- function(p,t,meanr,sdr){
score <- c(0,rnorm(t))
retorno <- meanr + sdr*score
prices <- P*exp(cumsum(retorno))
}
返回价格随机过程的向量。
- 多次运行模拟(最多 100,000 次),并存储找到的每条路径。我认为最好将其存储在数据框中。
我没有找到一种方法可以将所有向量存储到数据帧中而不必命名每一列(命名每一列是不必要的,而且是浪费时间),所以我决定使用 purrr。我尝试使用 map 函数来获取不需要名称的列表。之后,我将使用 map_dfc 函数将列表转换为具有简单名称(...1、...2、...3 等)的数据框,我使用 rnorm 尝试了此操作,并且效果很好。
map(seq(1,run),price.path,p = 20,t = 10,meanr = 0.00008,sdr = 0.00015)
其中“run”是一个整数。这种方法不起作用,因为 map 函数“认为”我在第一个参数中给它的向量必须在函数中使用。我不想要这个,因为我只是将向量用作占位符,它没有任何用处或真正的意义。它基本上只是计算价格路径的运行情况,这实际上无关紧要。这会导致 map 抛出错误,因为其中一个参数未使用。
如果你们能在第 2 步中给我一些帮助,我将不胜感激。到目前为止,对我的程序的一些见解还可以,并且非常欢迎在可视化部分提供一些帮助。提前致谢。
解决方法
这将解决 map
问题:
map(seq(1,run),~price.path(
p = 20,t = 10,meanr = 0.00008,sdr = 0.00015
)
)
解决名字问题:
my_runs <- seq(1,run)
names(my_runs) <- paste0('some_great_name_for_each_run',my_runs)
map_dfc(my_runs,sdr = 0.00015
))
,
要解决 map
的第一个问题,请使用如下公式表示法:
library(tidyverse)
run <- 1000
all_sims <- map(seq(1,~ price.path(p = 20,sdr = 0.00015))
然后您可以将结果存储在长格式数据帧中。我还创建了列来计算每次迭代和每次模拟运行。
df1 <- tibble(
simvalues = unlist(all_sims),iteration = rep(seq(1,11),sim_number = unlist(map(1:run,~ rep(.x,11)))
)
然后您可以绘制结果以实现以下目标:
df1 %>%
ggplot(aes(x = iteration,y = simvalues,color = sim_number)) +
geom_path()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。