copularnd(copula随机数)函数中的Matlab线性相关矩阵

时间:2015-10-18 12:40:03

标签: matlab random statistics correlation

考虑我们有4个向量,V1V2nf1nf2。我们需要生成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);

Rvv0.6Random_no8736 by 4矩阵时,一切正常,每对列都按照我们{{1}指定的方式进行关联}矩阵。但是当Rho时,MATLAB返回错误如下:

Rvv=0.9

我无法理解问题是什么,以及如何使用copula真正生成相关随机数。如果有人能帮我解决这个问题,我将非常感激。

1 个答案:

答案 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