9

使用以下两种方法为蒙特卡罗模拟生成一系列路径之间是否存在统计差异(请注意,路径我的意思是 350 个点的向量,正态分布):

一种)

for path = 1:300000
    Zn(path, :) = randn(1, 350); 
end

或更高效的 B)

Zn = randn(300000, 350);

我只是想确保方法 B 中的行之间没有有趣的附加相关性或依赖性,而方法 A 中不存在。就像方法 B 通常分布在 2 维上,而 A 超过 1 维,所以也许这使得两个统计不同?

如果存在差异,那么我需要知道均匀分布的相同点(即 rand 而不是 randn)

4

2 回答 2

6

只是添加到@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 的问题时解释了原因;看到这里更多...

关于独立/依赖的问题,需要注意自己使用的语言。生成的数字序列rand完全依赖的。对于绝大多数统计测试,它们似乎是独立的——尽管如此,理论上,人们可以构建一个统计测试来证明由rand.

最后想一想,如果你有一份 Greene 的“计量经济学分析”,他在第 17.2 节中对随机数生成进行了简洁的讨论。

于 2013-01-30T07:39:13.050 回答
1

就基本 R 的随机数生成器而言,一次生成随机数序列或逐个生成随机数序列似乎没有任何区别。因此,@Colin T Bowers' (+1) 建议的上述行为也适用于 R。下面是 Colin 代码的 R 版本:

#set seed
set.seed(1234)
# generate a sequence of 10,000 random numbers at once 
X<-rnorm(10000)
# reset the seed
set.seed(1234)
# create a vector of 10,000 zeros
Y<-rep(0,times=10000)
# generate a sequence of 10,000 random numbers, one at a time
for (i in 1:10000){
Y[i]<-rnorm(1)
}
# Test for differences
if(any(X-Y!=0)){print("Error")} 
于 2021-12-26T17:38:20.807 回答