让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。
如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!
若您愿意支持,欢迎直接打赏,将不胜感激!.
在R语言中生成右删失的Weibull分布数据可以通过以下步骤实现,结合生存函数和随机删失机制:
1. 生成完全数据
首先使用rweibull()生成完全数据(未经删失的生存时间):
set.seed(123)
n <- 100 # 样本量
shape <- 2 # Weibull形状参数
scale <- 1.5 # Weibull尺度参数
T_true <- rweibull(n, shape=shape, scale=scale) # 真实生存时间
2. 生成删失时间
右删失数据需要生成删失时间(通常独立于生存时间),然后取两者较小值:
# 方法1:固定时间点删失(如研究截止时间)
censor_time <- 2
T_obs <- pmin(T_true, censor_time)
status <- as.numeric(T_true <= censor_time) # 1=事件发生,0=删失
# 方法2:随机删失时间(更常见)
censor_time_random <- runif(n, min=0, max=quantile(T_true, 0.8)) # 随机删失时间
T_obs <- pmin(T_true, censor_time_random)
status <- as.numeric(T_true <= censor_time_random)
3. 生存函数原理
右删失数据的生成本质是:
真实时间 T ~ Weibull(shape, scale)删失时间 C ~ 某种分布(固定/随机)观测时间 = min(T, C)删失标识 δ = I(T ≤ C)
4. 完整示例代码
# 生成右删失Weibull数据
generate_censored_weibull <- function(n, shape, scale, censoring_rate=0.3) {
# 生成真实生存时间
T_true <- rweibull(n, shape=shape, scale=scale)
# 根据删失率计算删失时间分布参数
censor_time <- quantile(T_true, probs=1-censoring_rate)
C <- runif(n, min=0, max=censor_time)
# 生成观测数据
time <- pmin(T_true, C)
status <- as.numeric(T_true <= C)
return(data.frame(time=time, status=status))
}
# 使用示例
set.seed(123)
data <- generate_censored_weibull(n=100, shape=2, scale=1.5, censoring_rate=0.3)
head(data)
5. 数据生成流程
关键说明:
删失比例通过调整删失时间分布来控制实际应用中,删失时间可以来自:研究设计(固定截止时间)竞争风险(其他原因导致的退出)
生存分析函数(如survival::Surv())需要time和status两列数据
这种方法既保留了Weibull分布的特性,又符合右删失数据的实际场景。