因果推論周辺について調べた。
構造方程式モデルによる因果推論:
因果構造探索に関する最近の発展
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の結果は大きくばらつくはず
ふーむ。。。。