我想从Weibull分布模拟左截断的故障时间数据。我的目标是模拟与实际数据相对应的数据,并通过拟合Weibull回归模型来检索系数(x1,x2,x3,x4和x5)。在此,“ xt”表示研究开始时个体的年龄,“ Tm”变量表示被诊断出患有某种疾病的年龄。但是每当我进行回归分析时,我都会收到此警告消息
Warning message:
In Surv(xt, time_M, event_M) : Stop time must be > start time, NA created```
这是我的尝试:
N = 10^5
H <- within(data.frame(xt=runif(N, 30, 80), x1=rnorm(N, 2, 1), x2=rnorm(N, -2, 1)), {
x3 <- rnorm(N, 0.5*x1 + 0.5*x2, 2)
x4 <- rnorm(N, 0.3*x1 + 0.3*x2 + 0.3*x3, 2 )
lp1 <- -2 + 0.5*x1 + 0.2*x2 + 0.1*x3 + 0.2*x4
lp2 <- -2 + 0.5*x1 + 0.2*x2 + 0.1*x3 + 0.2*x4
lp3 <- 0.5*x1 + 0.2*x2 + 0.1*x3 + 0.2*x4
lp4 <- 0
P1 <- exp(lp1)/(exp(lp2)+ exp(lp3)+1+exp(lp1))
P2 <- exp(lp2)/(exp(lp1)+ exp(lp3)+1+exp(lp2))
P3 <- exp(lp3)/(exp(lp2)+ exp(lp1)+1+exp(lp3))
P4 <- 1/(exp(lp2)+ exp(lp3)+exp(lp1)+1)
mChoices <- t(apply(cbind(P1,P2,P3,P4), 1, rmultinom, n = 1, size = 1))
x5 <- apply(mChoices, 1, function(x) which(x==1))
lp <- 0.05*x1 + 0.2*x2 + 0.1*x3 + 0.02*x4 + log(1.5)*(x5==1) + log(5)*(x5==2) + log(2)*(x5==3)
Tm <- qweibull(runif(N,pweibull(xt,shape = 7.5, scale = 82*exp(lp)),1), shape=7.5, scale=82*exp(lp))
Cens <- 100
time_M <- pmin(Tm,Cens)
event_M <- time_M == Tm })
res.full_M <- weibreg(Surv(H$xt,H$time_M, H$event_M) ~ x1 + x2 + x3 + x4 + factor(x5), data = H)
任何人都可以帮助我修改代码,以便让我有一个开始年龄(研究开始时从30岁开始)和失败时间(一个人被诊断出患有某种疾病的年龄),因此我们将起始时间lp <- 0.05*x1 + 0.2*x2 + 0.1*x3 + 0.02*x4 + log(1.5)*(x5==1) + log(5)*(x5==2) + log(2)*(x5==3))
您想要(可能是审查)从30岁到诊断的时间。您有两个选择:使用“生存时间”或患者30岁生日的日期及其诊断日期。使用前者更容易,因为更容易指定检查速率。
但是,我对您的说明的阅读告诉我,[[每个
参与者会在某个时候诊断出我感兴趣的状况。没有竞争风险。这合理吗?