期刊配图:基于RCS分析非线性关系结合Bootstrap置信区间的逻辑回归模型

机器学习算法人工智能与算法

picture.image

✨ 欢迎关注Python机器学习AI ✨

本节介绍:基于RCS分析非线性关系结合Bootstrap置信区间的逻辑回归模型,数据采用模拟数据无任何现实意义 ,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。文末提供高效的AI工具~!

✨ 论文信息 ✨

picture.image

picture.image

在文献中,RCS(限制性立方样条)用于建模后NACT Ki-67表达水平与BCSS(无病生存期)之间的非线性关系,从而揭示不同患者群体(如ER+/HER2-、HER2+、TNBC)在Ki-67表达水平与预后之间的复杂关联。RCS帮助捕捉和描述这些非线性效应,提供更精确的风险预测

RCS是一种用于建模非线性关系的统计方法,特别是在回归分析中。它通过将数据的自变量(连续特征)分段拟合不同的多项式函数,以更灵活地描述其与因变量之间的关系

picture.image

这是在模拟数据上的模拟实现,横坐标代表年龄,从35岁到70岁,纵坐标代表OR(比值比),即年龄与目标变量的关系强度。OR为1时,表示没有影响;OR大于1时,表示风险增加;OR小于1时,表示风险降低,蓝色线条表示估算的OR,阴影区域表示该OR的95%置信区间(CI)

根据图形,可以看到年龄与OR之间的关系呈现出明显的非线性。在35岁到53岁之间,OR相对平稳且接近1,表示此年龄段内,目标变量的发生风险几乎没有变化,然而,随着年龄增大,OR明显上升,尤其是53岁以后,表示高龄组的风险明显增加,P for Overall < 0.05 表示总体模型显著,即年龄对目标变量的影响显著,P for Nonlinear < 0.05 表示年龄与目标变量之间的非线性关系也显著。因此,可以拒绝假设年龄对目标变量的影响是线性的

✨ 代码实现 ✨

  
import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  
plt.rcParams['font.family'] = 'Times New Roman'  
plt.rcParams['axes.unicode_minus'] = False  
import warnings  
# 忽略所有警告  
warnings.filterwarnings("ignore")  
path = r"Dataset.csv"  
df = pd.read_csv(path)  
import statsmodels.api as sm  
from scipy.stats import chi2  
# 创建 RCS 项的函数  
def create_rcs_terms(x, knots=None, n_knots=4):  
    x = np.asarray(x).flatten()  
    if knots is None:  
        if n_knots == 3:  
            knots = np.percentile(x, [10, 50, 90])  
        elif n_knots == 4:  
            knots = np.percentile(x, [5, 35, 65, 95])  
        elif n_knots == 5:  
            knots = np.percentile(x, [5, 27.5, 50, 72.5, 95])  
        else:  
            knots = np.percentile(x, np.linspace(5, 95, n_knots))  
    knots = np.sort(knots)  
    k = len(knots)  
    rcs_terms = [x]  
    for j in range(k - 2):  
        term = np.power(np.maximum(0, x - knots[j]), 3)  
        term -= np.power(np.maximum(0, x - knots[k - 2]), 3) * \  
                (knots[k - 1] - knots[j]) / (knots[k - 1] - knots[k - 2])  
        term += np.power(np.maximum(0, x - knots[k - 1]), 3) * \  
                (knots[k - 2] - knots[j]) / (knots[k - 1] - knots[k - 2])  
        term /= (knots[k - 1] - knots[0]) ** 2  
        rcs_terms.append(term)  
    return np.column_stack(rcs_terms), knots  
........

