使用proc iml进行monte carlo集成

时间:2014-05-09 04:19:23

标签: sas montecarlo sas-iml

proc iml;

call randseed(4545); * initialize the stream (like streaminit);
x = J(5000,1,.); * pre-allocate space for random numbers;
call randgen(x,'normal',0,1); * fill x with N(0,1) deviates;
y = y + (x**2 - 3*x**3 + 5x < 1);
p = y / 5000;  * MEAN acts on each matrix column;
se = sqrt(y*(1-y)/5000); * VAR, but not STD or STDERR, also acts on columns;
print "IML STEP: estimated probability is" p
"with standard error" se;  * use PRINT, not PUT;

我正在尝试使用monte carlo与proc iml集成来估计x ** 2 - 3 * x ** 3 + 5x小于1的概率。我做错了什么?顺便说一下,不允许循环。

2 个答案:

答案 0 :(得分:1)

这里有很多不妥之处。 AS Rick说,这有一个家庭作业的问题,所以我不会发布解决方案。以下是一些需要考虑的事项。

  1. 正常的试验可能不是你想要的。您的功能在整个数字行上定义。获得x~N(0,1),其中abs(x)> 3不太可能。
  2. Rick在定义之前提到你正在使用y。
  3. 查看元素明智的操作而不是矩阵操作。在你的功能中使用这些。
  4. 5x不是有效的操作。
  5. 考虑设置缩减[:]来做平均值。
  6. 我不认为SE的等式是正确的。 http://en.wikipedia.org/wiki/Standard_error

答案 1 :(得分:0)

这可能是一个家庭作业问题,所以我不打算给出完整的答案。但是,我的第一个提示是考虑Y应该是什么。它应该是一个指示变量(0/1),表示随机选择的观测值是否落在飞机的某个区域内。

我的第二个提示是要记住你不能在表达式的右边使用未定义的变量,所以&#39; y +(f(x)&lt; 1)&#39;不是有效的向量表达式。祝你好运!