2

proc IML 内で call randgen を使用して、特定のパラメーターを持つワイブル分布に従う 10 個の乱数を作成しようとしています。これが私が使用しているコードです(明らかに複数のループがありますが、現在テスト中です):

do i = 1 to 1;
    Call randgen(Rands[i,1:Ntimes], 'Weibull', alpha[i], beta[i]);
    print (rands[1,1:Ntimes]);
    print (alpha[i]) (beta[i]);
end;

この例では、Ntimes = 10、alpha[i] = 4.5985111、および beta[i] = 131.79508 です。私の問題は、10回の反復/乱数のそれぞれが1として返されることです.Rで同じパラメーターを使用してrweibull関数を使用し、意味のある結果を得たので、SASまたは私のコードと関係があると考えています.パラメータの問題。Randgen 呼び出しを正しく使用していますか? 結果がこのように出てくる理由を誰か知っていますか?

4

2 に答える 2

0

実際、古いバージョンの SAS/IML を使用していない限り、ループは必要ありません。SAS/IML 12.3 以降、RANDGEN サブルーチンはパラメーターのベクトルを受け入れます。あなたの場合、alpha および beta パラメータのベクトルを定義します。「Nparam」パラメータがあるとしましょう。次に、N x Nparam 行列を割り当てて結果を保持します。次の例に示すように、RANDGEN を 1 回呼び出すだけで、i_th 列が Weibull(alpha[i], beta[i]) からのサイズ N のサンプルになるように行列を埋めることができます。

 proc iml;
 Nparam = 8; N = 1000;

 alpha= 1:Nparam;  /* assign parameter values */
 beta = 10 + (Nparam:1);
 rands = j(N,Nparam);
 call randgen(rands, 'WEIB', alpha,beta);  /* SAS/IML 12.1 */

 /* DONE. The i_th column is a sample from Weibul(alpha[i], beta[i]) 
    TEST IT: Compute the mean of each sample: */
 mean = mean(rands); std = std(rands);
 print (alpha//beta//mean//std)[r={"alpha" "beta" "mean" "std"}];
 /* TEST IT: Plot the distribution of each sample (SAS/IML 12.3) */  
 title "First param"; call histogram(rands[,1]);
 title "Last param";  call histogram(rands[,Nparam]);
于 2014-08-27T12:33:09.643 に答える