R语言如何绘制固定起止点、单调递减的无台阶平滑生存曲线
你可以使用scam包(形状约束加性模型)实现满足约束的平滑曲线,该方法支持自定义单调约束,同时可以强制拟合曲线经过指定的起止点,完全符合生存曲线的取值要求。
首先安装所需依赖包:
install.packages("scam")
完整拟合与绘图代码如下:
library(ggplot2) library(scam) # 原始测试数据 df1 <- data.frame( y = c(1,0.99,0.97,0.95,0.94,0.94,0.82,0.72,0.58,0.34,0.20,0.12,0.11,0), time = c(3,4,7,8,10,11,13,14,15,17,20,22,23,24) ) # 加入要求的固定起止点,强制拟合曲线过该位置 df_constraint <- rbind( data.frame(time = 0, y = 1), df1, data.frame(time = 24, y = 0) ) # 拟合单调递减的约束加性模型,bs="mpd"表示单调递减P样条基底 scam_fit <- scam(y ~ s(time, bs = "mpd"), data = df_constraint) # 生成连续预测点用于绘制平滑曲线 pred_df <- data.frame(time = seq(0, 24, length.out = 200)) pred_df$y <- predict(scam_fit, newdata = pred_df) # 可视化结果 ggplot() + geom_point(data = df1, aes(time, y)) + geom_line(data = pred_df, aes(time, y), color = "#2166ac", linewidth = 1)
上述代码生成的平滑曲线会严格满足所有要求:
- 起点固定为
x=0,y=1 - 终点固定为
x=24,y=0 - 全程为单调递减函数,所有点y值均在0~1范围内,符合生存曲线的取值逻辑。
内容的提问来源于stack exchange,提问作者aspire57
相关产品推荐
相关产品推荐

