rcssci包横空出世,限制性立方样条全自动切点靓图

news2024/11/27 0:37:32

z致敬前辈:R语言统计与绘图

图片

仅以本篇2800字真文一并纪念工作11年来潦倒的收入、间歇的鸡血、憋屈的倔强、幽暗的过往和心中的远方。

1 缘起

Restricted cubic splines (RCS)近年来火遍各类SCI期刊,初次接触的小伙伴们可以去搜索笔者前期的2篇RCS文章补充一下基础知识(链接)。笔者撰写SCI时候也经常苦恼,即使有代码积累但依然每次都要修改长长的代码,精雕细琢的修改图形参数,而且随着变量越多需要修改的就越多。忽然有一天,笔者想,为何不自己开发一个R包,这样你爽我爽大家爽不好吗?笔者搜索google与网上教程,RCS图形不够优美也没有OR/HR参考线条及不同形态cutoff的选取介绍(貌似深度思考的文章就属本公众号了),仅有的R包ggrcs也是过于简单且密度图错误Y2轴非动态比例。于是,笔者本着对小伙伴们负责任的精神说干就干,开发了rcssci包。至于为什么叫rcssci,后面3个字母你懂的。

2. 论文中常见RCS图形型态及切点选取

本章开始,还是要再总结升华一下RCS的型态与切点概念,rcssci包就是基于不同型态进行了4套图形的同步输出。

2.1  U/∩/L型态3种类

非线性关系常见U型、倒U (∩) 型、J型以及S型,4者均可依据肉眼形态判断近似最符合的形态,但是有时候L与J型曲线区分的并不是很清楚,需要测试是否最后有翘尾。笔者将非线性型态总结为泛u型(U/J)、泛∩型、泛L型(平原/L/log/-log/S),对应ushap、nshap、lshap等3种输出图。R下图中红色点可通过效应量OR/HR最小或最大实现,蓝色点通过断点实现。

图片

2.2  knot与波动参数refvalue

Knot(缩写K)一般选3-7,K选3或4最常见。有时候K=7变的太复杂,如果AIC十分接近,可以降低K到4-5等。K很重要,会严重影响RCS主拟合线和95%CI形态,Quantiles(缩写Q)也会影响RCS主拟合线和95%CI的形态。K的获取是拟合K 3-7后模型AIC min对应的K。设定好K数后,rms函数会拟合默认的knot节点+分位数Q,例如knot=3,自动拟合的是Q10、Q50、Q90。此时K绑定Q分位数。少见一些论文值得的会代码修改knot中的Q位置。如要手动修改代码见下图中。

图片

指定K+默认Q参数后,再思考95%CI位置参数(波动)refvalue。Refvalue同时改变了阴影位置及波动的型态。当位置参数refvalue未明确的时候,默认是变量x的中位数,即refvalue=prob 0.5=P50;refvalue也可设为第1十分位数,即P10=prob 0.1时,如下图。rrcssci包总结了3型态2趋势场景:

图片

图片

①表达下降或上升趋势,选择prob(下图中P)相对位置。例如文献https://doi.org/10.1016/j. ecoenv.2022.113183,选择prob=0.1即P10。②表达U/∩/L型切点cutoff处出现趋势逆转,rcssci包会默认输出cutoff值并记录在y轴标签。

3. rcssci包适用范围图形规则

rcssci包V1.0版核心函数有3个,rcssci_cox、rcssci_logistic、rcssci_linear,分别适合于模型为等比例风险cox模型,经典二分类logistic和一般线性模型。前2者y轴为效应量HR、OR;后者y轴为原始y。rcssci包V1.0版Y为OR/HR/y效量非线性剂量关系,拟合理想的结果笔者概况为:

①剂量关联呈现出典型的非线性U型、倒U型、J型、直线型等型态;②线性关联,呈现上升趋势或下降趋势;③非线性关联探索cutoff,将x变量2分、3分类,再进行后续分段/组分析。

rcssci包在工作目录(setwd对应的文件夹)下自动输出4套RCS双坐标图(PDF版,方便大家后续ppt编辑),图例包括总P值、非线性趋势P值,切点包括U型、∩型、及L型等等非线性形态切点的自动获取。4套RCS双坐标图分别为:fig.proball.pdf,fig.ushapall.PDF,fig.nshapall.PDF,fig.lshapall.PDF。①fig.proball.pdf,ABCD子图,均为位置参数refvalue=prob时RCS趋势图。②fig.ushapall.PDF,ABCD子图,均为位置参数refvalue=prob时可能的更具有解释性的U型(U/J)图。③fig.nshapall.PDF,ABCD子图,均为位置参数refvalue=prob时可能的更具有解释性的倒U(n)型图。④fig.lshapall.PDF,ABCD子图,均为位置参数refvalue=prob时可能的更具有解释性的L(L/平原/log/-log/S)型图。rcssci_cox、rcssci_logistic可以输出带直方图或密度图的双坐标图,rcssci_linear则不输出直方图或密度图。

