生成遵循 beta 分布的相关随机变量
Generate correlated random variables that follow beta distributions
我需要使用 SAS 为 相关 的两个 beta-distributed 变量生成随机值。感兴趣的两个变量的特征如下:
X1
有 mean = 0.896
和 variance = 0.001
.
X2
有 mean = 0.206
和 variance = 0.004
.
对于X1
和X2
,p = 0.5,其中p是相关系数。
使用 SAS,我了解如何使用函数 X = RAND('BETA', a, b)
生成指定 beta 分布的随机数,其中 a 和 b 是变量 X 的两个形状参数,可以根据均值和方差计算。但是,我想同时为 X1
和 X2
生成值,同时指定它们在 p = 0.5.
处相关
此解决方案基于 Simulating Data with SAS by Rick Wicklin 第 9 章中使用的修改方法。
在这个特定示例中,我首先必须定义与 beta distribution:
关联的变量均值、方差和形状参数(alpha、beta)
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;
感谢所有对此回答做出贡献的用户。
我需要使用 SAS 为 相关 的两个 beta-distributed 变量生成随机值。感兴趣的两个变量的特征如下:
X1
有 mean = 0.896
和 variance = 0.001
.
X2
有 mean = 0.206
和 variance = 0.004
.
对于X1
和X2
,p = 0.5,其中p是相关系数。
使用 SAS,我了解如何使用函数 X = RAND('BETA', a, b)
生成指定 beta 分布的随机数,其中 a 和 b 是变量 X 的两个形状参数,可以根据均值和方差计算。但是,我想同时为 X1
和 X2
生成值,同时指定它们在 p = 0.5.
此解决方案基于 Simulating Data with SAS by Rick Wicklin 第 9 章中使用的修改方法。
在这个特定示例中,我首先必须定义与 beta distribution:
关联的变量均值、方差和形状参数(alpha、beta)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;
感谢所有对此回答做出贡献的用户。