作りたいグラフ
みどりぼん(データ解析のための統計モデリング入門)にあるグラフ。
コード
以下のようにすればかける。
# y用の関数
logL <- function(m) sum(dpois(data, m, log = TRUE))
# xデータ
lambda <- seq(2, 5, 0.1)
# プロット
plot(lambda, sapply(lambda, logL), type = "l")
# 最大値に該当するxを抽出
likelihood.max.x <- lambda[which.max(sapply(lambda, logL))]
# 最大値を抽出
likelihood.max.y <- max(sapply(lambda, logL))
# 最大値のプロット
points(likelihood.max.x,likelihood.max.y, pch=4)
# x軸と垂直な破線
abline(v=likelihood.max.x, lty=2)
# 矢印
arrows(4.0, -115, likelihood.max.x, -121)
# テキスト
text(4.1, -113, expression(hat(lambda)))
# shapeのインストールおよびインポート
install.packages("shape")
library(shape)
# y用の関数
logL <- function(m) sum(dpois(data, m, log = TRUE))
# xデータ
lambda <- seq(2, 5, 0.1)
# プロット
plot(lambda, sapply(lambda, logL), type = "l")
# 最大値に該当するxを抽出
likelihood.max.x <- lambda[which.max(sapply(lambda, logL))]
# 最大値を抽出
likelihood.max.y <- max(sapply(lambda, logL))
# 最大値のプロット
points(likelihood.max.x,likelihood.max.y, pch=4)
# x軸と垂直な破線
abline(v=likelihood.max.x, lty=2)
# 矢印
Arrows(4.0, -115, likelihood.max.x+0.1, -122+1, arr.type = "triangle")
# テキスト
text(4.1, -113, expression(hat(lambda)))
説明(shapeパッケージを使わないバージョン)
# 最大値に該当するxを抽出
likelihood.max.x <- lambda[which.max(sapply(lambda, logL))]
# 最大値を抽出
likelihood.max.y <- max(sapply(lambda, logL))
which.maxは最大値に該当するインデックスを返す[1]。
最大値になっているxの値を求めるたいので、xのデータであるlambdaのインデックスをwhich.maxで指定すれば良い。
maxは最大値を返すので、そのまま代入すれば良い。
abline(v=likelihood.max.x, lty=2)
abline(v=x)またはabline(h=y)でx軸に垂直または水平に直線が引ける[2]。
arrows(4.0, -115, likelihood.max.x, -122)
arrowsは(始点x, 始点y, 終点x, 終点y)の順[3]。
text(4.1, -113, expression(hat(lambda)))
テキストはtext(x, y, 内容)。今回はハットをつけてたλを出力したかったのでexpressionを用いている[4]。
これで上記のプロットが出力される。
矢印がダサいのでライブラリをインポートしてそれっぽく見せてみる。
説明(shapeを使うバージョン)
install.packages("shape")
library(shape)
外部ライブラリを使うためにinstall.packagesを使ってインストールし、libraryを使って呼び出す[5]。
Arrows(4.0, -115, likelihood.max.x+0.1, -122+1, arr.type = "triangle")
shapeを使った矢印は最初が大文字のArrowsを使えば良い。arr.typeで"triangle"を指定すればそれっぽい矢印になる。(詳細はshapeのマニュアル[6]を参照。)
また、今回の例では、"矢印が棒に三角形が組み合わさって矢印になっている"と考えた時の、棒の座標を指定している。
そこに三角形がたされるので、矢印で指している座標がずれてしまう。
そのために座標を微調整する必要があるので注意が必要。
参考文献
[1] https://qiita.com/stkdev/items/6aba2c1db2fa056170ae
[2] http://d.hatena.ne.jp/myopomme/20111222/1324551313
[3] http://cse.naro.affrc.go.jp/takezawa/r-tips/r/51.html
[4] https://stats.biopapyrus.jp/r/graph/expression.html
[5] https://stats.biopapyrus.jp/r/basic/package.html
[6] https://cran.r-project.org/web/packages/shape/shape.pdf