临床预测模型概述3-统计数据类型及预处理

主要数据类型

在统计分析中,数据可以根据其性质和在分析中的作用被分类为几种基本类型。理解这些类型有助于决定如何处理数据并选择合适的统计方法进行分析。以下是几种常见的数据类型:

1. 定性数据(Qualitative Data)

定性数据,也称为分类数据,描述的是属性或质量,不能通过数值来量化。定性数据可以进一步分为两种类型:

● 名义数据(Nominal Data) 名义数据表示没有自然顺序或等级的类别。例如,性别(男/女)、血型(A, B, AB, O)、国籍等。

● 序数数据(Ordinal Data) 序数数据包含可排序的类别,也称为等级数据,这些类别之间存在一个明确的排序关系,但类别之间的差距不一定相等。例如,教育等级(小学、中学、高中、大学)、满意度(不满意、一般、满意、非常满意)。

2. 定量数据(Quantitative Data)

定量数据是可以通过数值来表示和量化的数据。这种数据适合进行数学计算和统计分析。定量数据分为两类:

● 离散数据(Discrete Data) 离散数据来自计数结果,只能取整数值。例如,家庭中的人数、公司员工数量、或某事件发生的次数。

● 连续数据(Continuous Data) 连续数据可以在任何两个点之间取无限多的值,通常是测量结果。例如,身高、体重、温度、或者时间。

3. 其他数据类型:时间序列数据,空间数据

除了上述两种数据外,还存在其他类型的数据,这里不做过多介绍。

统计数据分析前变量处理

假设我们检测了到一批连续性数据,这批数据很完美,但是我们在实际分析的时候不一定要将这批数据原封不动的纳入进行分析(当然也不是说不能直接纳入,需要研究者去权衡)。这里有很多考量因素,比如不同中心不同机器检测出的一些数据存在异质性,这就导致数据的基线水平存在问题(因素一),而我们在做临床预测模型时必须要考虑模型的泛化性,因此我们需要考虑对数据进行预处理。

1.定量数据处理:

● 从专业角度出发考虑纳入的形式:可以是数值型或者分类型。

● 从数据分布情况进行考虑:正态分数数据可以采用原数据纳入,也可以考虑修改数据的表达倍数(比如5倍/10倍等,也可以增加标准差纳入);偏态数据可以进行自然对数(Ln/Log)进行处理。

● 数据进行分类处理:这个操作步骤在分析中经常出现!比如将数据用中位数、均数去分组,也可以用最佳约登值,X-title去找最佳截断值,或者三份位数、四分位数方法进行分类。但总的来说,最常用的方法就是采用中位值和X-Tile找最佳截断值进行数据二分类处理。

2.定性数据处理:

● 可以全部变成序数数据,也就是等级数据纳入:但是要考虑的因素问题是,是否数据与数据之间是存在等级关系的,比如假设把学历按照小学、初中、高中、大学纳入进来,从我们常规的理解角度学历的变化可以成为一个等级关系(递增),但是这种等级关系是否会对某个疾病的发生发展存在关系呢?绝大多数的情况应该是没有关系的,也就是说发生风险的概率是一样的。

● 可以变成无序多分类数据:这个时候一定要记得设置哑变量!假设分析得到的结果中发现风险等级是等比例的,那就再将数据重新按照等级进行设置即可。

● 值得一提的是,如果已经是二分类的数据那就直接纳入即可。

当然我们针对不同的数据必须要结合生物学意义分析!比如年龄,年龄增加1岁未必会对某些疾病造成显著影响,所以有时候我们将年龄按照某一或几个岁数进行分层即可。

数据预处理

1.建议大家注意一下几点:三统(同)一,一细分 原则

● 同一表格 ● 统一单位 ● 统一文字描述 ● 细分类目

其中同一表格是指建模或者验证集数据尽量分别或者按照一张表格进行分析,切忌一批数据分了很多张表格。

统一文字描述是指不同数据集需要使用相同的一套命名体系,统一单位则是便于分析。

细分类目则是指研究者需要对并列数据进行细分,比如研究肿瘤转移部位,建议尽量将各种转移部位的数据按单独列进行书写,这样在后续分析的时候会更加灵活,当然也需要按照研究者自身的需求进行考虑。

2.异常值和缺失值处理

● 异常值处理: ①直接删除样本; ②删除异常值,用缺失值处理方法填补; ③对数据再审核。

在平时的分析中,一般流程是先进行数据再审核,如果审核后无误再考虑删除异常值或者样本。

● 缺失值处理:①插补;②填补;③删除。

3.缺失值处理——插补法介绍

3.1 常见方法包括(常用多重插补!):
  1. 平均数插补:

● 对于连续变量,可以使用该变量非缺失值的平均数来填充所有缺失值。

  1. 中位数插补:

● 也适用于连续变量,特别是当数据分布非对称(偏态)时,使用中位数插补可以减少异常值的影响。

  1. 众数插补:

● 对于分类数据,可以选择使用该变量的众数(最常出现的值)来填补缺失值。

  1. 预测模型插补:

● 使用可用的完整数据作为训练集,建立一个预测模型,然后用该模型来预测缺失值。常见的模型包括线性回归、决策树、K最近邻(KNN)等。

  1. 多重插补:

