Using multiple cores/machines should be simple if you're just using parallel independent replications, but be aware of common deficiencies of random number generators (e.g. if using the current time as seed, spawning many processes with one RNG for each might produce correlated random numbers, which leads to invalid results - see e.g. this paper)
You might want to use variance reduction to reduce the number of required replications, i.e. to shrink the size of the required sample. More advanced variance reduction techniques can be found in many textbooks, e.g. in this one.
> 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
>
Preallocate your vectors!
> 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
>
Latin Hypercube Sampling is easily applied and has a major influence on the results. Basically you take a latin hypercube sample from a uniform distribution (e.g., using randomLHS() in the package lhs) and transform this to your desired distribution using e.g., qnorm(uniformsample).
发布评论
评论(4)
如果您只是使用并行独立复制,那么使用多核/机器应该很简单,但要注意随机数生成器的常见缺陷(例如,如果使用当前时间作为种子,会产生许多每个进程都有一个 RNG 可能会产生相关的随机数,这会导致无效结果 - 请参见例如 本文)
您可能需要使用方差减少减少所需的重复次数,即缩小所需样本的大小。更先进的方差减少技术可以在许多教科书中找到,例如这本书。
Using multiple cores/machines should be simple if you're just using parallel independent replications, but be aware of common deficiencies of random number generators (e.g. if using the current time as seed, spawning many processes with one RNG for each might produce correlated random numbers, which leads to invalid results - see e.g. this paper)
You might want to use variance reduction to reduce the number of required replications, i.e. to shrink the size of the required sample. More advanced variance reduction techniques can be found in many textbooks, e.g. in this one.
预先分配你的向量!
Preallocate your vectors!
拉丁超立方采样很容易应用,并且对结果有重大影响。基本上,您从均匀分布中获取拉丁超立方体样本(例如,使用lhs包中的randomLHS()),并使用例如qnorm(uniformsample)将其转换为您想要的分布。
Latin Hypercube Sampling is easily applied and has a major influence on the results. Basically you take a latin hypercube sample from a uniform distribution (e.g., using randomLHS() in the package lhs) and transform this to your desired distribution using e.g., qnorm(uniformsample).
我知道这个线程确实很旧,但是如果有人偶然发现它并正在寻找更快的方法,我认为以下方法有效:
I know this thread is really old, but if anyone stumbles upon it and is looking for an even faster method, I think the following works: