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

The CAP.calculate_metrics function is designed to compute transition probabilities for all subjects and store these values into dataframes (one per group). These dataframes can subsequently be used as input for the transition_matrix function to generate visualizations of the average transition probabilities per group.

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=subject_timeseries,
    cluster_selection_method="davies_bouldin",
    standardize=True,
    n_clusters=list(range(2, 6)),
)
2024-11-02 00:09:54,273 neurocaps.analysis.cap [INFO] [GROUP: All Subjects | METHOD: davies_bouldin] Optimal cluster size is 3.
outputs = cap_analysis.calculate_metrics(
    subject_timeseries=subject_timeseries,
    return_df=True,
    metrics=["transition_probability"],
    continuous_runs=True,
    output_dir=output_dir,
    prefix_filename="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