自定义函数使用限制性立方样条(RCS)对特征与目标变量之间的非线性关系进行建模,并通过Bootstrap方法进行逻辑回归分析,计算并返回特征的比值比(OR)及其置信区间,同时进行统计检验,评估整体和非线性效应的显著性

  
rcs_results_age = rcs_logistic_regression_bootstrap(  
    df,                            # 输入的 DataFrame,包含所有特征数据(包括目标变量和特征)  
    df['target'],                  # 目标变量 y,即二分类响应变量(例如,0 或 1)  
    feature_idx=0,                 # 指定特征所在列的索引,这里是第0列,是 'age' 的列  
    feature_name='age',            # 特征的名称,这里为 'age'  
    n_knots=4,                     # 设置 RCS (Restricted Cubic Splines) 的结点数,通常是 4 或更多  
    n_points=100,                  # 预测时使用的点数,即 RCS 曲线插值的点数,影响图形的平滑度  
    reference_value=None,          # 设置参考值,通常选择特征的中位数或者某个特定值,如果为 None,则默认使用中位数  
    n_bootstrap=1000,              # Bootstrap 采样的次数,决定了模拟的次数,越多越精确,但计算量越大  
    ci_percentile=95,              # 计算置信区间的百分比,常见为 95%(即 2.5% 和 97.5% 分位数)  
    random_seed=42                 # 随机种子,确保结果的可复现性,设置为一个整数值,例如 42  
)

使用自定义函数限制性立方样条(RCS)对“age”特征与目标变量之间的非线性关系进行逻辑回归分析,并通过1000次Bootstrap采样计算95%的置信区间,返回该特征的比值比(OR)及其置信区间

这里是因为因变量是二分类所以利用RCS作为自变量的一部分引入到如逻辑回归模型中,以捕捉非线性效果,如果因变量为连续性变量应该修改拟合线性回归模型,直接将RCS应用于自变量,以捕捉它们之间的非线性关系

  
plot_rcs_results(  
    rcs_results_age,                # 传入分析结果  
    feature_name='Age',         # 特征名称  
    output_pdf='rcs_age_plot.pdf',  # 保存为 PDF 文件  
    show_p_value=True           # 显示 p 值  
)

picture.image

这里plot_rcs_results为自定义函数,用于可视化通过rcs_logistic_regression_bootstrap函数得到的RCS分析结果,绘制特征(如“Age”)与目标变量之间的比值比(OR)曲线及其95%置信区间,并可选择显示p值,如果指定输出路径,还能保存为PDF文件

当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息

picture.image

✨ 该文章案例 ✨

picture.image

在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。

同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。

✨ 介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。

更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。

✨ 群友反馈 ✨

picture.image

✨ 淘宝店铺 ✨

picture.image

请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!

✨ 书籍推荐 ✨

无论你是零编程基础的科研新手,还是想提升机器学习技能的医学科研工作者,这本书都能带你从入门到进阶,掌握Python数据分析+医学AI应用的全流程技能

✨ AI工具推荐 ✨

picture.image

往期推荐

期刊配图:模型SHAP解释特征类别柱状图、饼图与蜂巢图的组合展示

期刊复现:基于自动机器学习的预测模型构建及其残差和部分依赖分析

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况最优模型的SHAP解释

期刊复现:单变量特征降维与共线性分析结合RFE集成排名进行特征筛选下的组合拳流程

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况优化与最优模型选择可视化

期刊复现:基于相关系数与AUC值优化特征选择剔除冗余特征精简模型(附代码)

期刊复现:如何正确使用LASSO进行二分类特征选择?避开常见误区,掌握实用技巧

期刊复现:融合聚类与多分类转二分类的亚型可解释SHAP机器学习模型构建

期刊复现:基于LightGBM、XGBoost与RF的Lasso回归堆叠模型在连续和分类特征上的模型解释

期刊复现:基于LightGBM、XGBoost与RF的堆叠模型贝叶斯优化调参与Lasso回归元模型,结合10倍交叉验证

picture.image

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动 XR 技术的探索与实践
火山引擎开发者社区技术大讲堂第二期邀请到了火山引擎 XR 技术负责人和火山引擎创作 CV 技术负责人,为大家分享字节跳动积累的前沿视觉技术及内外部的应用实践,揭秘现代炫酷的视觉效果背后的技术实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论