SAS PlotterでRidgeline plotを作図する

「SAS Plotter」はモダンなグラフを簡単に作成できるグラフマクロパッケージです。 このページではSAS Plotter(ver 0.1 beta) でRidgeline plotを作成する方法を解説します。

github.com

Ridgeline plotとは

Ridgeline plotまたはjoy plotは応答変数の分布をグループごとにプロットする作図手法です。

分布はカーネル密度推定で推定した密度をプロットすることで表現します。 またrugplotを併用することで個別データの可視化も可能です。

Rではggplot2を使った作図例が多数紹介されています。

r-graph-gallery.com

Ridgelineマクロの使用方法

SAS Plotterでは%Ridgelineマクロを使用することで作成できます。 さらに各種記述統計量の表示も可能です。

Input data

key 変数 変数タイプ
1 カテゴリ変数 数値または文字列
2 群変数 数値または文字列
応答変数 数値

群変数は任意です。群変数とカテゴリ変数は文字列型でも動作しますが、その場合はテキストの昇順でグループの表示順を決定します。 順番を定義したい場合はフォーマットを適用した数値変数を使用することを推奨します。

文法

ods graphics / < graphics option >  ;
     ods listing gpath=< output path > ;

     %ridgeline(
        data=,
        x=,
        y=,
        group=None,
        xlabel=x,
        ylabel=y,
        yticks=,
        cat_iv=1.2,
        gridsize=401,
        bw_method=sjpi,
        bw_adjust = 1,
        legend=False,
        fill_density=True,
        stat=None,
        rug=False,
        ruglength=1,
        meancolor=red,
        qcolor=white,
        iqrcolor=cx89D0F5);

パラメータ

  • data : (必須)

    入力データ。keep, rename, whereオプションを併用できます。

  • x : (必須)

    カテゴリ変数

  • y : (必須)

    応答変数

  • group : (任意)

    群変数。xオプションと同じ変数を指定すると、各グループはそれぞれ別の色で塗り分けられます。 指定しない場合はすべてのオブジェクトは同じ色になります。

    デフォルト=None

  • xlabel : (任意)

    カテゴリ軸のラベル。デフォルトは「x」。以下のように設定するとラベルは非表示となります。

    xlabel=,

  • ylabel : (任意)

    応答変数軸のラベル。デフォルトは「y」。以下のように設定するとラベルは非表示となります。

    ylabel=,

  • yticks : (必須)

    応答変数軸の目盛りを指定できます。半角スペースで区切られた数値リストを指定してください。数値は昇順で指定する必要があります。

    (例)yticks = 10 20 30 40,

  • cat_iv : (任意)

    各カテゴリの間隔。デフォルトは1.2。1未満にするとグラフ同士が重なる可能性があります。

  • gridsize : (任意)

    KDEのグリッド数。デフォルトは401(proc kdeのデフォルト値)

  • bw_method : (任意)

    KDEのバンド幅推定方法を指定します。デフォルトはsjpi(proc kdeのデフォルト値)。

    利用可能な推定方法は以下の通りです。

    • sjpi (Sheather-Jones plug-in)
    • snr (simple normal reference)
    • snrq (simple normal reference that uses the interquartile range)
    • srot (Silverman\'s rule of thumb)
    • os (oversmoothed)
  • bw_adjust : (任意)

    バンド幅のファクター。この値を大きくすると密度はより滑らかになります。デフォルトは1。

  • legend : (任意)

    Trueを指定すると凡例を表示します。groupオプションを"None"を指定するとこの引数は無視されます。 デフォルトはFalse。

  • fill_density : (任意)

    Trueを指定すると密度プロットの曲線下を塗りつぶします。デフォルトはTrue。

  • stat : (任意)

    記述統計量を表示します。使用可能なキーワードは以下の通りです。

    • mean
    • q1
    • q2
    • q3
    • iqr
    • None (何も表示しない)

    複数のキーワードを指定できます。その場合は半角スペースで区切って指定してください。

    (例) stat = mean iqr,

    デフォルトはmean。

  • rug : (任意)

    Trueを指定するとrugplotを表示します。デフォルトはFalse。

  • ruglength : (任意)

    rugplotの長さを制御します。値を大きくするとrugplotを伸ばします。 rugオプションをFalseに指定した場合はこのオプションは無視されます。 デフォルトは1。

  • meancolor : (任意)

    平均値の色を指定します。statオプションにmeanを指定しない場合無視されます。色はカラー名(例 red)あるいはRGBコード(例.cxffffff)で指定します。 デフォルトはred。

  • qcolor : color keyword (任意)

    パーセンタイル(q1,q2,q3)の色を指定します。statオプションにパーセンタイルを指定しない場合無視されます。色はカラー名(例 red)あるいはRGBコード(例.cxffffff)で指定します。 デフォルトはwhite。

  • iqrcolor : color keyword (任意)

    IQRの色を指定します。statオプションにIQRを指定しない場合無視されます。色はカラー名(例 red)あるいはRGBコード(例.cxffffff)で指定します。 デフォルトはcx89D0F5。

作図例

シンプルなridgeline plot

datasets (ds1)

変数名 詳細
cat A~Jまでの文字
response 数値、応答変数

code :

ods graphics /reset=all height=15cm width=25cm imagename="ridgeline1" imagefmt=svg;
    ods listing  gpath="/home/user/sasuser.v94/image" style=sns_default ;

    %ridgeline(
       data=ds1,
       x=cat,
       y=response,
       group=cat,
       xlabel=,
       ylabel=response,
       yticks=60 65 70 75 80,
       cat_iv=0.7,
       bw_method=srot, 
       stat=None);

output

グループ毎に表示

datasets (ds2)

変数名 詳細
month 月、フォーマットを適用した数値
max_temp 最高気温
region フォーマットを適用した数値 1=Tokyo 2=Naha

code :

  ods graphics /reset=all height=15cm width=25cm imagename="ridgeline_grouped" imagefmt=svg;
    ods listing  gpath="/home/user/sasuser.v94/image" style=sns_default ;

    %ridgeline(
       data=ds2(where=(month in(1:6))),
       x=month,
       y=max_temp,
       group=region,
       xlabel=month,
       ylabel=maximum temperature (°C),
       yticks=0 5 10 15 20 25 30 35 40,
       cat_iv=1.2,
       legend=true,
       stat=None
       );

output

ラグプロットと記述統計量の表示

code :

ods graphics /reset=all height=15cm width=25cm imagename="ridgeline_stat_rug" imagefmt=svg;
    ods listing  gpath="/home/user/sasuser.v94/image" style=sns_default ;

    %ridgeline(
       data=ds2(where=(region=1 and month in(1:6))),
       x=month,
       y=max_temp,
       xlabel=month,
       ylabel=maximum temperature (°C),
       yticks=0 5 10 15 20 25 30 35 40,
       cat_iv=1.2,
       fill_density=False,
       stat=mean q1 q2 q3 iqr,
       rug=True,
       ruglength=3,
       meancolor=red,
       qcolor=black
       );

output