使用以下两种方法为montecarlo模拟生成一系列路径之间是否存在统计差异(请注意,路径中我指的是350点的向量,通常是分布式的):
A)
for path = 1:300000
Zn(path, :) = randn(1, 350);
end
或效率更高的B)
Zn = randn(300000, 350);
我只是想确保方法B中的行之间没有有趣的附加相关性或依赖性,这在方法A中不存在。也许方法B通常在2维上分布,其中A超过1维,所以也许这使得两者在统计上有所不同?
如果存在差异,那么我需要知道相同的均匀分布(即rand而不是randn)
答案 0 :(得分:5)
只需添加@natan(+1)的答案,请运行以下代码:
%# Store the seed
Rng1 = rng;
%# Get a matrix of random numbers
X = rand(3, 3);
%# Restore the seed
rng(Rng1);
%# Get a matrix of random numbers one vector at a time
Y = nan(3, 3);
for n = 1:3
Y(:, n) = rand(3, 1);
end
%# Test for differences
if any(any(X - Y ~= 0)); disp('Error'); end;
您会注意到X
和Y
之间没有区别。也就是说,在一步构建矩阵和从一系列向量构建矩阵之间没有区别。
但是,我和我的代码之间存在差异。注意我按列而不是行填充矩阵,因为当rand
用于在一个步骤中构造矩阵时,它按列填充。顺便说一句,我不确定你是否意识到,但作为一般规则,你应该总是尝试对矩阵列而不是行执行向量运算。我在前几天回答了关于SO的问题时解释了原因;请参阅here了解更多信息......
关于独立/依赖的问题,人们需要小心使用的语言。 rand
生成的数字序列完全依赖。对于绝大多数统计测试,它们似乎是独立的 - 尽管如此,理论上,人们可以构建一个统计测试来证明rand
生成的一系列数字之间的依赖关系。
最后想一想,如果你有一份格林的“经济计量分析”,他在第17.2节中对随机数生成做了一个简洁的讨论。