SAS

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

前回まで、参照線やガイド線をreferencelineステートメントやdroplineステートメントで作図する方法を紹介してきましたが、これらは軸に対して平行な直線を作図します。

GTLで参照線・ガイド線を引く(1)REFERENCELINEステートメントグラフを作図するときに特定の範囲を強調したいときに参照線を引くことがあります。 GTLでは参照線を引くステートメントがいくつか用意され...
GTLで参照線・ガイド線を引く(2)DROPLINEステートメント濃度応答曲線の作図の続きです。濃度応答曲線はこのままだとEC50がグラフのどの部分に相当するのかがわかりにくいので、補助線を引いてEC5...

それでは斜めのガイド線を引くにはどうすればよいでしょうか?

lineparmステートメント

プロットエリアに任意の直線を引くためにはlineparmステートメントを使用します。構文は以下の通り

lineparm x=x座標 y=y座標 slope=傾き /;

x,yで直線上の座標を指定し、slopeで直線の傾きを指定します。なおx,yのいずれかが欠損の場合は直線は作成されません。slopeが欠損値の場合はY軸に対して平行な線(傾きは0)を作成します。

なお引数としてデータセットの変数も指定できるため、複数の直線を作図することも可能です。またlineparmステートメント単体では使用できず、必ず他のグラフステートメントと併用する必要があります。

例えばy=x+1の直線を作図したい場合は以下のように書きます.

lineparm x=0 y=1 slope=1;

作図例

薬剤投与前と投与後の各被験者の臨床検査値を散布図として表示します。(X=投与前、Y=投与後)

例えば肝臓に負担をかける薬物の場合投薬するとASTやALTの値が高くなります。そういう影響が出ている被験者がいるかどうかを視覚的に判断することができます。

proc template; 
define statgraph line; 
begingraph; 
entrytitle "薬物Aの臨床検査値(ALT)に対する影響"; 
   layout overlayequated / 
      equatetype=square 
      xaxisopts=(label="投薬前(IU/L)" griddisplay=on) 
      yaxisopts=(label="投薬後(IU/L)" griddisplay=on); 

      scatterplot x=before y=after / 
         markerattrs=(symbol=circlefilled); 
   endlayout; 
endgraph; 
end; 
run; 

/* テストデータ */ 
data test; 
call streaminit(123); 
do before =15 to 37; 
   after =before+rand("normal")*5; 
   output; 
end; 
run; 

proc sgrender data=test template=line; 
run;
実行結果

この図にガイド線として45°線(y=xの直線)を追加します。各データがこの直線付近にある時、臨床検査値は投薬前後でほどんど変化していないことを示します。

proc template; 
define statgraph line; 
begingraph; 
entrytitle "薬物Aの臨床検査値(ALT)に対する影響"; 

   layout overlayequated / 
      equatetype=square 
      xaxisopts=(label="投薬前(IU/L)" griddisplay=on) 
      yaxisopts=(label="投薬後(IU/L)" griddisplay=on); 

      scatterplot x=before y=after / 
         markerattrs=(symbol=circlefilled); 
      lineparm x=0 y=0 slope=1 / 
         lineattrs=(color=red) ; 

   endlayout; 
endgraph; 
end; 
run;
ガイド線追加

ガイド線追加前と比べて軸範囲が拡張されてしまいました。これはlineparmステートメントで指定したx,y座標が散布図のデータの範囲外の場合、自動的に軸が拡張されるためです。clipオプションをtrueにするとこの仕様が無効になり、データの範囲内で直線が作図されます。

proc template; 
define statgraph line; 
begingraph; 
entrytitle "薬物Aの臨床検査値(ALT)に対する影響"; 

   layout overlayequated / 
      equatetype=square 
      xaxisopts=(label="投薬前(IU/L)" griddisplay=on) 
      yaxisopts=(label="投薬後(IU/L)" griddisplay=on); 

      scatterplot x=before y=after / 
         markerattrs=(symbol=circlefilled); 

      lineparm x=0 y=0 slope=1 / 
         clip=true lineattrs=(color=red) ; 

   endlayout; 
endgraph; 
end; 
run;
clip=true

直線がデータの範囲内に収まりました。