MENU

【無料プレゼント付き】学会発表・論文投稿に必要な統計を最短で学ぶことができる無料メルマガ

Rで実践!構造方程式モデリング:複雑な関係性を解き明かす強力なツール


構造方程式モデリング(SEM)は、社会科学、心理学、マーケティングなど、多岐にわたる分野で活用されている統計分析手法である。観測されたデータから、直接観測できない潜在的な変数間の因果関係や複雑なパスを統計的に推定・検定することが可能である。

本ブログ記事では、SEMの基本的な概念から、統計解析ソフトウェアRを用いた具体的な分析例、そして結果の解釈までを分かりやすく解説する。


>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

目次

構造方程式モデリング(SEM)の概要

SEMは、因子分析、パス解析、回帰分析などを組み合わせた、より包括的な分析手法と考えることができる。その最大の特徴は、潜在変数(直接測定できない概念、例えば「知能」」や「顧客満足度」など)をモデルに組み込むことができる点である。潜在変数は、複数の観測変数(実際に測定できるデータ、例えばテストの点数やアンケートの回答)によって測定される。

SEMのモデルは、通常、以下の要素で構成される。

  • 観測変数(Observed Variables / Manifest Variables): 実際に測定されるデータ。
  • 潜在変数(Latent Variables): 直接測定できないが、観測変数を通して推定される概念。
  • パス(Paths): 変数間の関係性を示す矢印。一方的な矢印は因果関係を、両方向の矢印は相関関係を示す。
  • 誤差項(Error Terms): 観測変数や内生潜在変数の測定誤差や、モデルで説明できない部分を表す。

SEMを用いることで、以下の分析が可能となる。

  • 複数の変数がどのように相互作用し、ある結果に影響を与えるかを視覚的に表現し、統計的に評価する。
  • 測定誤差を考慮に入れた分析を行う。
  • モデル全体の適合度を評価し、データとの整合性を確認する。

具体例:学力と家庭環境の関係

ここでは、架空のデータを用いて、SEMの具体例を見ていく。我々の目的は、「家庭環境」が「学習意欲」に影響を与え、その「学習意欲」が「学力」に影響を与えるという仮説を検証することである。

本例では、以下のように変数を設定する。

  • 潜在変数:
    • 家庭環境: 「親の教育水準」「家庭内学習時間」「教育投資」という観測変数で測定されると仮定する。
    • 学習意欲: 「宿題への取り組み」「授業への参加度」「自主学習時間」という観測変数で測定されると仮定する。
    • 学力: 「国語の点数」「数学の点数」「理科の点数」という観測変数で測定されると仮定する。
  • パス:
    • $ \text{家庭環境} \rightarrow \text{学習意欲} $
    • $ \text{学習意欲} \rightarrow \text{学力} $

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

具体例のR計算例

RでSEMを行うには、lavaanパッケージが非常に便利である。まずは、lavaanパッケージをインストールし、読み込む。

R スクリプト例:

# install.packages("lavaan") # まだインストールしていない場合は実行
library(lavaan)

# サンプルデータの作成(架空のデータである)
set.seed(123)
n <- 200 # サンプルサイズ

# 相関のあるデータを生成するための関数
generate_correlated_data <- function(n, means, sds, cor_matrix) {
    # 多変量正規分布から相関のあるデータを生成
    library(MASS)
    data <- mvrnorm(n, mu = means, Sigma = cor_matrix * outer(sds, sds))
    return(data)
}

