GPLOTプロシジャで表示されるスプライン曲線上の値をデータセットに出力する方法

[OS] ALL
[リリース] 8 以降
[キーワード] TRANSREG, SPLINE, SMOOTH

[質問]

SAS/GRAPHソフトウェアのGPLOTプロシジャを使用して、スプライン曲線を表示しました。この曲線上の座標をSASデータセットに出力する方法はありますか。

GPLOTプロシジャのプログラム例:


proc gplot data=data1;
  plot y*x;
  symbol i=spline;
run;
quit;

[回答]

SAS 8 以降では、TRANSREGプロシジャのMODELステートメントで、変換方法SMOOTHを指定することによって実現できます。

例:


/* サンプルデータ */
data test;
  do x = 1 to 100 by 2;
    y = log(x) + sin(x / 10) + normal(7);
    output;
  end;
run;

/* 事前にソートする(ソートされていない場合) */
proc sort data=test;
  by x;
run;

/* TRANSREGプロシジャ */
proc transreg data=test;
  model identity(y) = smooth(x); /* 変数 x に対してSMOOTHによる変換を施す */
  output out=out1; /* データセットout1に座標を出力。この場合、変数 Tx に変換された数値が入る */
run;

/* GPLOTプロシジャで、実測値、スプライン曲線、及びTRANSREGプロシジャによる出力を比較する */
proc gplot data=out1;
  plot y*x=1 y*x=2 tx*x=3 / cframe=ligr overlay;
  symbol1 color=blue   v=star i=none;    /* 実測値 */
  symbol2 color=yellow v=none i=spline;  /* I=SPLINE */
  symbol3 color=cyan   v=dot  i=none;    /* TRANSREGによる結果 */
run;
quit;

SYMBOLステートメントで「I=SM50」といった指定を行なった場合については、変換SMOOTHのオプションとして「SM=50」を与えます。


proc transreg data=test;
  model identity(y) = smooth(x/sm=50);
  output out=out2;
run;

proc gplot data=out2;
  plot y*x=1 y*x=2 tx*x=3 / cframe=ligr overlay;
  symbol1 color=blue   v=star i=none;   /* 実測値 */
  symbol2 color=yellow v=none i=sm50;   /* I=SM50 */
  symbol3 color=cyan   v=dot  i=none;   /* TRANSREGによる結果 */
run;
quit;

なお、SAS/IMLを利用した方法については、下記のFAQをご参照ください。

GPLOTプロシジャで表示されるスプライン曲線上の値を、SAS/IMLを用いてデータセットに出力する方法