📖

LiNGAMで因果探索する際の概観分析について調査した(正規性)

に公開

はじめに

こんにちは、因果探索アプリケーション Causalas 開発の井手です。

今回は、因果探索アルゴリズムの一つであるLiNGAMを用いた因果探索における、概観分析について調査しました。
LiNGAMに関連する論文を中心に調査を行い、因果探索の際に共通して実施される概観分析の項目として、正規性の分析方法についてまとめましたので紹介します。

正規性

LiNGAMは非ガウス性を仮定とした因果探索手法です。
そのため、多くの論文では、因果探索を実行するデータセットの各変数が正規分布に従うかどうかを検証し、LiNGAMの前提条件を満たしているかを確認しています。

ヒストグラム

正規性を確認する方法としては、ヒストグラム正規Q-Qプロットを描画して視覚的に分析する方法が一般的です。

ヒストグラムによる分析では、各変数のヒストグラムを描画したあと、正規分布に近い形状をしているかどうかを確認します。
また、以下のようにヒストグラムに正規分布の理論曲線を重ね合わせると、データの分布がどの程度正規分布に近いかを視覚的に分析することができます。

import numpy as np
import pandas as pd
import scipy.stats as stats
import seaborn as sns
import matplotlib.pyplot as plt
import random
random.seed(0)

# 正規分布に従うデータを生成
normal_data = np.random.normal(size=1000)
# 非正規分布(一様分布)のデータを生成
non_normal_data = np.random.uniform(size=1000)

# 正規分布のヒストグラムをプロット
plt.figure(figsize=(8, 3))
plt.subplot(1, 2, 1)
_, bins, _ = plt.hist(normal_data, bins=30, alpha=0.5, color='b')

# 正規分布の理論曲線をプロット
mu, sigma = stats.norm.fit(normal_data)
normal_line = stats.norm.pdf(bins, mu, sigma) * len(normal_data) * (bins[1] - bins[0])
plt.plot(bins, normal_line, 'r--')

# ラベルを設定
plt.title('Normal Distribution Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')

# 非正規分布(一様分布)のヒストグラムをプロット
plt.subplot(1, 2, 2)
_, bins, _ = plt.hist(non_normal_data, bins=30, alpha=0.5, color='b')

# 正規分布の理論曲線をプロット
mu, sigma = stats.norm.fit(non_normal_data)
normal_line = stats.norm.pdf(bins, mu, sigma) * len(non_normal_data) * (bins[1] - bins[0])
plt.plot(bins, normal_line, 'r--')