# 相関行列の定義(より現実的な相関構造)
cor_matrix <- matrix(c(
    # parent_edu, home_study_time, edu_investment, homework_effort, class_participation, self_study_time, japanese_score, math_score, science_score
    1.0, 0.3, 0.4, 0.2, 0.1, 0.2, 0.3, 0.2, 0.2, # parent_edu
    0.3, 1.0, 0.5, 0.4, 0.3, 0.6, 0.4, 0.3, 0.3, # home_study_time
    0.4, 0.5, 1.0, 0.3, 0.2, 0.4, 0.3, 0.2, 0.2, # edu_investment
    0.2, 0.4, 0.3, 1.0, 0.6, 0.7, 0.5, 0.4, 0.4, # homework_effort
    0.1, 0.3, 0.2, 0.6, 1.0, 0.5, 0.4, 0.3, 0.3, # class_participation
    0.2, 0.6, 0.4, 0.7, 0.5, 1.0, 0.5, 0.4, 0.4, # self_study_time
    0.3, 0.4, 0.3, 0.5, 0.4, 0.5, 1.0, 0.7, 0.6, # japanese_score
    0.2, 0.3, 0.2, 0.4, 0.3, 0.4, 0.7, 1.0, 0.6, # math_score
    0.2, 0.3, 0.2, 0.4, 0.3, 0.4, 0.6, 0.6, 1.0 # science_score
), nrow = 9, byrow = TRUE)

# 平均値と標準偏差の設定
means <- c(60, 30, 50, 70, 65, 40, 75, 70, 68)
sds <- c(10, 5, 8, 8, 7, 6, 10, 9, 8)

# 相関のあるデータを生成
data_raw <- generate_correlated_data(n, means, sds, cor_matrix)

# データフレームに変換
data_sem <- data.frame(
    parent_edu = round(data_raw[, 1]),
    home_study_time = round(data_raw[, 2]),
    edu_investment = round(data_raw[, 3]),
    homework_effort = round(data_raw[, 4]),
    class_participation = round(data_raw[, 5]),
    self_study_time = round(data_raw[, 6]),
    japanese_score = round(data_raw[, 7]),
    math_score = round(data_raw[, 8]),
    science_score = round(data_raw[, 9])
)

# データの確認
print("データの基本統計:")
print(summary(data_sem))
print("\n相関行列:")
print(round(cor(data_sem), 3))

# 構造方程式モデルの定義
# =~ は潜在変数を観測変数で測定することを示す(測定モデル)
# ~ はパス(回帰関係)を示す(構造モデル)
model_syntax <- "
  # 測定モデル(潜在変数のスケールを設定)
  Household_Environment =~ 1*parent_edu + home_study_time + edu_investment
  Learning_Motivation =~ 1*homework_effort + class_participation + self_study_time
  Academic_Performance =~ 1*japanese_score + math_score + science_score

  # 構造モデル(パス)
  Learning_Motivation ~ Household_Environment
  Academic_Performance ~ Learning_Motivation
"

# モデルの実行
fit <- sem(model_syntax, data = data_sem)

# 結果の要約
summary(fit, standardized = TRUE)

# 適合度指標の確認
print("\n適合度指標:")
print(fitMeasures(fit, c("cfi", "tli", "rmsea", "srmr")))

# 修正指標の確認(必要に応じて)
print("\n修正指標(上位5件):")
modificationIndices(fit, sort = TRUE)[1:5, ]

このRスクリプトは、構造方程式モデリング(SEM)を使用して教育データの因果関係を分析するものである。

スクリプトの構成

1. データ生成部分(1-40行目)

  • 架空の教育データを生成する
  • 9つの変数を含む相関のあるデータを作成する:
  • 家庭環境:親の教育レベル、家庭学習時間、教育投資
  • 学習意欲:宿題努力、授業参加、自主学習時間
  • 学業成績:国語、数学、理科の得点

2. 構造方程式モデルの定義(41-55行目)

  • 3つの潜在変数を定義する:
  • Household_Environment(家庭環境)
  • Learning_Motivation(学習意欲)
  • Academic_Performance(学業成績)
  • 因果関係の仮説を設定する:
  • 家庭環境 → 学習意欲
  • 学習意欲 → 学業成績

3. モデル分析と結果表示(56-83行目)

  • lavaanパッケージを使用してSEMを実行する
  • 適合度指標を確認する(CFI、TLI、RMSEA、SRMR)
  • 修正指標を表示する(モデル改善のための提案)

分析の目的

このスクリプトは、家庭環境が学習意欲を介して学業成績に影響を与えるという媒介効果モデルを検証することを目的としている。教育研究において、複雑な因果関係を同時に分析できるSEMの実用的な例となっている。


