Tutorial 6: Generating Transition Probability Matrices neurocaps.analysis.transition_matrix

CAP.calculate_metrics` can be used to calculate the transition probabilities for all subjects, which can then be converted to matrix form and visualized with transition_matrix.

import numpy as np
from neurocaps.analysis import CAP, transition_matrix

# Simulate `subject_timeseries` structure
subject_timeseries = {str(x) : {f"run-{y}": np.random.rand(10, 100) for y in range(1, 4)} for x in range(1, 11)}

cap_analysis.get_caps(subject_timeseries=extractor.subject_timeseries,
                      cluster_selection_method="davies_bouldin",
                      standardize=True,
                      n_clusters=list(range(2, 6)))
2024-09-16 00:09:54,273 [INFO] [GROUP: All Subjects | METHOD: davies_bouldin] Optimal cluster size is 3.
outputs = cap_analysis.calculate_metrics(subject_timeseries=extractor.subject_timeseries,
                                         return_df=True,
                                         metrics=["transition_probability"],
                                         continuous_runs=True,
                                         output_dir=output_dir,
                                         prefix_file_name="All_Subjects_CAPs_metrics")

print(outputs["transition_probability"]["All Subjects"])

Subject_ID

Group

Run

1.1

1.2

1.3

2.1

2.2

2.3

3.1

3.2

3.3

1

All Subjects

run-continuous

0.375

0.32142857142857145

0.30357142857142855

0.4074074074074074

0.38888888888888895

0.2037037037037037

0.3333333333333333

0.38461538461538464

0.28205128205128205

2

All Subjects

run-continuous

0.4363636363636364

0.3090909090909091

0.2545454545454545

0.28

0.43999999999999995

0.28

0.36363636363636365

0.2727272727272727

0.36363636363636365

3

All Subjects

run-continuous

0.3571428571428572

0.39285714285714285

0.25

0.39215686274509803

0.33333333333333326

0.27450980392156865

0.38095238095238093

0.2857142857142857

0.33333333333333337

4

All Subjects

run-continuous

0.41666666666666663

0.2

0.38333333333333336

0.46153846153846156

0.20512820512820507

0.3333333333333333

0.36

0.36

0.28

5

All Subjects

run-continuous

0.46153846153846156

0.2692307692307692

0.2692307692307692

0.26666666666666666

0.2666666666666666

0.4666666666666667

0.3269230769230769

0.34615384615384615

0.32692307692307687

6

All Subjects

run-continuous

0.33333333333333337

0.4444444444444444

0.2222222222222222

0.3103448275862069

0.3793103448275862

0.3103448275862069

0.2608695652173913

0.3695652173913043

0.36956521739130443

7

All Subjects

run-continuous

0.4067796610169492

0.3728813559322034

0.22033898305084745

0.39215686274509803

0.2941176470588236

0.3137254901960784

0.41025641025641024

0.3333333333333333

0.2564102564102564

8

All Subjects

run-continuous

0.33333333333333326

0.35185185185185186

0.3148148148148148

0.2708333333333333

0.33333333333333337

0.3958333333333333

0.46808510638297873

0.2765957446808511

0.25531914893617014

9

All Subjects

run-continuous

0.33333333333333337

0.3333333333333333

0.3333333333333333

0.43137254901960786

0.37254901960784315

0.19607843137254902

0.3409090909090909

0.29545454545454547

0.36363636363636365

10

All Subjects

run-continuous

0.3076923076923077

0.34615384615384615

0.34615384615384615

0.3793103448275862

0.4310344827586208

0.1896551724137931

0.358974358974359

0.38461538461538464

0.2564102564102564

kwargs = {"cmap": "viridis", "fmt": ".3f", "annot": True}

trans_outputs = transition_matrix(trans_dict=outputs["transition_probability"],
                                  show_figs=True,
                                  return_df=True,
                                  **kwargs)
../_images/All_Subjects_CAPs_transition_probability_matrix1.png
print(trans_outputs["All Subjects"])

From/To

CAP-1

CAP-2

CAP-3

CAP-1

0.3429448275257044

0.2881868830804245

0.368868289393871

CAP-2

0.3595098582449408

0.2914027330314906

0.3490874087235686

CAP-3

0.3259514626040708

0.3255982589778372

0.3484502784180919