【问题标题】:Matlab linear correlation matrix in copularnd (copula random number) functioncopularnd(copula随机数)函数中的Matlab线性相关矩阵
【发布时间】:2016-01-16 19:58:50
【问题描述】:

假设我们有 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) 的相关性并不重要)。现在我们在 MATLAB 中使用 copula 生成相关随机数:

    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.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 生成相关随机数。如果有人能帮助我解决这个问题,我将不胜感激。

【问题讨论】:

    标签: matlab random statistics correlation


    【解决方案1】:

    我无法回答有关理论的问题,但在 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

    【讨论】:

      猜你喜欢
      • 2013-02-12
      • 2017-10-24
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多