了解Matlab中的伪随机数如何表示统计独立性

了解Matlab中的伪随机数如何表示统计独立性,matlab,random,Matlab,Random,考虑下面的Matlab代码,其中我使用伪随机数生成器生成了一些数据。 我希望你能帮助我从统计学的角度理解这些数字的随机性,我将在下面解释 我首先设置了一些参数 %%%%%%%%Parameters clear rng default Xsup=-1:6; Zsup=1:10; n_m=200; n_w=200; R=n_m; 然后我生成数据 %%%%%%%%Creation of data [XZ,etapair,zetapair,etasingle,zetasingle] %Vec

考虑下面的Matlab代码,其中我使用伪随机数生成器生成了一些数据。 我希望你能帮助我从统计学的角度理解这些数字的随机性,我将在下面解释

我首先设置了一些参数

%%%%%%%%Parameters
clear
rng default
Xsup=-1:6; 
Zsup=1:10; 
n_m=200; 
n_w=200; 
R=n_m;
然后我生成数据

%%%%%%%%Creation of data [XZ,etapair,zetapair,etasingle,zetasingle]

%Vector X of dimension n_mx1
idX=randi(size(Xsup,2),n_m,1); %n_mx1
X=Xsup(idX).'; %n_mx1

%Vector Z of dimension n_wx1
idZ=randi(size(Zsup,2),n_w,1); 
Z=Zsup(idZ).'; %n_wx1

%Combine X and Z in a matrix XZ of dimension (n_m*n_w)x2 
which lists all possible combinations of values in X and Z
[cX, cZ] = ndgrid(X,Z);
XZ = [cX(:), cZ(:)]; %(n_m*n_w)x2

%Vector etapair of dimension (n_m*n_w)x1
etapair=randn(n_m*n_w,1); %(n_m*n_w)x1

%Vector zetapair of dimension (n_m*n_w)x1
zetapair=randn(n_m*n_w,1); %(n_m*n_w)x1

%Vector etasingle of dimension (n_m*n_w)x1
etasingle=max(randn(n_m,R),[],2); %n_mx1 
etasingle=repmat(etasingle, n_w,1); %(n_m*n_w)x1

%Vector zetasingle of dimension (n_m*n_w)x1
zetasingle=max(randn(n_w,R),[],2); %n_wx1
zetasingle=kron(zetasingle, ones(n_m,1)); %(n_m*n_w)x1
现在让我将这些数据转换为统计术语:

对于
t=1,…,n_w*n_m
X(t)
可以被认为是随机变量
X_t

对于
t=1,…,n_w*n_m
Z(t)
可以被认为是随机变量
Z_t

对于
t=1,…,n_w*n_m
etapair(t)
可以被认为是随机变量
E_t

对于
t=1,…,n_w*n_m
zetapair(t)
可以被认为是随机变量
Q_t

对于
t=1,…,n_w*n_m
etasing(t)
可以被认为是随机变量
Y_t

对于
t=1,…,n_w*n_m
zetasingle(t)
可以被认为是随机变量
S_t

我相信Matlab中的伪随机数生成器允许这样做
(X_1,X_2,…,Z_1,Z_2,…,E_1,E_2,…,Q_1,Q_2…,Y_1,Y_2,…,S_1,S_2,…)
是相互独立的 如前所述


作为对这一假设主张的检验,我定义了
W_t:=-E_t-Q_t+Y_t+S_t
,并根据观察随机事件的本质经验计算了
Pr(W_t,你无法保证给定经验试验的理论准确结果

您已在脚本开始时设置了
rng default
,这意味着您将始终获得相同的结果(
option1=0.0021
option2=0.0012

多次运行脚本并平均结果,我们应该接近理论精度

kk = 10000;
option1 = zeros(kk, 1);
option2 = zeros(kk, 1);
for ii = 1:kk
    % No need to use 'clear' here. If you were concerned 
    % for some reason, you could use 'clearvars -except kk option1 option2 ii'
    % do not use 'rng default'. Use 'rng shuffle' if anything, but not necessary
    Xsup = -1:6;
    % ... all your other code
    % replace 'option1=...' with 'option1(ii)=...'
    % replace 'option2=...' with 'option2(ii)=...'  
end
fprintf('Results:\nMean option1 = %f\nMean option2 = %f\n', mean(option1), mean(option2));
结果:

>> Mean option1 = 0.001461
>> Mean option2 = 0.001458
我们可以看到这些在某种程度上是相同的,如果我们进行X次试验(足够大的X次试验),其精确度可以任意高。这与自变量的预期一样



注意,如果你有并行计算工具箱,这个
for
循环可以很容易地换成
parfor
,并且你可以更快地运行试验。

不清楚你的实际问题是什么,因为你不是在谈论某个详细的统计问题(如Sardar所建议的)就是在问“考虑到所有这些由MATLAB生成的随机变量,它们是否绝对独立?”,这让我们回想起你的答案是“是”。你希望在这里简短地说“你是正确的”,还是讨论一下MATLAB如何处理随机数生成?@Wolfie首先,我缩短了我的问题(在我做双随机步之前)让它更简单。其次,当我简单地比较条件概率和无条件概率时,我希望讨论一下为什么Matlab声称的统计独立性似乎不成立。你听起来很保守?我只是想澄清这个问题,以便我能提供准确的答案…非常感谢。你是说如果
n_m*n_w
复制不需要“复制平均化”"考虑到?换句话说:为了获得理论准确性,我需要在一个循环中分别画出
n_w*n_w
行中的每一行?除非运气好,否则你永远无法从一次试验中获得此测试的完美理论统计结果。我正在展示,通过足够的试验,我们可以证明MATLAB的随机数生成器pro减少独立值。@user3285148表示自上次随机数生成器洗牌后,每次调用这些值时。启动MATLAB时,该值被洗牌为
“默认值”
。如果每次打开MATLAB时都想从新点开始,只需在启动脚本中调用
rng shuffle
>> Mean option1 = 0.001461
>> Mean option2 = 0.001458