如何在 R 中模拟左截断的威布尔失效时间数据



我想模拟威布尔分布中的左截断失效时间数据。 我的目标是通过拟合 Weibull 回归模型来模拟数据并检索系数(我用于模拟的 x1、x2、x3、x4 和 x5(。这里的xt=runif(N, 30, 80)表示研究的开始,Tm <- qweibull(runif(N,pweibull(xt,shape = 7.5, scale = 82*exp(lp)),1), shape=7.5, scale=82*exp(lp))变量表示失败时间。但是每当我进行回归时,我都会收到此警告消息

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)

所以任何人都可以帮我修改这段代码,以便我可以得到小于相应失效时间 (time_M( 的起始年龄 (xt(,并且拟合回归模型的系数值接近以下等式中的系数值 (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岁生日的日期和诊断日期。 使用前者更容易,因为更容易指定您的审查率。

  1. 从您选择的发行版中生成未经审查的生存时间 (T(。
  2. 从均匀(0, 1(分布中抽取一个随机数。 如果此数字小于您的审查率,则观察结果被审查:转到 3。 否则,您未经审查观察到的生存时间为(T(。
  3. 从均匀(0, 1(分布中绘制另一个随机变量(X(。 设置 T = T*X。 这是你审查的生存时间。

此过程将为您提供来自任何生存时间分布的数据,并按您选择的速度进行审查。

但是,我对你的规范的阅读告诉我,每个参与者都会在某个时候被诊断出患有感兴趣的条件。 没有竞争风险。 这合理吗?

你的第二条评论令人困惑。 您是否有时间事件(a("从30岁到诊断的时间"(这意味着右审查(或(b("从疾病发作到诊断的时间"(这意味着左审查,也可能涉及右审查(。 如果(a(,我的解决方案仍然有效。 如果是(b(,则需要提供更多信息:

  • 从30岁到发病的时间过程(分布(是什么?
  • 何时/多久进行一次诊断程序?
  • 诊断程序给出以下每个结果的几率是多少:
  • 假阳性、假阴性、真阳性、真阴性

仍然可以生成所需的数据,但不像 (a( 中那么容易。

最新更新