6

SAS を使用して相関する 2 つのベータ分布変数のランダム値を生成する必要があります。対象となる 2 つの変数は、次のように特徴付けられます。


X1とがmean = 0.896ありvariance = 0.001ます。

X2とがmean = 0.206ありvariance = 0.004ます。

X1およびの場合X2p = 0.5、ここでpは相関係数です。


SAS を使用して、関数 を使用してベータ分布を指定する乱数を生成する方法を理解していますX = RAND('BETA', a, b)。ここで、abは、平均と分散から計算できる変数Xの 2 つの形状パラメーターです。ただし、 p = 0.5で相関していることを指定しながら、両方の値を同時にX1生成したいと考えています。X2

4

1 に答える 1

5

このソリューションは、 Rick WicklinによるSimulating Data with SASの第 9 章で使用されている修正された方法に基づいています。

この特定の例では、最初に、ベータ分布に関連付けられている変数の平均、分散、および形状パラメーター (アルファ、ベータ) を定義する必要があります。

data beta_corr_vars;
    input x1 var1 x2 var2;  *mean1, variance1, mean2, variance2;
    *calculate shape parameters alpha and beta from means and variances;
    alpha1 = ((1 - x1) / var1 - 1/ x1) * x1**2;   
    alpha2 = ((1 - x2) / var2 - 1/ x2) * x2**2; 
    beta1 = alpha1 * (1 / x1 - 1);
    beta2 = alpha2 * (1 / x2 - 1);
    *here are the means and variances referred to in the original question;
    datalines; 
0.896 0.001 0.206 0.004
;
run;
proc print data = beta_corr_vars;
run;

これらの変数が定義されると、次のようになります。

proc iml;
  use beta_corr_vars; read all; 
  call randseed(12345);
      N = 10000;                  *number of random variable sets to generate;
      *simulate bivariate normal data with a specified correlation (here, rho = 0.5);
      Z = RandNormal(N, {0, 0}, {1 0.5, 0.5 1});   *RandNormal(N, Mean, Cov);
      *transform the normal variates into uniform variates;
      U = cdf("Normal", Z);      

      *From here, we can obtain beta variates for each column of U by; 
      *applying the inverse beta CDF;
      x1_beta = quantile("Beta", U[,1], alpha1, beta1);        
      x2_beta = quantile("Beta", U[,2], alpha2, beta2); 
      X = x1_beta || x2_beta; 

  *check adequacy of rho values--they approach the desired values with more sims (N);
  rhoZ = corr(Z)[1,2];                
  rhoX = corr(X)[1,2];

print X;
print rhoZ rhoX;

この回答に貢献してくれたすべてのユーザーに感謝します。

于 2015-07-17T17:39:23.060 に答える