R语言如何生成删失数据的随机数?

R语言如何生成删失数据的随机数?

让【宝码香车】来帮你解答,本回答参考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分布的特性,又符合右删失数据的实际场景。

相关推荐

淘宝实名认证怎么弄?个人 / 企业流程 + 3 个避坑点,一文搞定 – 店托易
尺子的种类和使用方法:如何正确使用不同类型的尺子?
兰博求生刀

兰博求生刀

09-27 💫 2271
塑魅婷一周期是多久 塑魅婷的周期是多久?

本文标签