4章3节:缺失值的处理(上)

news2024/11/14 14:59:37

在医学科研中,由于失访、无应答或记录不清等各种原因,经常会遇到数据缺失的问题。本文将深入探讨医学科研中数据缺失的成因、分类、影响以及应对方法,结合R语言的实际应用,为医学研究人员提供全面的解决方案。

一、认识缺失数据

其实,很多医学的纵向研究因获取数据资料时间较长,受试对象疾病痊愈、居住地改变等原因,不可避免地出现缺失数据。缺失数据不仅会降低医学研究的把握度,还会给研究的结果带来偏倚。在数据收集过程中由于失访、拒访、录入错误等原因造成的不完整数据称为缺失数据(Missing data)。

2083ab56173e4664b84a8a36db4edc83.png

1、数据缺失的操作成因

在医学研究中,数据缺失的原因多种多样,可以归纳为以下几类:

受试者原因

失访:在纵向研究中,受试者可能由于搬迁、无法联系、去世等原因导致后续数据无法获取。失访在长期随访研究中特别常见,尤其是在研究对象涉及广泛地理区域或高风险人群时。受试者失访会导致随访数据的缺失,从而影响研究结果的有效性和可靠性。

拒访:受试者拒绝继续参与研究,拒绝提供进一步的数据。这可能是因为研究的侵入性、不适感、时间成本或对研究过程的抵触情绪。受试者的拒访率高可能反映研究设计上的问题,或者是受试者招募和管理过程中存在的缺陷。

疾病痊愈:部分受试者在疾病痊愈后,认为不再需要参与研究,从而导致数据缺失。虽然这对于受试者个人是积极的,但对于研究来说,这种数据缺失可能会影响对长期效果的评价。

研究者原因

数据录入错误:由于工作人员的疏忽或不熟练,导致数据录入时出现错误。这类错误包括数据的遗漏、误录和重复录入等。数据录入错误不仅会直接导致数据缺失,还可能导致数据的质量和可靠性问题。

记录不清:数据记录过程中不够详细或规范,导致后期数据处理困难。这可能是由于研究者未能严格遵循数据记录的标准操作程序,或者在数据记录过程中未能及时、准确地记录相关信息。

设备故障:数据采集设备出现故障,无法完整获取数据。设备故障可能是由于硬件问题、软件错误或操作不当引起的。在高度依赖仪器设备进行数据采集的研究中,设备故障造成的数据缺失可能尤为严重。

其他原因

样本丢失:生物样本在运输或存储过程中丢失或损坏。生物样本的丢失或损坏不仅会导致数据缺失,还会增加研究的成本和时间。样本丢失的原因可能包括标签错误、存储条件不当、运输过程中的意外等。

技术原因:某些数据由于技术限制无法获取或测量。技术原因导致的数据缺失可能包括检测限的限制、数据采集方法的不完善、数据处理技术的局限性等。在某些情况下,技术原因可能导致特定变量的数据无法获得,从而影响研究结果的全面性和准确性。

2、数据缺失的三种分类

完全随机缺失(MCAR, Missing Completely at Random)

数据缺失是完全随机的,与任何观测值或未观测值无关。例如,某些问卷中的问题因打印错误而未显示,导致所有受访者均未回答该问题。在这种情况下,缺失的数据与其他变量无关,因此不会引入偏倚。但完全随机缺失在实际研究中较为少见。

随机缺失(MAR, Missing at Random)

数据缺失与已观测的变量有关,但与未观测的变量无关。例如,年龄较大的受试者更有可能失访,但在同一年龄组内,失访是随机的。这种情况下,尽管数据缺失不是完全随机的,但如果对已观测变量进行适当的调整,可以得到无偏估计。

非随机缺失(MNAR, Missing Not at Random)

数据缺失与未观测的变量有关。例如,重病患者由于身体不适,更有可能拒绝接受某些检查,导致数据缺失。在这种情况下,缺失的数据与未观测的值相关,通常难以处理,因为缺失机制本身与数据有关,可能会引入偏倚。

