SAS_GTL

SAS PlotterでMirrored histogramを作図する

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

2023/11/1 ver1.1に更新

https://picolabs.jp/sasplotter_usage

Mirrored histogramとは

Mirrored historamとは、2つの変数の分布状況を比較するのに用いられるヒストグラムです。
一方の変数のヒストグラムを反転させることで、ヒストグラム同士が重ならないようになっており、単純にヒストグラムを作成するよりも比較しやすい利点があります。

傾向スコアマッチングはマッチ後の2群の傾向スコアの分布が重なっていることを確認する必要があるため、この作図はよく作成されます。

SASはMirrored histogramを作成する機能はありませんが、SAS Plotterを使用すれば簡単に作成することができます。

Input data

入力データは事前にproc univariateなどで集計したデータが必要です。そのため密度プロットを同時作成することはできません。
ただほとんどの場合ヒストグラムだけあれば十分なはずです。

key変数変数タイプ
1群変数数値
2カテゴリ(水準)変数数値
応答変数数値

群変数はコード値(1,2)にフォーマットを割り当てることで作成します。
カテゴリ変数は離散型である場合はフォーマットを割り当てることを推奨します。

文法

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

%MirroredHist( 
   data=, 
   group=, 
   x=, 
   y=, 
   xticks=None, 
   yticks=, 
   xaxistype=discrete, 
   xlabel=x, 
   ylabel=y, 
   tickfmt=09.9, 
   orient=v, 
   legend=true, 
   barwidth=1, 
   ymargin=1.1, 
   outline=true, 
   palette=sns )

パラメータ

data : (必須)

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

group : (必須)

群変数

x : (必須)

カテゴリ(水準)変数

y : (必須)

応答変数

xticks : (任意)

応答変数軸の目盛りを指定できます。半角スペースで区切られた数値リストを指定してください。数値は昇順で指定する必要があります。
設定しない(None)場合は、データから自動生成されます。デフォルトは”None”。

(例)xticks = 0.25 0.5 0.75 1,

yticks : (必須)

応答変数軸の目盛りを指定できます。半角スペースで区切られた数値リストを指定してください。数値は昇順で指定する必要があります。
数値は正の数でなければなりません。また0が含まれない場合は自動で0を追加します。

(例)yticks = 0.1 0.2 0.3,

xaxistype: (任意)

カテゴリ(水準)軸の軸タイプを指定します。”linear”あるいは”discrete”のいずれかを指定してください。カテゴリ変数が連続変数の場合は”linear”を指定します。
デフォルトは”discrete”

xlabel : (任意)

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

xlabel=,

ylabel : (任意)

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

ylabel=,

ytickfmt: (任意)

応答変数軸のメモリのフォーマットをpictureフォーマット形式で指定します。詳細な設定方法はpictureフォーマットのSAS helpをご覧ください。
デフォルトは”09.9″(小数第1位まで表示します。)

orient : (任意)

作図の方向を指定します。v=垂直方向 h=水平方向。
デフォルトはv。

legend : (任意)

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

barwidth : (任意)

棒グラフの幅を指定します。0から1の数値を設定します。1に設定すると棒グラフの間のスペースがなくなります。 デフォルトは1。

ymargin: (任意)

応答変数軸のマージン係数を指定します。1以上の数値を指定する必要があります。数値を大きくするとマージンは広くなります。
デフォルトは1.1。

outline: (任意)

枠線の表示を切り替えます。デフォルトはTrue。

pallete : キーワード (オプション)

塗り、ライン、マーカーのカラーパレット、以下のパレットが利用可能です。デフォルトはSNS(seabornのデフォルトパレット

  • SAS
  • SNS (Seaborn)
  • STATA
  • TABLEAU

作図例

垂直方向のヒストグラム

proc univariateでヒストグラムの集計データを作成し、Mirrored histogramを作成します。


ods select histogram;
proc univariate data=sashelp.heart;
var diastolic systolic;
histogram diastolic systolic /
outhistogram=histo
vscale=percent
midpoints=50 to 400 by 5;
run;

proc format;
value catf
1="Diastolic"
2="Systolic";
run;

data graph_data;
set histo;
if _VAR_="Diastolic" then cat=1;
if _VAR_="Systolic" then cat=2;
format cat catf.;
keep cat _midpt_ _obspct_;
run;

%mirroredhist(
data=graph_data,
group=cat,
x=_midpt_,
y=_obspct_,
xaxistype=linear,
xticks=%str(50 100 150 200 250 300),
yticks=%str(5 10 15 20 25),
xlabel=blood pressure,
ylabel=percent
);

Y軸の目盛りの桁数を小数第2位まで表示するにはytickfmtパラメータを以下のように設定します。

ytickfmt=09.99
実行結果

水平方向のヒストグラム(バラフライチャート)

orientパラメータをhに設定すると水平方向のヒストグラムを作成できます。バタフライチャートとも呼ばれています。

%mirroredhist(
data=graph_data,
group=cat,
x=_midpt_,
y=_obspct_,
xaxistype=linear,
xticks=%str(50 100 150 200 250 300),
yticks=%str(5 10 15 20 25),
xlabel=blood pressure,
ylabel=percent,
orient=h
);
実行結果

outline=Falseに設定すると、棒グラフの枠線は非表示になります。ただしゼロラインはそのままです。

実行結果

カテゴリ(水準変数)が離散的な区分の場合はxaxistype=discreteに設定します。これはデフォルトの設定であるため省略可能です。
discreteに設定し、orient=hと設定した場合はカテゴリ軸は反転します。

/*patients of COVID-19 in Tokyo*/
/* dataset difinition */
/* agegrp : category of patient's age */
/* count: number of COVID-19 patients */

%mirroredhist(
data=dat2,
group=sex,
x=agegrp,
y=count,
xlabel=age,
ylabel=number of patients,
xaxistype=discrete,
yticks=%str(0 50000 100000 150000 200000 250000 300000),
ytickfmt=%str(000,009),
orient=h
);
実行結果