LiNGAMモデル(因果推論)
因果推論周辺について調べた。
構造方程式モデルによる因果推論: 因果構造探索に関する最近の発展 http://www.ar.sanken.osaka-u.ac.jp/~sshimizu/papers/BSJ2012_Tutorial_final_web.pdf
非ガウス性を用いた線形非巡回なデータ生成過程部分の発見と同定 https://kaigi.org/jsai/webprogram/2012/pdf/258.pdf
ざっくり書くと、xを確率変数を縦にならべたベクトルとして,非巡回かつ潜在変数なしで、xを並び替えてBを下三角行列、eを非正規分布の確率ノイズとして x=Bx+e とかけるようなモデル。 結局、correlation-faithfulness の仮定がいるのか、チェックはどうするのか、eが非ガウスならOKなのかよく分からなかった。 とりあえず、Rのpcalgというパッケージの中のLINGAMで試してみた。
#1から2 x1=runif(N)-0.5 x2=x1*0.7+runif(N)-0.5 LINGAM(cbind(x1,x2)) $B [,1] [,2] [1,] 0.000000 0 [2,] 1.582669 0 $Adj [,1] [,2] [1,] FALSE TRUE [2,] FALSE FALSE
#2から1 x2=runif(N)-0.5 x1=2*x2+runif(N)-0.5 LINGAM(cbind(x1,x2)) LINGAM(cbind(x1,x2)) $B [,1] [,2] [1,] 0 1.738995 [2,] 0 0.000000 $Adj [,1] [,2] [1,] FALSE FALSE [2,] TRUE FALSE
#1から2へガウスノイズ x1=runif(N)-0.5 x2=x1*1.5+rnorm(N) LINGAM(cbind(x1,x2)) $B [,1] [,2] [1,] 0.000000 0 [2,] 1.845528 0 $Adj [,1] [,2] [1,] FALSE TRUE [2,] FALSE FALSE
ガウスでも多少は当たる!? (上の例で160/200回くらいの正解率)
モデル妥当性のチェックも機械学習のcross-validationみたいなのが無いので、良く分からない。
• ブートストラップ法によるアプローチ: – サンプルサイズが小さいか非ガウス性が小さいかすれば、ブートスト ラップ標本についてのLiNGAMの結果は大きくばらつくはず
ふーむ。。。。