3、数据缺失的影响

减少统计效能

统计效能是指研究检测到实际存在效应的能力。在临床试验中,每个参与者的数据都至关重要。当部分数据缺失时,等同于减少了样本量。假设我们在一项试验中原计划招募100名参与者,但由于各种原因,最终只有80名参与者提供了完整的数据。那么,我们实际用于分析的数据点只有80个,而不是最初设计的100个。

统计功效的降低:样本量减少直接影响统计功效。统计功效(Statistical Power)是指试验正确拒绝零假设的概率。当样本量不足时,即使有实际效应存在,我们也可能因为数据不足而无法检测到这种效应。统计功效降低意味着试验得出的结论可靠性下降,可能会出现更多的假阴性结果,即实际存在的效应未被检测到。

效应大小的估计偏差:数据缺失不仅影响统计功效,还会对效应大小的估计产生偏差。较小的样本量使得效应大小的估计变得不准确,可能会夸大或低估实际效应。例如,在药物试验中,如果一些患者因为副作用退出试验,这些患者的数据缺失会导致对药物副作用严重性的低估。

引入偏倚

数据缺失不仅仅是一个统计学问题,它还会引入系统性偏倚,导致研究结果偏离真实情况。

非随机缺失:如果数据缺失不是随机发生的,而是与某些特定因素相关,则会引入偏倚。例如,在一项关于重病患者的研究中,重病患者往往更有可能因病情严重而无法完成整个试验,这就导致了非随机缺失。如果我们不考虑这些缺失数据,可能会低估疾病的严重性,甚至对某些治疗的有效性产生错误的结论。

偏倚的表现:这种偏倚可以表现为结果的系统性误差。例如,在一项新药试验中,如果药物副作用严重的患者由于无法耐受而退出试验,那么剩下的数据可能会显示出药物的副作用较轻。实际上,这是因为最严重的副作用患者的数据被忽略了,导致了对药物安全性的不准确评估。

4、复杂数据分析

处理数据缺失必然会增加了数据分析的复杂性。所以,处理缺失数据需要采用特殊的方法,否则可能会得出错误的结论。

传统的数据分析方法,如完全案例分析(Complete Case Analysis)和均值插补(Mean Imputation),在处理数据缺失时有其局限性。完全案例分析只使用没有缺失值的案例进行分析,这会导致样本量的大幅减少。而均值插补则简单地用变量的平均值代替缺失值,这会低估变量的变异性,从而影响结果的准确性。

现代统计学方法提供了更有效的处理数据缺失的方法。例如,多重插补法(Multiple Imputation)是一种广泛使用的方法,它通过创建多个插补数据集,并结合这些数据集的分析结果,来处理缺失数据。此外,还有全信息最大似然法(Full Information Maximum Likelihood, FIML),它通过使用所有可用数据来估计模型参数,从而减少缺失数据的影响。

二、用R来检验缺失数据

R语言中将缺失值表示为NA(Not Available)。接着,我们将深入探讨如何在R中检测缺失值。

1、缺失值的检测

在R中,可以使用is.na()函数来检测缺失值。该函数返回一个与输入对象大小相同的逻辑向量,其中缺失值的位置为TRUE,非缺失值的位置为FALSE。让我们通过一个简单的示例来理解这一点。

data_miss <- c(1, 2, 3, NA, 33, NA, NA, 23)
is_na_result <- is.na(data_miss)
print(is_na_result)

结果可见:

[1] FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE

通过上述代码,我们可以清楚地看到哪些位置存在缺失值。

2、缺失值观察

在实际数据分析中,我们常常需要查看缺失值的具体分布情况。由于R的内置数据集iris没有缺失值,我们可以人为地生成一个含有缺失值的iris_miss数据集,并通过不同的方法来观察缺失值的情况。

示例:生成含缺失值的数据集

