R数据分析(6)-RCS限制性立方样条

所用R包:rms

核心思想

  1. 节点 (Knots):将连续变量 X 的取值范围划分为多个区间。常见的节点数量是 4 或 5 个,通常放置在分位数上(如 5th, 35th, 65th, 95th)。
  2. 基函数 (Basis Functions):为每个区间创建一个三次多项式,但有一个关键限制:要求在节点处函数、一阶和二阶导数都是连续的。这确保了整个曲线非常平滑,没有突兀的“拐角”。
  3. 限制 (Restriction):在首尾两个节点之外的区域,函数被限制为线性。这个限制非常重要,因为它避免了在数据稀疏的尾部出现不可靠的、过拟合的剧烈波动,使得外推更加稳定。
#数据准备
# 假设你的数据框叫 df,因变量是 y,自变量是 x
ddist <- datadist(df) # 为数据框中的所有变量计算分布摘要
options(datadist = "ddist") # 将分布摘要设置为全局选项

# 线性回归模型
fit_ols <- ols(y ~ rcs(x, 4), data = df) # 4 个节点(包括首尾两个)
# 使用 rms 包的 Predict 和 plot 函数
pred <- Predict(fit, x,ref.zero=TRUE)  #添加ref.zero=TRUE用于求回归系数  fun=exp 用于求or
plot(pred, 
     xlab = "Continuous Variable X",
     ylab = "Estimate",
     main = "Restricted Cubic Spline Plot")
#ggplot2版本
pred_df <- as.data.frame(pred)
ggplot(pred_df, aes(x = x, y = yhat)) +
  geom_line(linewidth = 1, color = "blue") +
  geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2, fill = "blue") +
  labs(x = "Continuous Variable X", 
       y = "Predicted Outcome Y",
       title = "RCS Plot with 95% CI") +
  theme_classic()

# 逻辑回归模型
fit_lrm <- lrm(y_binary ~ rcs(x, 4), data = df)
# Cox 比例风险模型
fit_cph <- cph(Surv(time, status) ~ rcs(x, 4), data = df)
pred <- Predict(fit, x, fun = exp, ref.zero = TRUE) # fun = exp 将 log(OR) 转换为 OR

易错点

  • 在RCS逻辑回归模型中,β、OR、HR是通过比较预测值与参考点来计算的,而不是通过“减去x-1”的方式。
  • 正确的方法是选择一个参考点,然后计算所有x点相对于该参考点的OR。
  • pred <- Predict(fit, x, fun = exp, ref.zero = TRUE) # fun = exp 将 log(OR) 转换为 OR
  • ref.zero = TRUE 会自动设置参考点(通常为中位数),并计算每个x相对于参考点的OR。
  • 输出中的yhat就是OR值,而不是直接预测的概率或log(odds)。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