前のページ|次のページ

CALL RANGAMルーチン

ガンマ分布からランダム変量を返します。

カテゴリ: 乱数

構文

CALL RANGAM(seed, a, x);

必須引数

シード

シード値です。CALL RANGAMが実行されるたびに、seedの新しい値が返されます。

範囲 seed < 231 - 1
seed ≤ 0の場合、シードストリームの初期化に時刻が使用されます。
参照項目 シード値シード値の詳細については、シード値および乱数関数と乱数CALLルーチンのシード値の比較を参照

a

数値の形状パラメータです。

範囲 a > 0

x

数値変数です。CALL RANGAMが実行されるたびに、ランダム変量xの新しい値が返されます。

詳細

CALL RANGAMルーチンはseedを更新し、パラメータがaのガンマ分布から生成された変量xを返します。
シードを調整することで、同一または後続のDATAステップの一部またはすべてのオブザベーションで変量のストリームへの一致または不一致を強制できます。
a>1の場合、Chengによる受容-棄却手法が使用されます(Cheng、1977)。a ≤ 1の場合、Fishmanによる受容-棄却手法が使用されます(Fishman、1978)。詳細については、リファレンスを参照してください。
乱数CALLルーチンの効果的な使用方法に関する説明と例については、ストリームの開始、 停止および再開を参照してください。

比較

CALL RANGAMルーチンは、シードおよび乱数ストリームをRANGAM関数よりも高度に制御できます。

例1

この例では、CALL RANGAMルーチンを使用します。
data u1(keep=x);
   seed=104;
   do i=1 to 5;
      call rangam(seed, 1, x); 
      output;
   end;
   call symputx('seed', seed);
run;

data u2(keep=x);
   seed=&seed
   do i=1 to 5;
      call rangam(seed, 1, x); 
      output;
   end;
run;

data all;
   set u1 u2;
   z=rangam(104, 1);
run;

proc print label;
   label x='Separate Streams' z='Single Stream';
run;
CALL RANGAMルーチンからの出力
CALL RANGAMルーチンからの出力

例2

CALL RANGAMルーチンを使用する別の例を次に示します。
data case; 
   retain Seed_1 Seed_2 Seed_3 45; 
   a=2; 
   do i=1 to 10; 
      call rangam(Seed_1, a, X1); 
      call rangam(Seed_2, a, X2); 
      X3=rangam(Seed_3, a); 
      if i=5 then 
         do; 
            Seed_2=18; 
            Seed_3=18; 
         end; 
      output; 
   end; 
run; 

proc print; 
   id i; 
   var Seed_1-Seed_3 X1-X3; 
run;
CALL RANGAMルーチンからの出力
CALL RANGAMルーチンからの出力
i=5の場合、CALL RANGAMステートメントでSeed_2を変更すると、X2の変量のストリームが強制的にX1の変量のストリームから逸脱します。ただし、RANGAM関数でSeed_3を変更した場合には影響しません。

関連項目:

前のページ|次のページ|ページの先頭へ