将BICAMS分数转换为z分数的工具
BICAMSZ的Python项目详细描述
BICAMSZ:BICAMSZ的z变换包
目录
简介
AIMS-VUB
首先,非常感谢您有兴趣代表布鲁塞尔大学(VUB)的人工智能和临床科学建模实验室(AIMS)使用我们的项目。我们的目标是通过对神经生理学和脑成像数据进行相关和先进的建模,最大限度地促进神经退行性疾病的最佳临床护理,特别关注多发性硬化症。此外,鉴于该领域的繁荣和对我们研究的普遍理解,我们通过共享代码和积极地在我们的AIMS website上进行科学交流,努力为开放、可复制和透明的科学做出贡献。在
项目
这个项目是基于Costers et al. 2017。
要了解转换,请访问我们的streamlit application!在
简言之,通过校正年龄、性别和教育程度,将测试分数转换为z分数,可以比较受试者之间的认知得分。可区分以下阶段:
- 原始分数的缩放
- 根据受试者的年龄、性别和受教育程度,预测受试者通常应获得的分数。在
- 得到z得分:从量表得分(1)中减去预测得分(2),除以回归模型的残差
重要注意事项
每个测试的转换表(用于原始分数的标度)和回归线的拟合得出回归模型内特征(年龄、年龄、性别、教育程度)的权重都依赖于97名比利时荷兰语健康对照组的样本数据。在转换受试者的z分数时,应考虑该人群的人口统计数据(尤其是年龄和教育程度,分别为43.52±12.69和14.69±1.61(平均值±std))。我们强调,当参与者的特征在年龄或教育水平上具有极端值(非常低或非常高)时,在计算z分数时要特别小心。在
此外,本文的测试条件非常严格。E、 g.对于SDMT,不允许患者通过手指指示需要转换为数字的符号来记录他们在试卷上的进展情况。请确保BICAMS的每一个子测试都经过仔细的管理,以确保正确执行。此外,在本项目中,只有荷兰版本的CVLT-II才有资格进行z-标准化。在
可交付成果
有了这个代码,你可以很容易地将bicam上的认知分数转换成z分数。在
所需数据
以下数据为绝对要求:
- 年龄:年(整数)
- 性别:
- 1=男性
- 2=女性
- 教育程度(教育年限):
- 6=小学
- 12=高中
- 13=专业教育
- 15=学士
- 17=主控
- 21=博士学位
此外,还需要以下3个分数中至少1个的数据:
- sdmt:原始sdmt分数
- bvmt:原始bvmt分数
- cvlt:原始cvlt分数
代码说明
{cd1>存在于所有代码中
data_check
:检查数据中是否有不可能的值,包括nan。如果问题仍然存在,代码将自动抛出警告并返回nan。在normalization_pipeline
:整个管道。使用以下内部函数:_check_impossible_values_or_nans
_get_conversion_table
:下面是更多信息_get_expected_score
_raw_to_scaled
_to_z_score
_impaired_or_not
pipeline_for_pandas
:这允许将管道应用于.apply()
函数。请使用以下代码片段:new_columns = ['z_test', 'imp_test']
:用正在转换的测试替换“test”input_columns = ['column_name_age', 'column_name_sex', 'column_name_edu', 'column_name_test']
:根据列名调整名称。在df[new_columns] = df[input_columns].apply(pipeline_for_pandas, args = (test, z_cutoff), axis = 1)
:将test
替换为字符串“sdmt”、“bvmt”或“cvlt”。同时选择截止线。在
加载三个主要函数:from BICAMSZ import normalization_pipeline, data_check, pipeline_for_pandas
有关这些函数的信息:请使用help(...function...)
查看docstrings。在
代码示例:
from BICAMSZ import normalization_pipeline, data_check, pipeline_for_pandas
import pandas as pd
data_dict = {'age': [55,70,34,80],
'sex': [1,2,2,1],
'education': [17, 6, 13, 21],
'sdmt': [32, 49, 81, 70],
'bvmt': [25, 36, 30, 12],
'cvlt': [41, 22, 75, 60]}
df = pd.DataFrame(data_dict)
# 0. Check if your data is ready for conversion, per column. For example:
data_check(df['sdmt'], 'sdmt')
# 1. Using normalization_pipeline per case
z_score, impairment_bool = normalization_pipeline(70, 2, 13, 53, 'sdmt', -1.5)
# 2. Using pipeline_for_pandas to immediately convert entire dataframe
new_columns_sdmt = ['z_sdmt', 'imp_sdmt']
new_columns_bvmt = ['z_bvmt', 'imp_bvmt']
new_columns_cvlt = ['z_cvlt', 'imp_cvlt']
input_columns_sdmt = ['age', 'sex', 'education', 'sdmt']
input_columns_bvmt = ['age', 'sex', 'education', 'bvmt']
input_columns_cvlt = ['age', 'sex', 'education', 'cvlt']
df[new_columns_sdmt] = df[input_columns_sdmt].apply(pipeline_for_pandas, args=('sdmt', -1.5), axis=1)
df[new_columns_bvmt] = df[input_columns_bvmt].apply(pipeline_for_pandas, args=('bvmt', -1.5), axis=1)
df[new_columns_cvlt] = df[input_columns_cvlt].apply(pipeline_for_pandas, args=('cvlt', -1.5), axis=1)
- 项目
标签: