R平滑生存曲线力开始和结束

R smooth survival curve force start and end

我想平滑一条生存曲线,使其没有 'steps'。 我正在尝试使用以下数据:

library(ggplot2)
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))
ggplot(df1, aes(time,y)) + geom_point() +
  geom_smooth(method = "gam", formula = y ~ poly(x, 2),se=F) 

但是平滑线的起点高于 1,终点低于 0(这对于生存图来说是不可能的)。 怎么能适合这样的一行:

  1. 行开始于 y,x 值= 1,0
  2. 结束于 y,x 值=0,24
  3. 总是单调递减函数

ylim(0:1) 添加到您的代码中:

ggplot(df1, aes(time,y)) + 
  geom_point() +
  ylim(0:1) +
  geom_smooth(method = "gam", formula = y ~ poly(x, 2),se=F) 

根据 IRTFM 评论,我找到了答案,代码如下:

library(cobs)
library(ggplot2)
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))

con2 <- rbind(c( 1,min(df1$time),1), 
          c(-1,max(df1$time),0)) 

Sb1 <- cobs(df1$time,df1$y, constraint="decrease", nknots=4,pointwise= con2,
        degree = 2)

summary(Sb1)
plot(Sb1, main='Survival Curve')

谢谢