計算論的臨床心理学サマースクール2025
2025-08-07
大水拓海(おおみず たくみ)
専修大学大学院文学研究科心理学専攻修士課程2年
心理療法の作用機序,感情粒度,心理ネットワーク,
シミュレーション,能動的推論
なぜネットワークからシミュレーションを行うか?
実際の臨床データを使用することの困難さ(入手や使用)
侵襲性の問題を超えて介入を試す,予測する
新たな仮説の生成
DSM-III-TRに基づく大うつ病の横断データ(8973名)から症状ネットワークを推定
ネットワークの結合を強めるパラメータ\(c\)の値が症状全体の活性化を左右する(Cramer et al, 2016)
\[A^{t}_{i} = \sum^{J}_{j=1} cW_{ij}X^{t-1}_j\tag{1}\]
\[P(X^{t}_{i} = 1) = \frac{1}{1+e^{b_{i}}-A^{t}_i} \tag{2}\]
Cramerのモデルでは症状のみの接続の強さに着目
心理療法の介入効果研究データにおいて,症状が改善しても接続が強まっていることが報告(Höller et al, 2022)
→心理療法などの治療的な要素を入れて拡張することで,ネットワークの中でどの症状を標的にすれば大きな治療効果が得られるかシミュレーションできる
治療的な要素を表す仮想のノードを入れてシミュレーションを行う
シミュレーションを実際に行ってみる
ネットワークシミュレーションを実行する関数を
パッケージにしてまとめました
ご自身のRコンソールに以下をコピペして,パッケージをインストールしてください
W_init:第1引数。症状ネットワークの重み。
b_init:第2引数。各ノードの活性化閾値。
target:第3引数。どのノードを標的とするかを選択する。介入するノードは1,介入しないノードは0にする。
上記は必須の引数です。
他にもいろいろオプションがあります。
仮想データの作成
# Example data for a 6-symptom network
set.seed(456)
weight_6 <- matrix(rnorm(6*6, mean = 0.2, sd = 0.08), nrow = 6, ncol = 6)
diag(weight_6) <- 0
weight_6[upper.tri(weight_6)] <- t(weight_6)[upper.tri(weight_6)]
print(weight_6)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.00000000 0.2497420 0.2640700 0.08888861 0.14285145 0.1740751
[2,] 0.24974204 0.0000000 0.2805882 0.24585877 0.12673516 0.3048878
[3,] 0.26406997 0.2805882 0.0000000 0.35578851 0.33895489 0.2309987
[4,] 0.08888861 0.2458588 0.3557885 0.00000000 0.08585358 0.2166589
[5,] 0.14285145 0.1267352 0.3389549 0.08585358 0.00000000 0.1128498
[6,] 0.17407512 0.3048878 0.2309987 0.21665887 0.11284977 0.0000000
threshold
1 0.2669698
2 0.2929874
3 0.2788010
4 0.2980632
5 0.2985529
6 0.3196519
ターゲットとノード名の設定
シミュレーションの実行
# Run the simulation with custom parameters
sim_results <- simulate_treatment_network(
W_init = weight_6, #重み
b_init = threshold_6$threshold, #閾値
target = target_list_6, #ターゲット
connectivity = 1.2, #全体的な接続の強さ
edge_between_TC = 1, #TCノード間の接続の強さ
weight_bias = 1, #症状とTCノードの重みの強さ
TB = 1, #閾値の値の高さ
trial = 10, # 繰り返し回数(複数回行って平均を取っている)
baseline_iteration = 10, # ベースラインのステップ数
num_TC = 5, # TCノードの数
TC_iteration_per_component = 10, # 何ステップごとにTCを追加するか
follow_up_iteration = 10, # TCを全て追加した後のフォローアップ期間
symptom_name = custom_symptom_names_6
)
シミュレーション結果
Jordan et al(2017)のオープンデータからPHQ-9を使用
# Isingのデータを使ってシミュレーションする
library(tidyverse)
library(foreign)
library(bootnet)
library(qgraph)
library(IsingFit)
# データの読み込み
data <- read.spss("pone.0182162.s004.sav",
to.data.frame=TRUE)
# データの整理(PHQ-9に絞って実行)
data_phq <- data %>%
mutate(phq9a = S_PHQ9_a, phq9b = S_PHQ9_b,
phq9c = S_PHQ9_c, phq9d = S_PHQ9_d,
phq9e = S_PHQ9_e, phq9f = S_PHQ9_f,
phq9g = S_PHQ9_g, phq9h = S_PHQ9_h,
phq9i = S_PHQ9_i) %>%
select(phq9a, phq9b, phq9c, phq9d, phq9e, phq9f, phq9g, phq9h, phq9i) %>%
binarize(split = 1)
重み
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0.0000000 1.3598888 0.39036726 0.8791334 0.6737027 0.49194876 0.5026814
[2,] 1.3598888 0.0000000 0.39405655 1.2457115 0.3620559 1.21532553 0.4574443
[3,] 0.3903673 0.3940566 0.00000000 1.1536313 0.3415879 0.08258789 0.4543918
[4,] 0.8791334 1.2457115 1.15363134 0.0000000 0.8425978 0.42826040 0.7245392
[5,] 0.6737027 0.3620559 0.34158795 0.8425978 0.0000000 0.64280102 0.4754185
[6,] 0.4919488 1.2153255 0.08258789 0.4282604 0.6428010 0.00000000 0.8536002
[7,] 0.5026814 0.4574443 0.45439179 0.7245392 0.4754185 0.85360019 0.0000000
[8,] 0.2452308 0.4169612 0.22146313 0.2092072 0.7567971 0.43849695 1.2259679
[9,] 0.6029947 1.5008609 0.49087136 -0.1536085 0.3375352 1.36438942 0.2755119
[,8] [,9]
[1,] 0.2452308 0.6029947
[2,] 0.4169612 1.5008609
[3,] 0.2214631 0.4908714
[4,] 0.2092072 -0.1536085
[5,] 0.7567971 0.3375352
[6,] 0.4384970 1.3643894
[7,] 1.2259679 0.2755119
[8,] 0.0000000 0.4400285
[9,] 0.4400285 0.0000000
閾値
一つ目の症状ノードを標的にした介入
$result_plot
TableGrob (1 x 2) "arrange": 2 grobs
z cells name grob
1 1 (1-1,1-1) arrange gtable[layout]
2 2 (1-1,2-2) arrange gtable[layout]
$result_text
[1] "The mean value of symptom at the final step(t=110). = 0.611\nThe mean value of treatment component at the final step(t=110). = 0.644\nThe SD value of symptom at the final step(t=110). = 0.340\nThe SD value of treatment component at the final step(t=110). = 0.456"
PHQ-9の症状ネットワークや,関心のあるテーマから推定したネットワークを対象にして,ネットワークシミュレーションを行ってみましょう!
単独もしくは複数の症状を標的とした場合,どの症状への介入が最も効果的か?
症状を悪化させてしまう組み合わせはあるか?
その他,どんな条件だとどんなことが起きそうか?