Intra-subject¶
Intra-subject statistics. These statistics are gathered per rescaling and per subject in the Panda dataframe df_sub:
Intra-subject CSA (CSA estimation)¶
CSA averaged across transformations.
\(\mu_t \{{CSA_{sI, rX}}\}\)
print("\n==================== subject_dataframe ==========================\n")
df_sub = pd.DataFrame()
# add necessary columns to df_sub dataframe
df_sub['rescale'] = df.groupby(['rescale', 'subject']).mean().reset_index()['rescale']
df_sub['rescale_area'] = 100 * (df.groupby(['rescale', 'subject']).mean().reset_index()['rescale'] ** 2)
df_sub['subject'] = df.groupby(['rescale', 'subject']).mean().reset_index()['subject']
df_sub['num_tf'] = df.groupby(['rescale', 'subject'])['transfo'].count().values
df_sub['num_slices'] = df.groupby(['rescale', 'subject'])['num_slices'].mean().values
# add stats to per subject dataframe
df_sub['mean'] = df.groupby(['rescale', 'subject']).mean()['MEAN(area)'].values
df_sub['std'] = df.groupby(['rescale', 'subject']).std()['MEAN(area)'].values
df_sub['cov'] = df_sub['std'].div(df_sub['mean'])
df_sub = add_columns_df_sub(df_sub)
df_sub['rescale_estimated'] = df_sub['mean'].div(df_sub['csa_without_rescale'])
df_sub['error'] = (df_sub['mean'] - df_sub['theoretic_csa']).abs()
df_sub['perc_error'] = 100 * (df_sub['mean'] - df_sub['theoretic_csa']).abs().div(df_sub['theoretic_csa'])
print(df_sub)
# save dataframe in a csv file
df_sub.to_csv(os.path.join(path_output, r'csa_sub.csv'))
Intra-subject SD¶
SD of CSA across transformations.
\(\sigma_t \{CSA_{sI,rX}\}\)
print("\n==================== subject_dataframe ==========================\n")
df_sub = pd.DataFrame()
# add necessary columns to df_sub dataframe
df_sub['rescale'] = df.groupby(['rescale', 'subject']).mean().reset_index()['rescale']
df_sub['rescale_area'] = 100 * (df.groupby(['rescale', 'subject']).mean().reset_index()['rescale'] ** 2)
df_sub['subject'] = df.groupby(['rescale', 'subject']).mean().reset_index()['subject']
df_sub['num_tf'] = df.groupby(['rescale', 'subject'])['transfo'].count().values
df_sub['num_slices'] = df.groupby(['rescale', 'subject'])['num_slices'].mean().values
# add stats to per subject dataframe
df_sub['mean'] = df.groupby(['rescale', 'subject']).mean()['MEAN(area)'].values
df_sub['std'] = df.groupby(['rescale', 'subject']).std()['MEAN(area)'].values
df_sub['cov'] = df_sub['std'].div(df_sub['mean'])
df_sub = add_columns_df_sub(df_sub)
df_sub['rescale_estimated'] = df_sub['mean'].div(df_sub['csa_without_rescale'])
df_sub['error'] = (df_sub['mean'] - df_sub['theoretic_csa']).abs()
df_sub['perc_error'] = 100 * (df_sub['mean'] - df_sub['theoretic_csa']).abs().div(df_sub['theoretic_csa'])
print(df_sub)
# save dataframe in a csv file
df_sub.to_csv(os.path.join(path_output, r'csa_sub.csv'))
Intra-subject COV¶
COV of CSA across transformations.
\(COV_t \{CSA_{sI,rX}\}\)
print("\n==================== subject_dataframe ==========================\n")
df_sub = pd.DataFrame()
# add necessary columns to df_sub dataframe
df_sub['rescale'] = df.groupby(['rescale', 'subject']).mean().reset_index()['rescale']
df_sub['rescale_area'] = 100 * (df.groupby(['rescale', 'subject']).mean().reset_index()['rescale'] ** 2)
df_sub['subject'] = df.groupby(['rescale', 'subject']).mean().reset_index()['subject']
df_sub['num_tf'] = df.groupby(['rescale', 'subject'])['transfo'].count().values
df_sub['num_slices'] = df.groupby(['rescale', 'subject'])['num_slices'].mean().values
# add stats to per subject dataframe
df_sub['mean'] = df.groupby(['rescale', 'subject']).mean()['MEAN(area)'].values
df_sub['std'] = df.groupby(['rescale', 'subject']).std()['MEAN(area)'].values
df_sub['cov'] = df_sub['std'].div(df_sub['mean'])
df_sub = add_columns_df_sub(df_sub)
df_sub['rescale_estimated'] = df_sub['mean'].div(df_sub['csa_without_rescale'])
df_sub['error'] = (df_sub['mean'] - df_sub['theoretic_csa']).abs()
df_sub['perc_error'] = 100 * (df_sub['mean'] - df_sub['theoretic_csa']).abs().div(df_sub['theoretic_csa'])
print(df_sub)
# save dataframe in a csv file
df_sub.to_csv(os.path.join(path_output, r'csa_sub.csv'))
Rescale estimation (RE)¶
ratio of the atrophied CSA divided by the un-rescaled CSA averaged across transformations (gives an estimation of the applied scaling).
\(\mu_t \left\{ \frac{CSA_{sI, rX}}{CSA_{sI, r1}} \right\}\)
print("\n==================== subject_dataframe ==========================\n")
df_sub = pd.DataFrame()
# add necessary columns to df_sub dataframe
df_sub['rescale'] = df.groupby(['rescale', 'subject']).mean().reset_index()['rescale']
df_sub['rescale_area'] = 100 * (df.groupby(['rescale', 'subject']).mean().reset_index()['rescale'] ** 2)
df_sub['subject'] = df.groupby(['rescale', 'subject']).mean().reset_index()['subject']
df_sub['num_tf'] = df.groupby(['rescale', 'subject'])['transfo'].count().values
df_sub['num_slices'] = df.groupby(['rescale', 'subject'])['num_slices'].mean().values
# add stats to per subject dataframe
df_sub['mean'] = df.groupby(['rescale', 'subject']).mean()['MEAN(area)'].values
df_sub['std'] = df.groupby(['rescale', 'subject']).std()['MEAN(area)'].values
df_sub['cov'] = df_sub['std'].div(df_sub['mean'])
df_sub = add_columns_df_sub(df_sub)
df_sub['rescale_estimated'] = df_sub['mean'].div(df_sub['csa_without_rescale'])
df_sub['error'] = (df_sub['mean'] - df_sub['theoretic_csa']).abs()
df_sub['perc_error'] = 100 * (df_sub['mean'] - df_sub['theoretic_csa']).abs().div(df_sub['theoretic_csa'])
print(df_sub)
# save dataframe in a csv file
df_sub.to_csv(os.path.join(path_output, r'csa_sub.csv'))
Error¶
mean absolute error on CSA estimation averaged across transformations.
\(\mu_t \{{CSA_{sI, rX}}\} - \mu_t\{CSA_{sI, r1} \cdot (rX)^2 \}\)
print("\n==================== subject_dataframe ==========================\n")
df_sub = pd.DataFrame()
# add necessary columns to df_sub dataframe
df_sub['rescale'] = df.groupby(['rescale', 'subject']).mean().reset_index()['rescale']
df_sub['rescale_area'] = 100 * (df.groupby(['rescale', 'subject']).mean().reset_index()['rescale'] ** 2)
df_sub['subject'] = df.groupby(['rescale', 'subject']).mean().reset_index()['subject']
df_sub['num_tf'] = df.groupby(['rescale', 'subject'])['transfo'].count().values
df_sub['num_slices'] = df.groupby(['rescale', 'subject'])['num_slices'].mean().values
# add stats to per subject dataframe
df_sub['mean'] = df.groupby(['rescale', 'subject']).mean()['MEAN(area)'].values
df_sub['std'] = df.groupby(['rescale', 'subject']).std()['MEAN(area)'].values
df_sub['cov'] = df_sub['std'].div(df_sub['mean'])
df_sub = add_columns_df_sub(df_sub)
df_sub['rescale_estimated'] = df_sub['mean'].div(df_sub['csa_without_rescale'])
df_sub['error'] = (df_sub['mean'] - df_sub['theoretic_csa']).abs()
df_sub['perc_error'] = 100 * (df_sub['mean'] - df_sub['theoretic_csa']).abs().div(df_sub['theoretic_csa'])
print(df_sub)
# save dataframe in a csv file
df_sub.to_csv(os.path.join(path_output, r'csa_sub.csv'))