● 一种更为复杂的方法,它不是产生一个单一的插补值,而是通过多次随机插补生成多个完整的数据集,以反映插补值的不确定性。之后,对每个数据集进行分析,并汇总结果以得到最终的估计和推断。

  1. 最近邻插补:

● 根据相似度度量(如欧氏距离),用相邻点的值来插补缺失值。

  1. 回归插补:

● 使用有缺失值的变量与其他变量之间的关系(通过回归分析建立)来预测缺失值。

  1. 使用固定值插补:

● 例如,对某些特定情况下缺失的数据填充一个固定的标记值,如-999、0或特定的标识符。

3.2 插补的选择考虑因素:

● 数据类型:连续还是分类。

● 缺失数据的比例:缺失量多时,插补的影响更大。

● 缺失数据的机制:完全随机缺失(MCAR)、随机缺失(MAR)或非随机缺失(MNAR)。

● 分析目的:依据分析的目标选择合适的方法。

4.缺失值处理——填补法介绍

4.1 常用的缺失值填补方法(常用简单填补法!):
  1. 简单填补方法:

● 均值填补:对于连续变量,使用所有非缺失值的平均数来填补缺失值。

● 中位数填补:对于偏态分布的连续变量,使用中位数来填补缺失值,因为中位数对异常值的影响较小。

● 众数填补:对于分类变量,使用最频繁出现的类别(众数)来填补缺失值。

  1. 高级填补方法:

● K最近邻(K-NN)填补:基于K-NN算法,找到与缺失样本最相似的K个样本,然后用这些样本的非缺失值的平均值或众数来填补缺失值。

● 多重插补(Multiple Imputation):通过在数据中随机添加噪声,多次生成多个可能的填补值来反映缺失数据的不确定性,最终分析时对这些数据进行汇总处理。

● 回归插补:使用可用的完整数据作为训练集,构建一个回归模型(如线性回归),预测缺失值。

  1. 模型预测填补:

● 决策树:决策树模型(如随机森林)可以用来预测缺失值,尤其是当数据集中存在复杂的非线性关系时。

● 插值方法:特别适用于时间序列数据,例如线性插值、样条插值等,根据时间点之间的关系来估计缺失值。

  1. 使用固定值:

● 对于某些特定的应用场景,可能会使用一个固定值来填补所有缺失值,例如在某些医疗数据分析中,可能将缺失的临床测量结果填充为“正常范围”的边界值。

4.2 缺失值填补的注意事项:

● 数据的缺失机制:理解数据为何缺失(随机或非随机)对选择合适的填补方法至关重要。

● 数据类型和分布:选择的填补方法应与数据的类型(连续或分类)和分布特性相匹配。

● 模型偏差:某些填补方法可能会引入偏差,特别是当缺失不是随机发生时。

● 数据完整性:过度依赖填补方法可能掩盖数据质量问题,应优先考虑改进数据收集和处理流程。

注:若对内容有疑惑或者发现有明确错误的,请联系后台(希望多多交流)。更多内容可关注公众号:生信方舟

- END -

  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Skip-gram是一种用于自然语言处理的模型,它的目的是根据中心词来预测周围的上下文。数据预处理是Skip-gram模型的重要步骤之一,下面将介绍Skip-gram模型的数据预处理过程。 Skip-gram模型的数据预处理过程如下: 1. 首先,需要读取语料库中的所有文本,并将它们转换为小写形式。 2. 接着,需要分词,将每个句子切分成单词或标点符号。这里可以使用分词工具如jieba等。 3. 然后,需要建立词表,将所有不同的单词或标点符号映射到一个唯一的整数值,这个整数值称为词汇表中单词的索引。 4. 接下来,需要将每个句子中的单词转换为对应的索引,以便后续的训练过程中可以直接使用索引来访问每个单词的向量表示。 5. 最后,需要将数据转换成Skip-gram模型所需的输入和输出格式。具体来说,输入是中心单词的索引,输出是上下文单词的索引列表。Skip-gram模型的输入是一个中心词,它会根据窗口大小选择上下文单词。 下面是一个简单的Python代码示例,用于实现Skip-gram模型的数据预处理过程: ```python import jieba # 读取语料库中的文本 with open('corpus.txt', 'r', encoding='utf-8') as f: corpus = f.read().lower() # 分词 sentences = [list(jieba.cut(line.strip())) for line in corpus.split('\n')] # 建立词表 vocab = {} for sentence in sentences: for word in sentence: if word not in vocab: vocab[word] = len(vocab) # 将单词转换为索引 indexed_sentences = [[vocab[word] for word in sentence] for sentence in sentences] # 将数据转换成Skip-gram模型所需的输入和输出格式 window_size = 2 X, y = [], [] for sentence in indexed_sentences: for i, word in enumerate(sentence): for j in range(max(0, i - window_size), min(len(sentence), i + window_size + 1)): if j != i: X.append(word) y.append(sentence[j]) ``` 以上是一个简单的Skip-gram模型的数据预处理过程示例,实际应用中可能需要进行更复杂的处理,以适应不同的任务和数据集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值