SAS

GTLで参照線・ガイド線を引く(2)DROPLINEステートメント

濃度応答曲線の作図の続きです。濃度応答曲線はこのままだとEC50がグラフのどの部分に相当するのかがわかりにくいので、補助線を引いてEC50の位置をわかりやすく表示させます。

SASでEC50とEmaxを推定する(2) 濃度応答曲線の作図前回はアゴニスト濃度と生体の応答の関係性を非線形回帰分析にて推定しました。 今回は推定したパラメータを用いて濃度応答曲線(concen...

droplineステートメント

droplineステートメントは指定した座標からx軸またはy軸に向かって垂線を引くステートメントです。


dropline x=x座標 y=y座標 /;

垂線をおろす先の座標軸はdroptoオプションで指定できます。デフォルトはx(x軸に対して垂線を引く)です。SAS9.4M1では引数としてbothも指定できます。これはx軸とy軸の両方に垂線を引くことができます。

なお座標指定の部分をデータセットの変数にすれば複数の座標から垂線を引くことができます。ただしdroptoオプションはデータセットの変数を引数として利用できないので、座標毎に垂線の設定を変えるということはできないようです。

作図例

前回作成した濃度応答曲線に補助線を引いてEC50の場所を表示します。
垂線を引く座標は

x=EC50の常用対数

y=EmaxとBottomの中間の値、今回はbottom=0としているため Emaxを2で割った値

となります。今回は座標が一つだけなので、座標をマクロ変数に格納し、sgrenderのdynamicステートメントにて指定していますが、この値を格納した変数をデータセットに追加する方法のほうが汎用性は高そうです。

/*あらかじめEC50とEmaxの値をマクロ変数に格納する*/ 

proc template ;
define statgraph curve3; 
dynamic _emax_1 _ec50_1 _logec50 ; 
begingraph; 
entrytitle "被験物質処理による細胞の応答変化"; 
   layout overlay / 
      xaxisopts=(
         label="Log Agonist concentration (nmol/L)"
         ) 
      yaxisopts=(label="Response"); 
      bandplot x=conc limitupper=ucl limitlower=lcl / 
         display=(outline) 
         outlineattrs=(color=black pattern=shortdash) 
         legendlabel="95% prediction interval" 
         name="pred" ; 
      bandplot x=conc limitupper=uclm limitlower=lclm / 
         legendlabel="95% confidence interval" 
         name="conf"; 
      seriesplot x=conc y=estimate / 
         group=type 
         name="series"; 
      scatterplot x=conc y=response / 
         group=type; /
      *ドロップライン*/ 
      dropline x=_logEC50 y=eval(_emax_1/2) / 
         dropto=both 
         lineattrs=(pattern=shortdash thickness=2 color=red); 

      layout gridded /autoalign=(TOPLEFT TOPRIGHT) 
                      columns=2 
                      border=true; 

         entry "Parameter" / textattrs=(weight=bold) pad=5 ; 
         entry "Estimate"/ textattrs=(weight=bold) pad=5 ; 
         entry halign=left "E"{sub "max"}; 
         entry _emax_1; 
         entry halign=left "EC"{sub "50"}; 
         entry _ec50_1; 
      endlayout; 
      discretelegend "series" "conf" "pred"; 
   endlayout; 
endgraph; 
end; 
run; 

proc sgrender data=pred template=curve3; 
format type type.; 
dynamic _emax_1=&emax_1 
        _ec50_1=&ec50_1 
        _logec50=&logec50; 
where type=1; 
run;
実行結果

本当はdroplineにラベルを追加しようと考えていたのですが、ラベルの表示位置を制御するオプションが見当たらりませんでした。なのでラベルの表示は別のステートメントで実施したほうが良いと思います。