【问题标题】:How to generate Gamma random variables with known correlation coefficients如何生成具有已知相关系数的 Gamma 随机变量
【发布时间】:2020-01-30 10:01:16
【问题描述】:

如果我知道任意两个 Gamma 随机变量 XiXj 之间的相关系数为 rho_ij,我想知道如何使用 MATLAB 生成一组 N Gamma 分布随机数 X1...XN

比如我的相关系数矩阵是

rho=[1.0 0.5 0.7; 
     0.5 1.0 0.4; 
     0.7 0.4 1.0]

那么,我需要X1X2X3

【问题讨论】:

    标签: matlab random correlation gamma-distribution


    【解决方案1】:

    编辑:

    正如 cmets 中的 @PeterO 和 @pjs 所指出的,相关性仅在线性变换下保留。由于我应用了非线性变换,因此变量之间的相关性与所需的相关性并不对应。

    这个答案不完整。

    原答案:

    使用gaminv,您将能够将多元正态随机数转换为伽马一。

    n   = 100;           % # of random number
    
    mu  = [0,0,0];       % [muX1, muX2, muX3]
    
    rho = [1.0 0.5 0.7; 
           0.5 1.0 0.4; 
           0.7 0.4 1.0]  % covariance matrix
    
    Z = mvnrnd(mu, rho, n); %Generate multivariate corralated random number
    
    U = normcdf(Z,0,1);     %Compute the CDF
    
    %gamma distribution parameter 
    a = 2
    b = 1
    
    %transform your normal multivariate number into gamma distribution with gaminv
    X = [gaminv(U(:,1),a,b) gaminv(U(:,2),a,b) gaminv(U(:,3),a,b)];
    
    % Variable extraction:
    X1 = X(:,1);
    X2 = ...
    

    仅使用 X1 和 X2 以及协方差因子 0.8 的结果:

    【讨论】:

    • 这里,U 包含来自 3 维 高斯 copula 的三个均匀分布但相关的随机变量。
    • 这样做的问题是链 N -> U -> G 中的两个变换都是非线性的,而相关性仅在线性变换下保留。 Gamma 结果可能相关,但与所需的幅度无关。
    • @pjs Ho,... 确实,谢谢。任何解决方法?但是它应该存在一个可以映射f(rho_normal) = rho_gamma no 的函数?
    • 抱歉,我不知道任何直接的解决方法。
    • 当我为n =10^5 计算corrcoef(X) 时,我得到了[ 1.0000 0.4692 0.6771; 0.4692 1.0000 0.3704; 0.6771 0.3704 1.0000]n=10^7[ 1.0000 0.4743 0.6783; 0.4743 1.0000 0.3754; 0.6783 0.3754 1.0000]。我不确定这是检查的方法。
    猜你喜欢
    • 2015-02-27
    • 2019-09-14
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多