我如何模拟R中的左截断的Weibull故障时间数据

问题描述 投票:0回答:1

我想从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))

r simulation survival-analysis weibull
1个回答
0
投票

您想要(可能是审查)从30岁到诊断的时间。您有两个选择:使用“生存时间”或患者30岁生日的日期及其诊断日期。使用前者更容易,因为更容易指定检查速率。

  1. 根据您选择的分布生成未经审查的生存时间(T)。
  2. 从Uniform(0,1)分布中提取一个随机数。如果此数字小于您的审查率,则对观察结果进行审查:转到3。否则,您的未经审查的观察到的生存时间为(T)。从Uniform(0,1)分布中绘制另一个随机变量(X)。设置T = T * X这是您审查的生存时间。
  3. 此过程将为您提供任何生存时间分布的数据,并按您选择的速率进行审查。

但是,我对您的说明的阅读告诉我,[[每个

参与者会在某个时候诊断出我感兴趣的状况。没有竞争风险。这合理吗?
© www.soinside.com 2019 - 2024. All rights reserved.