图片

RCS判定规则与步骤如下:

图片

4 rcssci包实战案例与代码

rcssci包V1.0版核心函数有3个,rcssci_cox、rcssci_logistic、rcssci_linear。笔者内置了团队数据sbpdata.rdata文件(论文发表中,故仅选择性抽取了原始数据10%)为纵向数据的SBP收缩压与全因死亡关联数据。以下实战中原始sbpdata.rdata 不等于包内置sbpdata.rdata (仅为了达到Rpackage上传需要5s内演算要求)。

4.1 实战cox分析

加载rcssci包后,一行命令搞定cox分析rcs绘制,prob推荐0.1,不写默认0.5。

rcssci_cox(data=sbpdata, y = "status",x = "sbp",covs=c("age","gender"),time = "time", prob=0.1)

RCS一行代码输出四套图,见上述《RCS判定规则与步骤》。

图片

图片

过程解析:rms包做RCS默认prob=0.5中位数。但是很多时候图形跑出来并非均衡对称。这时候,灵活无敌可爱的rcssci,可以仿照模板论文设定prob位置参数(笔者建议设定prob=0.1)进行趋势与cutoff的自动输出了。本例AIC最小原则,自动选择knot=4,采用默认Q分位数为0.05 0.35 0.65 0.95。结果解析:在setwd()工作路径下,自动输出4套RCS双坐标图分别为:fig.proball.pdf,fig.ushapall.PDF,fig.nshapall.PDF,fig.lshapall.PDF。本例研究结果为:P-overall<0.001,P non-linear <0.001,表明总的检验有意义,非线性关联检验也有意义,呈现出Ushap关联。由于最高点不呈现n型分布本数据不适合采用n型态,由于右侧拖尾阴影过高且翘尾,本数据也不适合采用L型,prob=0.1更适合直线下降或上升,故案例文件最终采用U型曲线图。RCS分析后可为x是否存在非线性关联与型态,及其切点为后续cox分析中x的P-trend,或四分位,或2分类提供分类依据。这里需要注意,本例仅作为数据演示,模拟数据不符合PH假设后续仍然需要进行其他非等比例cox分析,将在V2.0版本补充。

4.2 实战logistic分析

加载rcssci包后,一行命令搞定logistic分析rcs绘制,prob推荐0.1,不写默认0.5。结果解析同cox。

图片

rcssci_logistics(data=sbpdata, y = "status",x = "sbp",covs=c("age","gender"), prob=0.1)

4.3 实战linear分析

加载rcssci包后,一行命令搞定一般线性分析rcs绘制,prob推荐0.1,不写默认0.5。设置结果输出到目录D:/temp/rcssci。

图片

rcssci_linear (data=sbpdata, y = "status",x = "sbp",covs=c("age","gender"), prob=0.1, filepath= “D:/temp/rcssci”)

结果解析:本例研究结果为:P-overall<0.001,P non-linear <0.001,表明总的检验有意义,非线性关联检验也有意义,呈现出平原阈值关联。大致在60岁-80岁,为平原阈值。y为连续型,往往更偏重描述曲线递增或递减趋势。本例从L型断点发现80岁是个断点。

5. 发散思维

5.1 RCS能否证实切点

笔者测试觉得,如果根据最小AIC评价且严格测试K Q,且K在3-4以内,拟合出的曲线较为平滑,是可以证实切点的。当然,如果有时候K太大,例如K=7的AIC最小曲线拟合过度复杂,尤其是小样本研究,此时得到的切点更多是提供线索。Q最好保持默认,也可以选择平均分配,选取剧烈变化的区域,数据变化复杂的地方多设置节点,更稳定的地方少设置节点。

5.2 rms包的ref.zero=T/F 和fun转换

图片

图片

图片

5.3 SCI中的RCS套路

图片

图片

图片

图片

5.4 U型或n型3切点

rcssci包V1.0版目前加入的是主流OR/HR/y值,可以探索x值的2分类切点。当需要探索x值3分类切点时,可尝试宽95%CI下限(设置ref.zero=F)与OR/HR=1的参考线交叉处就很可能是3分类的refvalue。当然HR、OR切点寻找方式还有很多,比如ROC曲线、xtile、KM法、GAM法、临床界值(适合组间不均衡)、Tertiles/Quartiles(适合组间均衡)等,能作出阳性结果就是好方法。最后,这些方法其实都是辅助,统计方法的切点有没有临床意义才更加关键,有时候不如直接看看临床界值。