iris_miss <- iris
iris_miss$Sepal.Length[c(12, 22, 51, 92, 122)] <- NA
iris_miss$Sepal.Width[c(12, 96, 126)] <- NA
iris_miss$Petal.Length[c(5, 15, 35, 45)] <- NA
num_na <- length(which(is.na(iris_miss)))
print(num_na)

结果可见:

[1] 12

上面代码首先创建了一个名为iris_miss的数据框,它是iris数据集的副本。然后,该代码将iris_miss数据集中Sepal.LengthSepal.WidthPetal.Length列的特定行设置为缺失值(NA),具体位置分别是第12、22、51、92、122行的Sepal.Length,第12、96、126行的Sepal.Width,以及第5、15、35、45行的Petal.Length。接着,代码计算了iris_miss数据集中所有缺失值的总数,并将结果存储在num_na变量中,最后通过print函数打印出缺失值的总数,结果显示为12。

3、使用View()和complete.cases()函数

我们可以通过View()函数以表格形式查看数据中含有NA值的非完整数据行,并可以根据每列中数值类别和大小进行数据排序。此外,complete.cases()函数返回一个逻辑向量,表示哪些行是完整的,即没有缺失值。

View(iris_miss[!complete.cases(iris_miss),])

结果可见:

9d6489dbde294b969fa7d66f17d44c03.png

4、使用mice包观察缺失值模式

mice包提供了丰富的缺失值处理功能。通过md.pattern()函数,可以生成一个以矩阵或数据框形式展示缺失值模式的表格,并生成关于缺失值的图表。

library(mice)
md_pattern_result <- md.pattern(iris_miss)
print(md_pattern_result)

 结果可见:

    Petal.Width Species Sepal.Width Petal.Length Sepal.Length   
139           1       1           1            1            1  0
4             1       1           1            1            0  1
4             1       1           1            0            1  1
2             1       1           0            1            1  1
1             1       1           0            1            0  2
              0       0           3            4            5 12
  • 从第二列开始,每一列表示数据集中的一个变量(Petal.WidthSpeciesSepal.WidthPetal.LengthSepal.Length)。
  • 数值 1 表示该变量在该行中没有缺失值,而 0 表示有缺失值,一列和最后一列和最后一行除外。
  • 第一行第一列的 139,是说明139 行数据没有任何缺失值。
  • 第一行第二行表示有 4 行数据缺失 Sepal.Length 的值(1 表示不缺失,0 表示缺失)。
  • 末尾的一列表示每种缺失模式的行数,最后一行表示每个变量缺失值的总数。

图示:

6b7cf8f0954e4ec0a122a2b1fe6a6a69.png

MICE(Multivariate Imputation by Chained Equations)包更多是R语言中用于多重插补缺失值的强大工具包。它基于链式方程的思想,提供了一种系统化的方法来处理数据集中的缺失值。通过多重插补,可以生成多个填补缺失值后的数据集,并对这些数据集进行综合分析,以提高估计的准确性和可靠性。上面只是用到MICE的可视化功能。

5、使用VIM包进行缺失值可视化

通过图形化的方式观察缺失值,可以更直观地理解数据的缺失模式。VIM包提供了多种可视化工具,如aggr()函数和scattmatrixMiss()函数等等。

library(VIM)
names(iris_miss) <- c("SLength", "SWidth", "PLength", "PWidth", "Species")
aggr_plot <- aggr(iris_miss, prop = FALSE, numbers = TRUE)
scattmatrixMiss_plot <- scattmatrixMiss(iris_miss)
marginplot(iris_miss[c("SLength", "SWidth")])

缺失值的直方图

67dca4ea59154c94b328a732c240b9ad.png

上面左图是用条形图展示了每个变量缺失值的个数,其中 “Petal.Width(PWidth)”和“Species”变量没有缺失值,“Sepal.Length(SLength)”缺失最多为5个。右图展示了数据框中5个变量不同组合下缺失值的个数,右下角的139代表删除所有缺失值后还剩的完整数据的样本数为139个,具体分析可参考md.pattern()的结果分析。

