関数解読histprior

Bayesian Computation with R: Second Edition (Use R!)

ヒストグラムのように)均等な区間ごとに確率が定義された確率分布の密度を計算する

使用法

histprior(p,midpts,prob)

引数
p:連続型確率変数において,対応する密度を計算する確率変数の値をまとめたベクトル
 以下の例のように,できるだけ細かく設定する。
midpts:各区間の中点をまとめたベクトル
prob:各区間の確率をまとめたベクトル



各pに対応する確率密度をまとめたベクトル

histprior = function (p, midpts, prob)
#関数histpriorの中身
{
    binwidth = midpts[2] - midpts[1]
     #ベクトルmidptsの第2要素と第1要素の差から,
     #1つの区間の長さを求めて,binwidthに代入。
browser()
    lo = round(10000 * (midpts - binwidth/2))/10000
     # 10000 * (midpts - binwidth/2)の小数点以下を四捨五入
     # その後,10000で割り,loに代入。
     #
     # 結局,各区間の下限を求めている。

    val = 0 * p # ベクトルpと同じ長さの0ベクトルを作成(空箱作り)。

    for (i in 1:length(p)) {
        val[i] = prob[sum(p[i] >= lo)]
         # p[i] >= lo
         #  p[i]が各区間の下限以上かどうかを判定
         #  p[i]が第1区間に含まれるなら
         #  TRUE FALSE FALSE.....となる。
         #  p[i]が第2区間に含まれるなら
         #  TRUE TRUE FALSE.....となる。
         # sum(p[i] >= lo)
         #  p[i] >= loが成立する区間の数を集計
         #  p[i]が第1区間に含まれるなら,TRUEは1個だから1
         #  p[i]が第2区間に含まれるなら,TRUEは2個だから2
         # prob[sum(p[i] >= lo)]
         #  引数のprobの第"sum(p[i] >= lo)"要素を出力。
         #  p[i]が第1区間に含まれるなら,prob[1]
         #  p[i]が第2区間に含まれるなら,prob[2]
         #
         # 結局,pの各要素(密度を計算する各点)について,
         # その点を含む区間の確率を密度と定めるということ。
    }

    return(val)#valを出力する。
}


#各区間の中点を設定。
midpts=c(.1,.3,.5,.7,.9)
#各区間の確率を設定。
prob=c(.2,.2,.4,.1,.1)
#密度を計算する各点を設定。
p=seq(.01,.99,by=.0001)

#密度を保存。
histden = histprior(p,midpts,prob)

#(p,histden)を図示。
plot(p,histden,type="l")