DirichletRegの使い方

多項の割合の回帰(あるサンプルにa,b,c…がどれくらいの割合で含まれているか?を別の値から推定する)をすることになった。

 
北大の久保先生は「出来れば割合の回帰はDirichlet分布とかを使わないで(つまり割り算をやめて)、階層モデルでやったほうがいい」とおっしゃっていて、http://hosho.ees.hokudai.ac.jp/~kubo/ce/EcoSj2013.html
 
でも、割り算を避けられないケースとして
・計器の出力が割り算(何かの相対値)になっているケース
などをあげておられるのだけれども、私のデータはまさにそれにあたるので、やらないといけない(涙)
古くから「割合」の推定の研究はいろいろあるみたいなんだけども、とにかく簡便にやるならこれじゃないか?と思い、
勉強しています。
 
 
ステップ1)DR_data():データの成型
【使い方】
以下のような感じ
AL<-DR_data(ArcticLake[,1:3])
 
【(大事そうな)オプション】
  • Y:matrixかdata.frame。割合のデータ
  • trafo:論理値か実数。変数変換は、極端な0や1の値をさけるのに使える。詳しくはDetailsへ。Tureだったら”変換実施”、Falseなら”変換抑制”。0とか1とかの値が入ってるデータでsuppressすると、エラーの原因になりがち。もしこの値が実数なら、それを閾値に使う、つまり、Yのうちy<trafoやy>(1-trafo)のときに変換を実施するよ。デフォルト値はsqrt(.Machine$double.eps)、つまり、そのPCで取り扱える最小値の二乗(まぁ0と1をよけるってことか)
  • base:再パラメーター化モデルで使われるbaseコンポーネントデフォルト値は1
  • norm_tol:数値的な正確性によっては、Yの行の合計が1でないこともある。デフォルト値はsqrt(.Machine$double.eps)で、1とだいたい等しいことをテストするために使うトレランス(許容範囲)をあらわす。

【詳細】

  • Yの行毎の合計が1でないときには、normalizationが実施される(それぞれの行の値をその行の合計で割る。warningメッセージが出ます)ある
  • ある一行にNAが入っていたら、その行全部をNAにする。ベータ分布は[0,1]の区間の値を持つひとつのベクトルとして提供されるものだから。
  • trafo:ベータ分布が仮定されていることでメッセージが出力されるのでこの仮定にはチェックが必要。
  • もしtrafo=trueで実行されたら、Smithson and Verkuilen(2006)で提案された変換が実施される。Y*=[y(n-1)+1/2]/n ここでnはYの観察値の数。(この変換はbetaregにも利用されてる。)次元の数が多ければベータ分布はディリクレ分布になるのでY*=[y(n-1)+1/d]/nに。

(つづく)