SAS

GTLで密度プロットを作図する densityplotステートメント

密度プロットでデータの分布形状を確認することがあります。GTLは密度プロットを作成するステートメントがあるので、
入力データから直接密度を推定し可視化することが可能です。

densityplotステートメント

densityplotステートメントは入力データからKDE(カーネル密度推定)または正規分布近似を用いてデータの確率密度関数を推定しプロットするステートメントです。

densityplot < variable > / kernel(); 
densityplot < variable > / normal();

normalの場合は正規分布のパラメータ(muとsigma)を指定することも可能のようです。理論上予想される密度関数をプロットするときに使えそうですね。

kernelの場合ですとバンド幅を設定することもありそうですが、特に指定しなければバンド幅は自動最適化されるようなので、パラメータ設定は基本的には不要かと思います。

作図例

ペンギンの翼の長さをヒストグラムと密度プロットでプロットします。密度プロットはkdeを使用します。ヒストグラムの代わりにrugplotを使用するのも良いと思います。

proc template; 
define statgraph densityplot; 
begingraph; 
   layout overlay / 
      xaxisopts=(griddisplay=on gridattrs=(color=lightgray pattern=dot)) 
      yaxisopts=(griddisplay=on offsetmin=0.05 offsetmax=0.05 gridattrs=(color=lightgray pattern=dot));

      histogram flipper_length_mm / 
         scale=percent; 

      densityplot flipper_length_mm/ kernel(); 
   endlayout; 
endgraph; 
end; 
run; 

proc sgrender template=densityplot data=penguins; 
run;
密度プロットの作成例

箱ひげ図と併用する

密度プロットだけだと要約統計量がわからないので、プロットエリアを分割して箱ひげ図を作成します。またgroupオプションを利用してペンギンの種類ごとにプロットします。
密度プロットはnormalを使用します。

proc template; 
define statgraph densityplot2; 
begingraph; 

layout lattice / rows=2 rowweights=(0.7 0.3) 
   columndatarange=union; 

   columnaxes; 
      columnaxis / label="Flipper length (mm)"; 
   endcolumnaxes; 

   /* 密度プロット */ 
   layout overlay / 
      xaxisopts=(griddisplay=on gridattrs=(color=lightgray pattern=dot)) 
      yaxisopts=(griddisplay=on offsetmin=0.05 offsetmax=0.05 
                 gridattrs=(color=lightgray pattern=dot)); 

      densityplot flipper_length_mm/ normal() 
         group=species name="dens"; 
   endlayout; 

   /* 箱ひげ図 */ 
   layout overlay / ; 
      boxplot y=flipper_length_mm / 
         group=species 
         grouporder=reversedata 
         orient=horizontal 
         groupdisplay=cluster; 
   endlayout; 

   sidebar / align=bottom spacefill=false; 
      discretelegend "dens" ; 
   endsidebar; 
endlayout; 
endgraph; 
end; 
run; 

proc sgrender template=densityplot2 data=import; 
run;
箱ひげ図との同時表示