图片

5.5 非线性关联的套路

非线性关系常见的解决方法:多项式回归、分段回归。但是多项式回归中,容易共线性、过拟合、全局性等情况;分段回归中类别数目和节点位置的选择带有主观性,分类往往会损失信息,RCS就是目前分析非线性关系的最常见最流行的方法。RCS=限制性(knot约束)立方样条,样条回归本质上其实是一个分段多项式,特别之处是节点knot上连续且二阶可导保证了曲线平滑。更多非线性模型见,https://www.r-bloggers.com/2014/09/an-exercise-in-non-linear-modeling。

图片

6 tips

这是笔者第一次开发R包,开发期间各种bug层出不穷。不过,为了不给小伙伴们添堵,笔者把Hadley Wickham的R packages通篇读了一遍,同时配合包制作了本章RCS攻略。可以负责任拍脑袋的说,是全球最详尽的RCS攻略了。哈哈,英文还没做操作手册呢,所以中文本公众号独享。本文论述的rcssci 包V1.0版为试水之作,第一次安装需要加装Rtools,不足之处或者报错还请加笔者好友私聊。各位小伙伴如果有什么强烈需求,也可在本文下方留言许愿并联系笔者提供你的数据,后续更新没准就会一一实现功能。

参考文献:

  1. Association of troponin level and age with mortality in 250 000 patients: cohort study across five UK acute care centres. BMJ. 2020;369:m2225. Published 2020 Jun 18. doi:10.1136/bmj.m2225

  2. Lv YB, Gao X, Yin ZX, et al. Revisiting the association of blood pressure with mortality in oldest old people in China: community based, longitudinal prospective study. BMJ. 2018;361:k2158. Published 2018 Jun 5. doi:10.1136/bmj.k2158

  3. https://www.nature.com/articles/s43587-022-00201-3

  4. Hu X, Nie Z, Ou Y, et al. Air quality improvement and cognitive function benefit: Insight from clean air action in China. Environ Res. 2022;214(Pt 4):114200. doi:10.1016/j.envres.2022.114200

  5. Ma Y, Liang L, Zheng F, Shi L, Zhong B, Xie W. Association Between Sleep Duration and Cognitive Decline. JAMA Netw Open. 2020;3(9):e2013573. Published 2020 Sep 1. doi:10.1001/jamanetworkopen.2020.13573

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

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

相关文章

Android wifi disable分析

总体流程 老套路基本不变&#xff1a; WifiSettings 通过 WifiManager 下cmd 给 WifiServiceWifiService 收到cmd后&#xff0c;先完成一部分列行检查&#xff08;如UID的权限、是否airPlayMode等等&#xff09;&#xff0c;之后将cmd下发给到WifiControllerWifiController 收…

ORACLE数据库实验总集 实验三 Oracle数据库物理存储结构管理

一、实验目的 &#xff08;1&#xff09;掌握 Oracle数据库数据文件的管理 &#xff08;2&#xff09;掌握 Oracle数据库控制文件的管理 &#xff08;3&#xff09;掌握 Oracle数据库重做日志文件的管理 &#xff08;4&#xff09;掌握 Oracle数据库归档管理&#xff0c; 二、…

周周爱学习之Redis重点总结

redis重点总结 在正常的业务流程中&#xff0c;用户发送请求&#xff0c;然后到缓存中查询数据。如果缓存中不存在数据的话&#xff0c;就会去数据库查询数据。数据库中有的话&#xff0c;就会更新缓存然后返回数据&#xff0c;数据库中也没有的话就会给用户返回一个空。 1.缓…

springboot整合阿里云oss上传图片,解决无法预览的问题

1.前置工作 需要申请一个域名,需要备案&#xff0c;对接这个踩了不少坑,写的很详细,guan fang tong guo bu 了,各位参考别的博客结合看吧,主要是域名配置,还有看service里面的实现 2.进入控制台 bucket列表 选择bucket 选择域名管理 复制你申请的域名,比如域名:abkhkajs…

苹果iOS免签应用打包,书签类顶部域名如何隐藏?

在iOS开发中&#xff0c;由于App Store的严格审核流程和各种政策限制&#xff0c;免签打包成为一些企业和开发人员选择的方案&#xff0c;以便更灵活地分发iOS应用。在这个过程中&#xff0c;许多开发者希望隐藏或最小化安装过程中顶部域名的显示&#xff0c;以提供更加原生的用…

家用洗地机哪个品牌最好最实用?热门洗地机测评

随着社会的不断进步&#xff0c;我们逐渐意识到日常生活中的许多任务需要消耗大量的时间和体力。一个典型的例子是卫生清洁工作&#xff0c;尤其是在大面积地区&#xff0c;如大型建筑物、商场或工厂。这些任务不仅繁琐&#xff0c;还可能影响生活质量和工作效率。为了应对这一…