# ラベルを設定
plt.title('Uniform Distribution Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()

正規Q-Qプロット

正規Q-Qプロットは、データが正規分布に従う場合の分位点(quantiles)と、実際のデータの分位点を比較するプロットです。
プロット上の点が対角線(理論的な正規分布線)に沿って直線的に並んでいるかどうかを確認することで、データの分布がどの程度正規分布に近いかを視覚的に分析することができます。

# 正規分布のデータを生成
normal_data = np.random.normal(size=1000)
# 非正規分布(一様分布)のデータを生成
non_normal_data = np.random.uniform(size=1000)

# 正規Q-Qプロットを作成
plt.figure(figsize=(8, 3))
plt.subplot(1, 2, 1)
stats.probplot(normal_data, dist='norm', plot=plt)
plt.gca().get_lines()[0].set_alpha(0.5)

# ラベルを設定
plt.title('Normal Q-Q Plot for Normal Distribution')

# 正規Q-Qプロットを作成
plt.subplot(1, 2, 2)
stats.probplot(non_normal_data, dist='norm', plot=plt)
plt.gca().get_lines()[0].set_alpha(0.5)

# ラベルを設定
plt.title('Normal Q-Q Plot for Uniform Distribution')
plt.show()

例えば以下の論文では、正規性の検証のために正規Q-Qプロットを確認しています。

サッカースクールにおける楽しさに関するアンケート分析と因果探索[1]

こちらの研究では、サッカースクールに通う小学生を対象にアンケート調査を行い、サッカースクールの「楽しさ」との因果関係がある練習内容が何かを分析しています。
データセットの各変数(アンケート項目)の正規Q-Qプロットを描画し、正規分布に従うとはいえないと結論付けています。

Shapiro-Wilk検定

一般的なデータ分析では、ヒストグラムなどの視覚的な正規性の確認方法で十分な場合が多いです。しかし、ヒストグラムでは判断しづらいデータや、定量的な評価が必要な場合には、Shapiro-Wilk検定などの正規性検定が実施されます。

Shapiro-Wilk検定はデータが正規分布に従うかどうかを確認する検定手法です。
帰無仮説(データが正規分布に従う)が棄却された場合、データは正規分布に従わないと判断されます。

# 正規分布のデータを生成
normal_data = np.random.normal(size=1000)
# 非正規分布(一様分布)のデータを生成
non_normal_data = np.random.uniform(size=1000)

# Shapiro-Wilk検定
shapiro_normal = stats.shapiro(normal_data)
shapiro_non_normal = stats.shapiro(non_normal_data)

# 結果を表示
print(f"正規分布データのp値 = {shapiro_normal[1]:.5f}") # 正規分布データのp値 = 0.90462
print(f"非正規分布データのp値 = {shapiro_non_normal[1]:.5f}") # 非正規分布データのp値 = 0.00000

例えば先ほど紹介したサッカースクールの論文[1:1]では、正規Q-Qプロットに加えてShapiro-Wilk検定を実施しています。有意水準を0.01に設定した結果、データセットの各変数の検定結果のp値が0.01を下回るため、正規分布に従うとはいえないと結論付けています。

正規分布に従うと考えられる場合

データセット内の変数が正規分布に従うかどうかを確認した結果、ある変数が正規分布に従うと判定された場合には、以下のアクションが考えられます。

そのままLiNGAMを実行

観測データは、正規分布に似ているとしても完全な正規分布には一致しないため、非正規分布として扱っても問題ない場合があります。
また、正規分布に従う変数だけでは因果関係の方向を定めることができませんが、片方に非正規分布に従う変数が含まれる場合は方向を定めることができます。
そのため、正規分布に従う変数がある場合でも、一度LiNGAMを試してみることを推奨します。

このようなデータセットでLiNGAMを実行する際には、ブートストラップ法を使用して各エッジの確率を計算することで、統計的信頼性を評価できます。
因果が推定できない部分は、ブートストラップの結果が不安定になり統計的信頼性が低いと判断されますので、正規分布に従う変数を含めても問題ないか確認できます。

変数を除外

正規分布に従う変数をデータセットから除外してLiNGAMを実行することも可能です。ただし、その変数が未観測共通原因となるリスクがあります。
ドメイン知識などに基づき、その変数が未観測共通原因にはならないと判断できる場合には、変数を除外してLiNGAMを実行することが有用です。
また、未観測共通原因があることを仮定した因果探索アルゴリズムを実行することも一つの方法です。
未観測共通原因を仮定したアルゴリズムには、BottomUpParceLiNGAM[2]RCD[3]CAM-UV[4]などがあります。

正規分布と非正規分布を仮定したアルゴリズムを使用

通常のLiNGAMアルゴリズムが適さないと判断される場合は、他の因果探索アルゴリズムを検討する必要があります。
例えば、Pythonのlingamパッケージには含まれていませんが、正規分布と非正規分布の混合モデルを仮定した因果探索アルゴリズムも存在します。

Causal discovery of linear acyclic models with arbitrary distributions[5]

PCアルゴリズムのような条件付き独立性テストに基づく手法と、ICA-LiNGAMのようなICA(独立成分分析)に基づく手法を組み合わせることで、正規分布と非正規分布が混在するデータから因果グラフを推定します。

おわりに

本記事では、LiNGAMを適用する際の概観分析について論文を調査しました。データの正規性の概観分析による対応は、LiNGAMに関連する論文の中でも特に出現頻度が高く重要な分析であることが分かります。これらの分析を行うことで、より信頼性の高い因果関係の推定が可能になります。

脚注
  1. 谷岡 広樹, 佐藤 充宏, 柘植 竜治. サッカースクールにおける楽しさに関するアンケート分析と因果探索. 情報処理学会論文誌デジタルプラクティス, 4(3): 74-87, 2024. ↩︎ ↩︎

  2. T. Tashiro, S. Shimizu, A. Hyvärinen, T. Washio. ParceLiNGAM: a causal ordering method robust against latent confounders. Neural computation, 26(1): 57-83, 2014. ↩︎

  3. T. N. Maeda and S. Shimizu. RCD: Repetitive causal discovery of linear non-Gaussian acyclic models with latent confounders. In Proc. 23rd International Conference on Artificial Intelligence and Statistics (AISTATS2020), Palermo, Sicily, Italy. PMLR 108:735-745, 2020. ↩︎

  4. T. N. Maeda and S. Shimizu. Causal additive models with unobserved variables. In Proc. 37th Conference on Uncertainty in Artificial Intelligence (UAI). PMLR 161:97-106, 2021. ↩︎

  5. P. O. Hoyer, A. Hyvärinen, R. Scheines, P. Spirtes, J. Ramsey, G. Lacerda, and S. Shimizu. Causal discovery of linear acyclic models with arbitrary distributions. In Proc. 24th Conf. on Uncertainty in Artificial Intelligence (UAI2008), pp. 282-289, Helsinki, Finland, 2008. ↩︎

SCREEN AS 因果探索チーム

Discussion