考虑我们有4个向量,V1
,V2
,nf1
和nf2
。我们需要生成n=8736
个随机数,每对(V1,V2)
,(V1,nf1)
,(V2,nf2)
和(nf1,nf2)
关联如下:
Rvv=0.6 for (V1,V2)
Rvn=0.5 for (V1,nf1) and (V2,nf2)
Rnn=0 for (nf1,nf2)
((V1,nf2)
和(V2, nf1)
的相关性并不重要。现在我们使用copula在MATLAB中生成相关的随机数:
Rvv=0.6;
Rvn=0.5;
Rnn=0;
n = 8736;
%V1 V2 nf1 nf2
Rho = [1 Rvv Rvn 0 ; %V1
Rvv 1 0 Rvn; %V2
Rvn 0 1 Rnn; %nf1
0 Rvn Rnn 1 ]; %nf2
Random_no = copularnd('Gaussian',Rho,n);
当Rvv
为0.6
且Random_no
为8736 by 4
矩阵时,一切正常,每对列都按照我们{{1}指定的方式进行关联}矩阵。但是当Rho
时,MATLAB返回错误如下:
Rvv=0.9
我无法理解问题是什么,以及如何使用copula真正生成相关随机数。如果有人能帮我解决这个问题,我将非常感激。
答案 0 :(得分:0)
我不能回答关于理论的问题,但是在copularnd
:
case 'gaussian'
Rho = varargin{1};
n = varargin{2};
d = size(Rho,1);
if isscalar(Rho)
if ~(-1 < Rho && Rho < 1)
error(message('stats:copularnd:BadScalarCorrelation'));
end
Rho = [1 Rho; Rho 1];
d = 2;
elseif any(diag(Rho) ~= 1)
error(message('stats:copularnd:BadCorrelationMatrix'));
end
% MVNRND will check that Rho is square, symmetric, and positive semi-definite.
u = normcdf(mvnrnd(zeros(1,d),Rho,n));
由于在帮助中没有关于它的任何信息,我认为对于知道copula是什么的人来说必须清楚:)但不适合我
有很多方法可以生成正半正定矩阵:http://www.mathworks.com/matlabcentral/newsreader/view_thread/163489