local変数の面目躍如たる瞬間だと思いますが、
回帰式の係数をグラフ中にうまく表示させる方法をシェアします.
簡単です.
Stataに内蔵されているデータセット ”auto.dta” を使っていきます.
回帰式の係数を取り出すときに、
local b=_b[weight]
とやってしまうと桁数が多すぎてしまい、見た目に美しくありません.
なので、桁数を限定します.
小数第二位までとする場合、係数の前に
“%3.2f”
などと置くことによって表示できます.
このときの「3」は、数値文字が(コンマも入れて)合計何文字になるかを表していて、
出力の際に小数点の位置を揃えるのに使うと便利です.
“f” はfix,つまり、ゼロがでてもそのまま表示させるよ、ということになります.
ゼロを消したい場合には “g” とすればいいですが、一般的にはfを選ぶでしょう.
sysuse auto, clear regress price weight local B: dis %3.2f _b[weight] local C: dis %3.2f _b[_cons] disp “Y = `B’x + `C'” twoway (scatter price weight)||(lfit price weight), legend(off) /* */ note(“Y = `B’x + `C'”) ytitle(“Price”) |
この場合のnoteは脚注で、欄外に小さく表示されますが、
もちろんlegendのところに式を表示させてもいいと思います.
その場合には、
legend(label(2 “Y = `B’x + `C'”))
のように表記します.
labelの二番目、というのはtwowayの式の二つ目、と言う意味です.
1に何も指定しなければデフォルトでtwowayの1つめの式のアウトカム変数、
つまり”price”がラベルで表示されます.
regress price weight local B: dis %3.2f _b[weight] local C: dis %3.2f _b[_cons] disp “Y = `B’x + `C'” twoway (scatter price weight)||(lfit price weight), /* */ legend(label(2 “Y = `B’x`C'”)) ytitle(“Price”) |
※埋め込んだ式のy切片が負の値だったので、正符号を除去
Legendの位置をグラフフィールドにしたい場合
legendオプションは、内容と位置に関する情報を格納することになっており、
legend([contents] [location])
という構造になっています.
位置をグラフフィールド内にするときは”ring(0)”をこの位置情報に入れます.
なおかつlegendの位置をどこにするかを決める場合、
position(#)
として#に0から12まで時計回りに振っていきます.
legend(label(2 “Y = `B’x`C'”) ring(0) position(5))
として、グラフフィールド内右下に配置してみましょう.
regress price weight local B: dis %3.2f _b[weight] local C: dis %3.2f _b[_cons] disp “Y = `B’x + `C'” twoway (scatter price weight)||(lfit price weight), /* */ legend(label(2 “Y = `B’x`C'”) ring(0) position(5)) ytitle(“Price”) |
legendではなく、グラフの直線のそばに配置したい場合
この場合は、”text” optionを使います.
text(y x “式”)
regress price weight local B: dis %3.2f _b[weight] local C: dis %3.2f _b[_cons] disp “Y = `B’x + `C'” twoway (scatter price weight)||(lfit price weight), legend(off) /* */ text(5000 4500 “Y = `B’x`C'”) ytitle(“Price”) |
と表記します.Yとxのところにはそれぞれ、y軸とx軸の値を入れるとそのテキストの中心部の座標となります.
まとめ
・グラフ中に回帰式を入れるときはマクロを駆使!
・回帰式の入れ方は、note, legend, textで場面に応じて使い分けを.
コメント
[…] おや、これはどうしたことでしょうか.桁数が増えてしまっています.こんな時は少し前の記事を参照してもらって、local macroに桁数を絞って格納してしまいましょう. […]