このブログでは、統計解析ソフトStataのプログラミングのTipsや便利コマンドを紹介しています.
Facebook groupでは、ちょっとした疑問や気づいたことなどを共有して貰うフォーラムになっています. ブログと合わせて個人の学習に役立てて貰えれば幸いです.
皆様、明けましておめでとうございます.今年もよろしくお願いします.
記事の更新が滞ったまま4カ月も放置していました.それでも毎日コンスタントに見に来てくださる方がいるので大変励みになります.できるだけ月2ずつの記事を死守したいと思いますので、よろしくお願いします.
さて、最近グラフについていくつか新しいado fileを見つけましたので、それを少しずつ紹介していきます.まず第1弾として、最近よく見かけるようになったバイオリン図(violin plot)の描き方について解説してみたいと思います.Stataでもこんな風に美しく描くことができますので、ぜひチャレンジしてみてくださいね.
1.バイオリン図について
連続値の分布を表現する方法としては、他にもヒストグラムや箱ひげ図がありますが、それらとバイオリン図はどのように違うのでしょうか?
Violin plotについて、Wikipedia経由でたどり着いたWeb siteに書かれた説明を抜粋します.
A violin plot is a combination of a box plot and a kernel density plot. Specifically, it starts with a box plot. It then adds a rotated kernel density plot to each side of the box plot.
National Institute of Standard Technology
要するにkernel density plotと箱ひげ図のあいの子みたいなやつです.箱ひげ図のように代表値として中央値や四分位範囲がしばしば描かれるのに加えて、kernel density plotによって値の分布をグラフの太さで表現できるので、ボリューム感が伝わりやすいのではないかと思います.
ちなみにkernel density plotとはこんな感じ↓
sysuse auto, clear
twoway (kdensity price) (hist price, fcolor(maroon%50) lcolor(maroon)), ///
graphregion(color(white)) ylabel(,ang(0)) ///
legend(order(1 “Kernel density plot” 2 “Histogram”) col(1) ring(0) pos(1))
(Graph作成のポイントは以前の記事を参照してみてください.Legendの設定方法、軸の設定方法)
さて、ヒストグラムやkernel density plotでは何か特定の値に関して、研究対象者集団全体の分布を表現するのにはよいですが、複数の値の分布や、1つの値であっても複数の群での分布を1つのグラフに収めたい場合には箱ひげ図をよく使用します.
sysuse nlsw88
graph box wage ttl_exp tenure /* 箱ひげ図 */
violinplot wage ttl_exp tenure, vertical /* バイオリン図 */
箱ひげ図でも十分意図は伝わるかもしれませんが、特に値の分布が多峰性であったり、単峰性であっても偏りがある場合にはこちらのほうが正確に伝わりそうです.
直観的なわかりやすさの反面、次の点には留意しておく必要があると思います.
- Kernel density plotによって滑らかに値の分布が描かれるため、実際にはデータが存在しない範囲にもあたかもデータが存在しているかのように見えることがある
- Violin plot内の各kernel density plotの面積は同一ではない.値の範囲が大きかったり、分布が一様だったりすると、kernel density plotの面積が大きく描画される
なので、外れ値を正確に表現するにはあまり向かないかもしれません.
2.Stata ado file “violinplot” をinstallする
Violin plotを作成するためのプログラムは実はいくつか存在しています.このうちの1つの “violinplot” が最近出たばかりなのですが、きれいに作れそうなのでこれを使ってみることにします.
help violin
インストールするための画面がでてきましたので、click here to install してpackageをインストールしてください.
あるいはいきなり、
ssc install violinplot, replace
と入れてもらっても大丈夫です.
無事インストールが終わりましたら、
help violinplot
していただければ細かい使い方に関する説明が表示されます.
ここから先は自分で読めるわい!と思ったアナタ!
ちょっと待ってください.うまく使うためには以下の4つのado filesも同時に使いますので、これらも同時にインストールすることをお忘れなく!
実は私の場合、2つ目のプログラムは古いバージョンがすでに存在していたので、当初うまくインストールができなかったのでした.
どうやら古いのが入っていたみたいで、新しくする必要がありました.
一つ一つ新しいado fileにするのは面倒!ですので、すべてを更新する手段をとりましょう.
adoupdate
これでアップデートが必要なファイルを検索できます.ここでアップデートが必要なものが出てこなければこの時点で更新作業を終了してOKです.
更新が必要なファイルがあれば、
ado update, update
これで待つこと数分でOKです.
3.Violin plotを描いてみる
ここからはサンプルデータを使って実際にグラフを描いてみましょう.
ヘルプ画面を見てみると、オプションがたくさん並んでいて若干読む気が失せるのですが(笑)
- main:主にグラフのレイアウトや全体の調整を行います.具体的には縦横、グラフを重ねる重ねない、群分け、ハーフ&ハーフにするか、といったことを決められます.
- estimation:中央値+四分位範囲がデフォルトですが、パーセンタイル値を指定したり、表示する値の範囲を指定したりすることができます.
- labels:Outcome変数の名前やグループ分けの名前を入れたりすることができます.
- elements:グラフを塗りつぶしたり、各要素(平均値など)を追加したり、あるいは非表示にしたりできます.
- colors:色の指定ができます.ここはきちんと工夫しないとこのプログラムの良さを引き出せません.
- others:他にもおなじみの、Legendや軸の設定などはtwowayのときと共通しています.
Exampleを使いながらごく簡単に解説してみたいと思います.
データ源はNational Longitudinal Study of Young WomenのExample datasetを使っています.
sysuse nlsw88, clear
violinplot wage ttl_exp tenure, vertical label(wage ttl tenure)
今回のデータセットでは変数それぞれにきちんと変数ラベルが付与されているのできれいに表示されるのですが、そうでない場合には自分でこのように指定しないと変数名がそのまま出てきてしまいます.
次に、給料が人種間でどう異なっているかを見てみましょう.群分けには次の2つの方法があります.
violinplot wage, vertical over(race)
violinplot wage, vertical by(race)
1つのグラフ内で表現したい場合には、overで群を分けるようにしましょう.
次の例は、グラフをhalf&halfで使う方法です.
violinplot wage ttl_exp tenure, vertical split(union)
グループに分ける方法は、over, by, split の3つがあり、それに対応してolabel, bylabel, slabel があると思えば覚えやすいですね.
群分けに群分けを重ねるとラベルがウザくなります.
violinplot wage ttl_exp tenure, over(union) colors(Set1)
violinplot wage ttl_exp tenure, over(union) nostack colors(Set1)
ところでこのcolorsオプションですが、その後ろにある”Set1″とは何でしょうか?
それを理解するには、ついでにインストールした、”colorpalette” ado fileを理解する必要があります.
このコマンドは色のセットをいくつか取り揃えていて、それをうまいこと使えば”外さない”色の組み合わせというのを選ぶことができるのです.
colorpalette Set1
色の組み合わせを選ぶ以外にも、トーンを変えたりすることもできます.
colorpalette sb
colorpalette sb muted
violinplot wage, over(industry) colors(sb muted) nobox nowhiskers median(msymbol(o))
少し落ち着いた色味を出してみたい、という調整も自在にできます.
Violin plotを描くだけでなく、周辺的なプログラムの書き方もついでにいろいろと解説してみましたので、参考になれば幸いです.
コメント