缺失值的散点图

dc062501490d45fe8720317b7659cad9.png

上图为函数scattmatrixMiss()生成的不同变量之间的散点图情况。如果观察其中两个变量之间的缺失值信息也可以使用函数marginplot(),例如"Sepal.Length"和"Petal.Width"的。

缺失值的综合图

5ae46d8f96354c49bfed40f20c8a192c.png

VIM 包是 R 语言中专门用于可视化和处理缺失值的工具包。它具备多种实用函数,能够助力用户清晰直观地了解缺失值的分布状况,并实现有效的填补。在缺失值可视化方面,aggr()函数可以生成条形图和矩阵图,用于展示单变量以及多变量组合时缺失值的个数或者比例;scattmatrixMiss()函数能够生成涵盖缺失信息的散点图矩阵,以此呈现不同变量之间的关系;marginplot()函数则可用于对两个变量之间的缺失值信息进行观察。

53f1738b73904a138297fbc34d7cfe4f.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1983817.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一款开源且免费的系统清理工具,绿色免安装

BleachBit是一款开源且免费的系统清理工具&#xff0c;最初设计用于Linux系统&#xff0c;但现在已经支持Windows。该工具的主要功能包括清理缓存、删除临时文件、清除浏览器历史记录、删除cookies和日志文件等。此外&#xff0c;它还能够安全地擦除文件内容&#xff0c;确保数…

【Java数据结构】---泛型

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 文章目录 包装类装箱和拆箱泛型泛型…

HarmonyOS应用开发知识地图

HarmonyOS 应用开发旅程 HarmonyOS 应用开发旅程 PS&#xff1a;Xmind原文件可以直接跳转官方具体文档地址&#xff0c;如需要原文件请联系&#xff1a;DYZZ198 01.准备与学习 学习 HarmonyOS 的基本概念和架构,搭建好所需的开发工具和环境,了解开发规范和最佳实践 了解 H…

C语言菜鸟入门·数据结构·链表超详细解析

目录 1. 单链表 1.1 什么是单链表 1.1.1 不带头节点的单链表 1.1.2 带头结点的单链表 1.2 单链表的插入 1.2.1 按位序插入 &#xff08;1&#xff09;带头结点 &#xff08;2&#xff09;不带头结点 1.2.2 指定结点的后插操作 1.2.3 指定结点的前插操作 1.3 …

【HarmonyOS NEXT星河版开发学习】小型测试案例04-个人中心顶部导航

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面&#xff08;暂未发布&#xff09; 前言 主轴对齐方式在鸿蒙开发中非常重要&#xff0c;通过合理选择 justifyContent 和 alignItems 属性&#xff0c;开发者可以精确控制 Fle…

度言软件介绍

度言软件管理员操作后台 https://www.duyansoft.com企业后台为公司管理员操作后台&#xff0c;共计有七个功能版块 控制台 成员管理——员工管理 成员管理——员工管理&#xff08;添加员工&#xff09; 成员管理——团队管理 公司管理员可以新建/编辑/删除团队&#xff0c…

【Web开发手礼】探索Web开发的秘密(十五)-Vue2(2)AJAX、前后端分离、前端工程化

主要介绍了AJAX、前后端分离所需的YApi、前端工程化所需要的环境安装&#xff01;&#xff01;&#xff01; 目录 前言 AJAX ​原生Ajax Axios Axios入门 案例 前后端分离开发 YApi ​前端工程化 环境准备 总结 前言 主要介绍了AJAX、前后端分离所需的YApi、前端工…

26集 ESP32 AIchat启动代码分析-《MCU嵌入式AI开发笔记》

26集 ESP32 AIchat启动代码分析-《MCU嵌入式AI开发笔记》 这集我们分析代码如何组织起来&#xff0c;如何编译 先用sourceinsight把代码加进工程。 新建一个sourceinsight工程&#xff0c;把AI-CHAT代码加进来&#xff0c;之后把ESP IDF代码加进来&#xff0c;之后把ESP-ADF加…

