Tutorial 4: Standardizing Timeseries Data Within Runs#
While standardizing the features/columns within runs can be done using the standardize parameter within the TimeseriesExtractor class, the standardize() function can be used to perform within-run standardization post-extraction.
[1]:
# Download packages
try:
import neurocaps
except:
!pip install neurocaps[windows,demo]
[2]:
import numpy as np
from neurocaps.analysis import standardize
from neurocaps.utils import simulate_subject_timeseries
subject_timeseries = simulate_subject_timeseries(n_subs=1, n_runs=2, shape=(50, 100))
# Getting mean and standard deviation for run 0 and 1 of subject 0
mean_vec_1 = subject_timeseries["0"]["run-0"].mean(axis=0)
std_vec_1 = subject_timeseries["0"]["run-0"].std(ddof=1, axis=0)
mean_vec_2 = subject_timeseries["0"]["run-1"].mean(axis=0)
std_vec_2 = subject_timeseries["0"]["run-1"].std(ddof=1, axis=0)
# Avoid numerical stability issues
std_vec_1[std_vec_1 < np.finfo(std_vec_1.dtype).eps] = 1.0
std_vec_2[std_vec_2 < np.finfo(std_vec_2.dtype).eps] = 1.0
standardized_subject_timeseries = standardize(subject_timeseries_list=[subject_timeseries])
standardized_1 = (subject_timeseries["0"]["run-0"] - mean_vec_1) / std_vec_1
standardized_2 = (subject_timeseries["0"]["run-1"] - mean_vec_2) / std_vec_2
print(np.array_equal(standardized_subject_timeseries["dict_0"]["0"]["run-0"], standardized_1))
print(np.array_equal(standardized_subject_timeseries["dict_0"]["0"]["run-1"], standardized_2))
True
True