欢迎光临散文网 会员登陆 & 注册

R全套代码教你画限制性立方样图

2023-08-16 11:25 作者:郑老师妙趣横生统计学  | 我要投稿


2023年郑老师多门科研统计课程:多次直播,含孟德尔随机化方法

在科学研究中,我们经常构建回归模型来分析自变量和因变量之间的关系。大多数的回归模型有一个重要的假设就是自变量和因变量呈线性关联。

当自变量和因变量之间为非线性关系时,可以将连续型变量转化为分类变量,但是分类变量的类别数目以及节点位置的选择一般会带有主观性并且分类变量会损失部分信息;

也可以直接拟合自变量和因变量之间的非线性关系,但是直接构建多项式回归可能存在过度拟合、共线性等问题。

因此,一个更好的解决方法是拟合自变量与因变量之间的非线性关系,限制性立方样条(RCS)就是分析非线性关系的最常见的方法之一。

回归样条本质上是一个分段多项式,但它一般要求每个分段点上连续并且二阶可导。在建立限制性立方样条的时候,节点(knots)数量的选择决定曲线的形状, 或者说平滑程度,大多数研究者推荐的节点为3-5个。在《Regression Modeling Strategies》这本书中,Harrell建议节点数为4时,模型的拟合较好,同时可以兼顾曲线的平滑程度和避免过拟合造成的精度降低。

但是我们作为医学统计学的运用者,就和之前郑老师说的那样,我们只要学会把一头猪放进机器等着香肠制作完成就好,至于步骤是怎么制作的,交给统计学家去完成就好了。

适用条件

首先我们要知道为什么去使用限制性立方样条。

1、将连续型变量转化为分类变量,但是分类变量的类别数目以及节点位置的选择一般会带有主观性并且分类变量会损失部分信息;

2、可以直接拟合自变量和因变量之间的非线性关系,于是我们常用的方法就是绘制限制性立方样条图。

具体条件如下:

①数据无法用一条直线描述;

②数据多项式回归效果一般好;

③本身想要了解某个事件前后变化的趋势;

④发现数据在某个节点前后趋势发生了改变。


下面我将结合案例给大家运行一下如何应用R语言进行RCS的绘制

本例子以睡眠时间为例,当你想进一步了解具体睡眠时间对心血管之间的变化趋势,但又不能用线性关系去解释的时候,这就可以用到限制性立方样条。

首先安装加载一些包

加载相关的包

然后导入数据集

操作所需数据请大家在公众号后台回复“样图”获取

变量因子化

接着为后续程序设定数据环境,也就是打包数据,这一步在预测模型中也常做

然后我们拟合logistic回归的限制性立方样条

【心血管与高血压之间的关系(xinxueguan是结局指标) (da049是睡眠时间3是拟合曲线的时候采用三个节点)后面的+都是一些协变量,当然我没有完全放进去】

以上的3这个节点数量是自己选的,严谨起见还是得让系统选择一个节点数

*AIC实际上是评估拟合效果的,选AIC绝对值最小的就行,涉及到复杂的统计原理,我也不是很清楚
生成预测值,并作图 (exp相当于把预测值转换成了OR)

剩下来就是画图

从图里可以看到睡眠时间和冠心病发生的风险呈现显著的非线性关系,睡眠时间小于6小时会显著增加心血管疾病的发病率,并且在睡眠时间高于9小时,心血管疾病的发病率也有增加的趋势,整体呈现U型关系。

当然我们也可以对性别进行分层,代码如下

剩下就是画图,以下一大串的就是进行图行绘制,基本上不用进行更改

结果图

这样就可以看出男性1和女性2之间差别了,结果显示同样呈现U型趋势的情况下,睡眠时间对女性心血管疾病的发病更为易感。
另外,如果是生存分析的话,拟合回归样条的曲线的代码也很相似,区别在于一个因变量是二分类的,一个是生存资料,所以在拟合模型时,会有一定差异

fit<- cph(Surv(livetime,xinxueguan) ~ rcs(da049,3)+sex+age+ bmi1+ wenhua+xiyan,data=be)

其他的代码都是类似

详情请点击下方:

https://mp.weixin.qq.com/s?__biz=MzAwOTYyMDY3OQ==&mid=2650401641&idx=3&sn=d83cb2780c53ad52aa72cd4c6a946aae&chksm=835196c1b4261fd7c0114ae78de60f0283fbb92fd2362ef37d233707dd8dac0ca10427946f88&scene=21#wechat_redirect


R全套代码教你画限制性立方样图的评论 (共 条)

分享到微博请遵守国家法律