假设我们有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矩阵时,每对列都按照Rho矩阵的指定进行相关,这是可以接受的。但当为Rvv=0.9时,MATLAB返回的错误如下:
Error using mvnrnd
SIGMA must be a symmetric positive semi-definite matrix.
Error in copularnd
u = normcdf(mvnrnd(zeros(1,d),Rho,n));我不明白问题是什么,我怎么才能真正使用copula生成相关的随机数呢?如果有人能帮我解决这个问题,我将不胜感激。
发布于 2015-10-19 22:50:40
我不能回答关于理论的问题,但这是在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
https://stackoverflow.com/questions/33198024
复制相似问题