✨ 欢迎关注Python机器学习AI ✨
本节介绍:基于RCS分析非线性关系结合Bootstrap置信区间的逻辑回归模型,数据采用模拟数据无任何现实意义 ,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。文末提供高效的AI工具~!
✨ 论文信息 ✨
在文献中,RCS(限制性立方样条)用于建模后NACT Ki-67表达水平与BCSS(无病生存期)之间的非线性关系,从而揭示不同患者群体(如ER+/HER2-、HER2+、TNBC)在Ki-67表达水平与预后之间的复杂关联。RCS帮助捕捉和描述这些非线性效应,提供更精确的风险预测
RCS是一种用于建模非线性关系的统计方法,特别是在回归分析中。它通过将数据的自变量(连续特征)分段拟合不同的多项式函数,以更灵活地描述其与因变量之间的关系
这是在模拟数据上的模拟实现,横坐标代表年龄,从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 值
)
这里plot_rcs_results为自定义函数,用于可视化通过rcs_logistic_regression_bootstrap函数得到的RCS分析结果,绘制特征(如“Age”)与目标变量之间的比值比(OR)曲线及其95%置信区间,并可选择显示p值,如果指定输出路径,还能保存为PDF文件
当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!
✨ 书籍推荐 ✨
无论你是零编程基础的科研新手,还是想提升机器学习技能的医学科研工作者,这本书都能带你从入门到进阶,掌握Python数据分析+医学AI应用的全流程技能
✨ AI工具推荐 ✨
往期推荐
期刊配图:模型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倍交叉验证
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考
