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の結果は大きくばらつくはず

ふーむ。。。。