android compose设置圆角不起作用

进度条progress设置背景圆角不起作用&#xff1a; 源码&#xff1a; Composablefun CircularProgress(modifier: Modifier, vm: TabarCmpViewModel?) {if (vm?.showLoading?.value ! true) returnBox(modifier modifier.background(Color(0x99000000)).defaultMinSize(minW…

【kubernetes】亲和力(Affinity)

亲和力&#xff08;Affinity&#xff09; 针对节点(NodeAffinity) 1&#xff0c;RequiredDuringSchedulinglgnoredDuringExecution 硬亲和力&#xff0c;即支持必须部署在指定的节点上&#xff0c;也支持必须不部署在指定的节点上。 2&#xff0c;PreferredDuringSchedulin…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 全排列(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题…

【TS】使用npm全局安装typescript

查看npm安装 npm -v 安装typescript npm i -g typescript 查看安装 tsc 这就是标致着安装完成。

Linux定时任务之crontab

目录 crontab简介crontab语法自定义定时任务举例1、每天中午12点执行命令&#xff1a;2、每5分钟执行一次命令&#xff1a;3、在每月的第一天和第十五天的00:00执行命令&#xff1a;4、在周一到周五的上午 8 点到 10 点之间&#xff0c;每半小时执行一次命令&#xff1a; 使用 …

sqli-labs闯关复现

1.第一关&#xff1a; 提示我们输入数字值得id&#xff0c;我们先输入 ?id1 有回显内容&#xff0c;说明我们已经进入了数据库进行查询。 尝试联表注入&#xff1a; 第一步&#xff1a;首先我们需要知道一张表有几列&#xff0c;可以通过报错和正常回显来判断有几列。 这里…

亚马逊英国站认证 高压锅CE认证

高压锅 一种产生加压蒸汽来烹饪食物的厨具。高压锅可以用于明火&#xff0c;或者插电使用。传统高压锅由采用铝底的钢锅和密封锅盖组成。 亚马逊网站上销售的所有高压锅均须符合指定的认证标准。请注意&#xff0c;如果不符合这些标准&#xff0c;亚马逊可能会撤销您的销售权限…

Centos8搭建npm和maven的nexus私服

nexus私服部署需要依赖JDK&#xff0c;故首先在服务器上部署JDK。 JDK 8 的安装教程 1. 下载安装包 官网下载&#xff1a; Java Archive 注&#xff1a; 官网下载需要注册 Oracle 账户并登录。 2. 安装 将下载下来的tar包上传到服务器上&#xff0c;示例为上传到服务器的/…

C++ | Leetcode C++题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isPowerOfThree(int n) {return n > 0 && 1162261467 % n 0;} };

[MRCTF2020]PYWebsite-1

打开以后查看源码信息 看到flag.php试着打开 提示看到&#xff0c;需要后端审计代码&#xff0c;而且应该要改ip&#xff0c;改成自己本地&#xff0c;burp抓包看一下 改X-Forwarded-For:127.0.0.1 得到flag flag{74242eb7-844f-4638-8aae-9ec37870d585}

一种专为 API 而生的 JSON 工具,适合中小型前后端分离的项目(附源码)

前言 在当前的软件开发领域&#xff0c;前后端分离的开发模式越来越受到青睐。然而&#xff0c;这种模式也带来了一些挑战&#xff0c;如接口开发和文档维护的成-本高、前后端沟通效率低下、以及频繁的接口变更导致的开发周期延长等问题。 为了解决这些痛点&#xff0c;需要一…

MyBatis的基本注解

常用注解 基本注解&#xff1a;实现简单的增删改查操作 结果映射注解&#xff1a;实现结果的映射关系&#xff0c;也可以完成级联映射 动态SQL注解&#xff1a;实现动态SQL的内容 基本注解&#xff1a; 增加操作&#xff1a;Insert 删除操作&#xff1a;Delete 修改操作…