結果解釈

実行結果:

> # 結果の要約
> summary(fit, standardized = TRUE)
lavaan 0.6-19 ended normally after 85 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        20

  Number of observations                           200

Model Test User Model:
                                                      
  Test statistic                                84.844
  Degrees of freedom                                25
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                           Estimate  Std.Err  z-value  P(>|z|)   Std.lv
  Household_Environment =~                                             
    parent_edu                1.000                               4.162
    home_study_tim            0.810    0.174    4.658    0.000    3.371
    edu_investment            1.143    0.253    4.511    0.000    4.758
  Learning_Motivation =~                                               
    homework_effrt            1.000                               6.024
    class_partcptn            0.721    0.080    9.033    0.000    4.340
    self_study_tim            0.738    0.067   10.964    0.000    4.446
  Academic_Performance =~                                              
    japanese_score            1.000                               8.094
    math_score                0.821    0.081   10.082    0.000    6.642
    science_score             0.662    0.071    9.334    0.000    5.362
  Std.all
         
    0.413
    0.732
    0.608
         
    0.807
    0.656
    0.804
         
    0.827
    0.760
    0.693

Regressions:
                         Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  Learning_Motivation ~                                                       
    Hshld_Envrnmnt          1.033    0.230    4.484    0.000    0.714    0.714
  Academic_Performance ~                                                      
    Learning_Mtvtn          0.905    0.116    7.799    0.000    0.673    0.673

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .parent_edu       84.363    9.153    9.217    0.000   84.363    0.830
   .home_study_tim    9.835    1.836    5.357    0.000    9.835    0.464
   .edu_investment   38.581    5.055    7.632    0.000   38.581    0.630
   .homework_effrt   19.391    3.032    6.396    0.000   19.391    0.348
   .class_partcptn   24.903    2.898    8.594    0.000   24.903    0.569
   .self_study_tim   10.793    1.669    6.468    0.000   10.793    0.353
   .japanese_score   30.355    5.599    5.421    0.000   30.355    0.317
   .math_score       32.307    4.612    7.005    0.000   32.307    0.423
   .science_score    31.195    3.873    8.055    0.000   31.195    0.520
    Hshld_Envrnmnt   17.325    6.697    2.587    0.010    1.000    1.000
   .Learning_Mtvtn   17.785    4.070    4.370    0.000    0.490    0.490
   .Acadmc_Prfrmnc   35.805    6.820    5.250    0.000    0.547    0.547

> 
> # 適合度指標の確認
> print("\n適合度指標:")
[1] "\n適合度指標:"
> print(fitMeasures(fit, c("cfi", "tli", "rmsea", "srmr")))
  cfi   tli rmsea  srmr 
0.907 0.865 0.109 0.059 
> 
> # 修正指標の確認(必要に応じて)
> print("\n修正指標(上位5件):")
[1] "\n修正指標(上位5件):"
> modificationIndices(fit, sort = TRUE)[1:5, ]
                     lhs op                 rhs     mi    epc sepc.lv sepc.all
63       homework_effort ~~ class_participation 20.451 11.355  11.355    0.517
53       home_study_time ~~     self_study_time 15.369  4.438   4.438    0.431
26 Household_Environment =~     self_study_time 12.997  0.594   2.471    0.447
33   Learning_Motivation =~      japanese_score  9.411  0.569   3.425    0.350
77            math_score ~~       science_score  9.411 12.233  12.233    0.385
   sepc.nox
63    0.517
53    0.431
26    0.447
33    0.350
77    0.385
> 

このSEM分析の結果の解釈を以下に示す。

モデル適合度の評価

SEMでは、構築したモデルがデータにどれだけ当てはまっているか(適合しているか)を評価する様々な指標がある。

適合度指標

  • CFI = 0.907: 0.90以上で良好な適合とされるため、モデルは適切である
  • TLI = 0.865: 0.90に近い値であり、ほぼ良好な適合である
  • RMSEA = 0.109: 0.10を超えているため、改善の余地がある
  • SRMR = 0.059: 0.08未満で良好な適合である

