Matlab中的准蒙特卡罗

计算科学 蒙特卡洛
2021-11-30 16:26:40

我想使用准蒙特卡罗来尝试改进我正在运行的模拟的收敛性。

随机数只是为了产生标准线性回归模型的观察误差,然后使用许多不同的回归技术进行估计。重复这样做以估计每个模型的均方误差。

我对准蒙特卡洛还很陌生,但在这种情况下可能会有所帮助,我只是用它来产生 10k 个随机数。似乎通常我可以期望更快地收敛1/n而不是n1/2http ://en.wikipedia.org/wiki/Quasi-Monte_Carlo_method 。

但是,上面的文章还指出,QMC 数字并不是真正随机的,所以我想知道这对我可能想要对结果进行的任何统计测试有什么影响。

1.) MC 与 QMC 的优缺点是什么。(如果 QMC 可用,您会一直使用它吗?) 2.) 我可以使用哪些测试来确定哪种测试最适合我的应用程序?(似乎任何依赖于真正随机数字的测试都会失败?)

我知道这可以在 Matlab 中使用

q = qrandstream('halton',NSteps,'Skip',1e3,'Leap',1e2); 
RandMat = qrand(q,NRepl); 
z_RandMat = norminv(RandMat,0,1);

摘自这篇论文

还有其他低差异数字,例如 Matlab 中也提供 Sobol 序列,我再次想知道我可以使用哪些测试来确定哪种测试最适合我的情况。

1个回答

准随机数在统计上不是独立的,因此如果您的算法需要这样做,则不应使用它们。

您通常可以使用准随机数而不是伪随机数的一个领域是通过蒙特卡洛积分评估积分。在这个应用程序中,准随机数不是真正随机的事实不是问题,因为统计特性无关紧要。重要的是序列对被积函数空间和准随机数的采样比伪随机数更好地填充空间,从而提高收敛性。

我发现数值算法组 (NAG) 的以下文章有助于更详细地描述这一点

http://www.nag.co.uk/IndustryArticles/introduction_to_quasi_random_numbers.pdf

我还注意到,Mathworks 提出了准随机数的其他一些应用以及蒙特卡罗积分:空间填充实验设计和全局优化http://www.mathworks.co.uk/help/stats/generating-quasi-随机数.html#br5k9hi-9

您需要注意的一个问题是准随机序列在多少维上保留了其所需的属性。例如,标准的 Halton 序列在高维中表现不佳。您可以使用 MATLAB 直接查看

创建一个 15 维的停止序列并在每个维度评估 1000 个点:

>> rng default
>> p=haltonset(15);
>> x0=net(p,1000);
>> size(x)

ans =
        1000          15

将维度 1 和 2 相互绘制

>> scatter(x0(:,1),x0(:,2),5,'b')

尺寸 1 和 2

到目前为止看起来不错。当我们绘制维度 14 对 15 时不太好

>> scatter(x0(:,14),x0(:,15),5,'b')

在此处输入图像描述

有多种处理方法,例如加扰(例如,参见http://www.mathworks.co.uk/help/stats/qrandset.scramble.html),但您也可以选择选择已知的不同序列对更高维度有好处。

我有更多使用 NAG Toolbox for MATLAB ( http://www.nag.co.uk/numeric/MB/start.asp ) 的经验,它提供了 2 个 sobol 生成器(一个适用于 10,000 维,另一个适用于 1111维)、Niederreiter 发电机(318 维)和 Faure 发电机(40 维)。