对于我的SAS项目,我必须生成(X,Y)对,其分布为Y~N(3 + X + .5X ^ 2,sd = 2)。我查看了normal()
的所有SAS文档,我认为绝对没办法做到这一点。我尝试了很多不同的方法,非常沮丧。
答案 0 :(得分:1)
您可以使用rand function在SAS中生成随机数。它有各种各样的发行版;阅读文档以完全理解。
我不确定您是否可以直接使用PDF,但如果您能够以常规正态分发方式使用它,则可以这样做。最重要的是,大多数单变量DFs SAS支持从均匀分布开始,然后应用它们的公式(离散或连续),这可能是正确的方法。那是进入统计之地的地方,这是我不愿意去的地方。然而,据我所知,没有直接的方法来简单地传递X的函数。
使用平均值M和标准差SD生成[numsamp]法线:
%let m=0;
%let sd=2;
%let numsamp=100;
data want;
call streaminit(7);
do id = 1 to &numsamp;
y = rand('Normal',&m.,&sd.);
output;
end;
run;
因此,如果我理解你想要什么,这可能有用:
%let m=0;
%let sd=2;
%let numsamp=1000;
data want;
call streaminit(7);
do id = 1 to &numsamp;
x = rand('Normal',&m.,&sd.);
y = 0.5*x**2 + x + 3;
output;
end;
run;
proc means data=want;
var x y;
run;
X的平均值为0.5,标准差为1.96(大致是你要求的)。 Y的平均值为5,SD为3.5。如果您要求Y的SD为2,我不知道该怎么做。
答案 1 :(得分:1)
我相信这是提问者想要做的一个例子:
data sample;
do i = 1 to 1000;
x = ranuni(1);
y = rand('normal', 3 + x + 0.5*x**2, 2);
output;
end;
run;
proc summary data = sample;
var x y;
output out = xy_summary;
run;
Joe已经或多或少地存在 - 我认为需要解决的唯一关键点是使每个y的均值取决于相应的x,而不是对所有对使用单个固定均值。因此,不是来自相同正态分布的1000个样本,上面从1000个不同的正态分布中的每一个生成1个样本。
我为x使用了统一的[0,1]分布,但你可以使用你喜欢的任何发行版。