適合度指標の見方

  • CFI (Comparative Fit Index): 比較適合度指標。0から1の間の値を取り、0.90以上、特に0.95以上であれば良好な適合度と判断される。
  • TLI (Tucker-Lewis Index): タッカー・ルイス指標。CFIと同様に、0.90以上、特に0.95以上であれば良好な適合度と判断される。
  • RMSEA (Root Mean Square Error of Approximation): 近似の二乗平均平方根誤差。0.06以下であれば良い適合度、0.08以下であれば許容できる適合度と判断される。
  • SRMR (Starndardized Root Mean Square Residual): 観測された相関行列とモデルによって推定された相関行列との残差の平均値。モデルとデータのズレを標準化した尺度。0 から 1 の間の値を取り、0.08 以下で、適合度良好と判断される。

潜在変数の測定モデル

家庭環境(Household_Environment)

  • 親の教育レベル: 基準変数(係数1.000)
  • 家庭学習時間: 0.810(標準化係数0.732)
  • 教育投資: 1.143(標準化係数0.608)
  • すべての係数が統計的に有意である(p < 0.001)

学習意欲(Learning_Motivation)

  • 宿題努力: 基準変数(係数1.000)
  • 授業参加: 0.721(標準化係数0.656)
  • 自主学習時間: 0.738(標準化係数0.804)
  • すべての係数が統計的に有意である(p < 0.001)

学業成績(Academic_Performance)

  • 国語得点: 基準変数(係数1.000)
  • 数学得点: 0.821(標準化係数0.760)
  • 理科得点: 0.662(標準化係数0.693)
  • すべての係数が統計的に有意である(p < 0.001)

測定モデルの結果の見方

出力のLatent Variablesセクションでは、潜在変数がそれぞれの観測変数によってどれだけよく測定されているか(因子負荷量)を確認できる。

  • Household_Environment =~ parent_edu + home_study_time + edu_investment のように、各観測変数に対する因子負荷量が表示される。
  • Std.all列の数値が標準化された因子負荷量である。この値が大きいほど、その観測変数が潜在変数をよく測定していると言える。p値が0.05未満であれば、その観測変数が潜在変数に対して統計的に有意に貢献していると判断できる。
因子負荷量の判断基準

因子負荷量も標準化された値(Std.all)で確認することが一般的である。これは、各観測変数が、それが測定しようとしている潜在変数にどれだけ強く関連しているか、つまり、その潜在変数をどれだけよく反映しているかを示す。

因子負荷量の判断基準は、研究分野や潜在変数の性質によって異なるが、一般的には以下の目安が用いられる。

  • 0.70以上: その観測変数が潜在変数を非常に強く反映していると見なされる。理想的な値とされる。
  • 0.50~0.69: 潜在変数を適切に反映していると見なされる。許容範囲とされることが多い。
  • 0.30~0.49: 潜在変数との関連性は示唆されるが、その反映度はやや弱いと見なされる。モデルによっては許容される場合もあるが、慎重な検討が必要である。
  • 0.30未満: その観測変数が潜在変数を十分に反映していない可能性が高いと判断される。通常、モデルからの削除や、その観測変数の再検討が推奨される。

例えば、「学習意欲」という潜在変数に対して、「自主学習時間」の因子負荷量(標準化係数)が0.804であるので、自主学習時間が学習意欲を非常に良く反映していると言える。一方で、例えば、因子負荷量が0.20などとても低い項目があれば、その観測変数は学習意欲を十分に測定できていない可能性があるため、モデルの再検討が必要かもしれない。

因子負荷量は、測定モデルの妥当性を評価する上で非常に重要な指標である。高い因子負荷量を持つ観測変数を用いることで、潜在変数をより正確に捉えることができ、結果として構造モデルの信頼性も高まる。

構造モデル(因果関係)

主要な因果関係

  • 家庭環境 → 学習意欲: 1.033(標準化係数0.714)
    • 統計的に有意(p < 0.001)
    • 家庭環境が良好であるほど、学習意欲が高い
  • 学習意欲 → 学業成績: 0.905(標準化係数0.673)
    • 統計的に有意(p < 0.001)
    • 学習意欲が高いほど、学業成績が良い

