每当我在S-Plus中运行大规模蒙特卡洛模拟时,我总是在等待它完成时长出胡须。
在R中运行蒙特卡洛模拟最好的技巧是什么?有没有以分布式方式运行进程的好例子?
发布于 2009-09-10 06:06:16
使用多核/机器的并行复制应该很简单,如果你只是使用并行独立复制,但要注意随机数生成器的常见缺陷(例如,如果使用当前时间作为种子,产生多个进程,每个进程一个RNG可能会产生相关的随机数,从而导致无效的结果-例如,this paper)
中
发布于 2009-09-10 18:58:26
重新分配你的向量!
> nsims <- 10000
> n <- 100
>
> system.time({
res <- NULL
for (i in 1:nsims) {
res <- c(res,mean(rnorm(n)))
}
})
user system elapsed
0.761 0.015 0.783
>
> system.time({
res <- rep(NA, nsims)
for (i in 1:nsims) {
res[i] <- mean(rnorm(n))
}
})
user system elapsed
0.485 0.001 0.488
>
发布于 2009-09-10 07:13:53
拉丁超立方体采样很容易应用,并且对结果有很大影响。基本上,您可以从均匀分布中获取拉丁超立方体样本(例如,使用lhs包中的randomLHS() ),然后使用qnorm(统一样本)将其转换为您想要的分布。
https://stackoverflow.com/questions/1403560
复制相似问题