Hadoop学习笔记(HDP)-Part.06 安装OracleJDK

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

给腰不好的朋友设计和制作一个捡羽毛球的辅助装置

我们知道羽毛球运动不挑场地&#xff08;有防风塑料球和业余使用的网子可以购买&#xff09;&#xff0c;不需要专业器材和场地&#xff0c;不需要跑多远就可以开展&#xff0c;非常方便普通人锻炼。 而且针对现在的不良生活方式&#xff1a;久坐&#xff0c;看电脑手机&#…

unity 2d入门飞翔小鸟按钮点击功能且场景切换(二)

1、素材包获取 链接: https://pan.baidu.com/s/1KgCtQ_7wt2mlbGbIaMVvmw 提取码: xxh8 2、将素材全部拉进去 3、创建新的场景 并且将场景添加到build settings里面 4、脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityE…

JOSEF 单相电压继电器 WY-31A1 DC220V 过压动作,导轨安装

系列型号 单相 JY-45A1电压继电器&#xff1b;JY-45B1电压继电器&#xff1b; JY-45C1电压继电器&#xff1b;JY-45D1电压继电器&#xff1b; JY-41A1电压继电器&#xff1b;JY-41B1电压继电器&#xff1b; JY-41C1电压继电器&#xff1b;JY-41D1电压继电器&#xff1b; …

计算机毕业设计 基于SpringBoot的大学生双创竞赛项目申报与路演管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

深入探讨Guava的缓存机制

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;今天咱们聊聊Google Guava的缓存机制。缓存在现代编程中的作用非常大&#xff0c;它能提高应用性能&#xff0c;减少数据库压力&#xff0c;简直就是性能优化的利器。而Guava提供的缓存功能&#xff0c;不仅强大…

【开源】基于JAVA的城市桥梁道路管理系统

项目编号&#xff1a; S 025 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S025&#xff0c;文末获取源码。} 项目编号&#xff1a;S025&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥…

数据结构(超详细讲解!!)第二十六节 图(中)

1.存储结构 1.邻接矩阵 图的邻接矩阵表示法&#xff08;Adjacency Matrix&#xff09;也称作数组表示法。它采用两个数组来表示图&#xff1a; 一个是用于存储顶点信息的一维数组&#xff1b;另一个是用于存储图中顶点之间关联关系的二维数组&#xff0c;这个关联关系数组被…

基于ROPNet项目训练modelnet40数据集进行3d点云的配置

项目地址&#xff1a; https://github.com/zhulf0804/ROPNet 在 MVP Registration Challenge (ICCV Workshop 2021)&#xff08;ICCV Workshop 2021&#xff09;中获得了第二名。项目可以在win10环境下运行。 论文地址&#xff1a; https://arxiv.org/abs/2107.02583 网络简介…

vue2项目中添加字体文件

vue2项目中添加字体文件 1、下载相关文件&#xff0c;放置文件夹中&#xff0c;这里我是在assets文件中新建了fontFamily 2、在assets文件中新建css文件 3、在页面中使用 <style lang"less" scoped> import ../../assets/css/fonts.less;.total-wrap {displa…

深度学习火车票识别系统 计算机竞赛

文章目录 0 前言1 课题意义课题难点&#xff1a; 2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别部分实现代码 3 实现效果4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 图像识别 火车票识别系统 该项目较为新颖&#xff0c;适…

详细介绍如何使用 SSD 进行实时物体检测:单次 MultiBox 探测器-含源码

介绍 在实时对象检测中,主流范例传统上采用多步骤方法,包括边界框、像素或特征重采样以及高质量分类器应用的提议。虽然这种方法已经实现了高精度,但其计算需求往往阻碍了其对实时应用的适用性。然而,单次多框检测器 (SSD) 代表了基于深度学习的对象检测的突破性飞跃。SSD…

rust中动态数组Vec的简单使用

在Rust中&#xff0c;Vector&#xff08;简称Vec&#xff09;是一个动态数组数据结构&#xff0c;它可以动态地增加或减少其容量。Vec是Rust标准库中的一个常见类型&#xff0c;非常适合用于存储和操作一系列相同类型的值。 Vec其实是一个智能指针&#xff0c;用于在堆上分配内…

自定义软件app定制开发的需求和趋势|企业网站小程序搭建

自定义软件app定制开发的需求和趋势|企业网站小程序搭建 随着智能手机的普及和移动互联网的快速发展&#xff0c;移动应用程序&#xff08;App&#xff09;成为人们日常生活和工作中必不可少的一部分。然而&#xff0c;市面上已有的应用程序并不能完全满足用户的个性化需求&…