構造モデルの結果の見方

これは最も重要な部分の一つであり、変数間の関係性の強さと方向性を示す。パス係数とも呼ばれる。

出力のRegressionsセクションでは、構造モデルで設定したパスの係数を確認できる。

  • Learning_Motivation ~ Household_Environment: この行は、「家庭環境」が「学習意欲」に与える影響を示す。Estimate列の数値がパス係数である。Std.allは標準化されたパス係数であり、これは標準偏差単位で説明されるため、異なるパス間で影響の大きさを比較する際に便利である。P(>|z|)(p値)が0.05未満であれば、そのパスは統計的に有意であると判断できる。
  • Academic_Performance ~ Learning_Motivation: 同様に、「学習意欲」が「学力」に与える影響を示す。

例えば、Learning_Motivation ~ Household_Environmentの標準化パス係数が0.50でp値が0.001であった場合、これは「家庭環境」が「学習意欲」に対して統計的に有意な正の影響を与え、その影響の大きさが比較的に強いことを示唆する。

標準化パス係数の判断基準:相関係数との比較

標準化パス係数は、その値が-1から1の範囲にあり、標準偏差1単位の変化が被説明変数に与える標準偏差単位での変化を表す。この点は、-1から1の範囲で変数間の線形な関連性の強さと方向を示す相関係数と非常に似ている。

一般的に、標準化パス係数の強さは以下のように解釈されることが多い。ただし、これはあくまで目安であり、研究分野や文脈によって適切な判断基準は異なる。

  • ±0.10 未満: 影響が小さい(弱い)
  • ±0.10 ~ ±0.30: 影響が中程度
  • ±0.30 以上: 影響が大きい(強い)

相関係数との違いは、相関係数が単純に2つの変数間の関連性を示すのに対し、標準化パス係数は他の変数の影響をコントロールした上での、ある変数から別の変数への直接的な影響を示す点である。

例えば、単純な相関係数では、家庭環境と学力に強い正の相関が見られたとしても、SEMのパス係数を見ると、家庭環境が直接学力に影響を与えるのではなく、学習意欲を介して間接的に影響を与えていることがわかる、といった場合がある。SEMのパス係数は、単なる相関ではなく、モデル内で仮定された因果関係の経路における影響力を示唆するため、より詳細な関係性を読み解くことが可能である。

修正指標による改善提案

上位の修正指標から以下の改善が提案されている:

  • 宿題努力と授業参加の間の相関(MI = 20.451)
    • これら2つの変数間に直接的な相関関係を追加することでモデル適合度が向上する
  • 家庭学習時間と自主学習時間の間の相関(MI = 15.369)
    • 家庭での学習時間と自主的な学習時間に相関関係を追加する
  • 家庭環境から自主学習時間への直接効果(MI = 12.997)
    • 家庭環境が自主学習時間に直接影響を与える可能性がある

総合的な解釈

このモデルは、家庭環境が学習意欲を介して学業成績に影響を与えるという仮説を支持している。適合度指標は概ね良好であり、因果関係も統計的に有意である。ただし、RMSEAがやや高いため、修正指標に基づくモデルの改善を検討することで、より良い適合度を得られる可能性がある。


まとめ

構造方程式モデリングは、複雑な変数間の関係性を視覚的にモデル化し、統計的に検証するための強力なツールである。潜在変数を扱える点や、測定誤差を考慮できる点がSEMの大きな利点であり、これにより、より現実に近いモデルを構築することが可能となる。

Rのlavaanパッケージを使えば、比較的簡単にSEMを実行し、その結果を解釈することができる。ただし、モデルの構築には理論的な背景とデータの特性を十分に理解することが不可欠である。

本ブログ記事が、Rを使った構造方程式モデリングの第一歩を踏み出す手助けとなれば幸いである。さらに深く学ぶためには、専門書やオンラインリソースを参照し、様々なモデルを試してみることを推奨する。


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

コメント

コメントする

目次