基于R语言与Weibull分布的在役轮胎剩余寿命预测
解决Weibull分布下在役轮胎剩余寿命蒙特卡洛模拟的条件分析问题
你遇到的核心问题是忽略了在役轮胎已经存活到当前使用时长t0这个关键条件——直接生成的原始Weibull样本包含了那些在t0之前就失效的情况,而这些情况在现实中已经被排除了(毕竟你的轮胎现在还在用)。正确的做法是基于「失效时间T > t0」的条件分布来生成剩余寿命样本,下面是两种可行的R实现方案:
方法1:接受-拒绝法(简单直观)
这种方法直接生成原始Weibull分布样本,只保留那些大于t0的有效样本,适合t0远小于η的场景(此时无效样本占比低,效率可接受)。
# 定义Weibull分布参数 beta <- 1.09 eta <- 2750 # 单条轮胎当前使用时长 t0 <- 1000 # 蒙特卡洛模拟次数 n_sim <- 10000 # 生成足够多的候选样本,筛选出大于t0的有效失效时间 valid_fail_times <- c() while(length(valid_fail_times) < n_sim) { candidates <- rweibull(n_sim * 2, shape = beta, scale = eta) valid_fail_times <- c(valid_fail_times, candidates[candidates > t0]) } valid_fail_times <- valid_fail_times[1:n_sim] # 计算剩余寿命 remaining_life <- valid_fail_times - t0 # 查看剩余寿命分布 summary(remaining_life) hist(remaining_life, breaks = 30, main = "剩余寿命分布(接受-拒绝法)")
方法2:逆变换法(高效最优)
利用Weibull条件分布的逆CDF直接生成剩余寿命样本,无需丢弃任何样本,效率更高,适合所有场景。
推导后的生成公式:
对于当前使用时长t0,剩余寿命X可通过以下公式生成:
$$X = \eta \times \left( \left( \frac{t0}{\eta} \right)^\beta - \ln(1 - U) \right)^{1/\beta} - t0$$
其中U是[0,1]区间的均匀分布随机数。
R代码实现:
beta <- 1.09 eta <- 2750 t0 <- 1000 n_sim <- 10000 # 生成均匀随机数 u <- runif(n_sim) # 计算剩余寿命 remaining_life <- eta * ( (t0/eta)^beta - log(1 - u) )^(1/beta) - t0 # 查看结果 summary(remaining_life) hist(remaining_life, breaks = 30, main = "剩余寿命分布(逆变换法)")
批量处理1427条在役轮胎
针对你的1427条轮胎数据,可以用向量化操作快速完成批量模拟:
set.seed(123) # 设置随机种子保证结果可复现 # 假设t0_vec是你的1427条轮胎当前使用时长向量 t0_vec <- sample(500:3000, 1427, replace = TRUE) n_sim <- 10000 # 生成n_sim行、1427列的均匀随机数矩阵 u_matrix <- matrix(runif(n_sim * length(t0_vec)), nrow = n_sim, ncol = length(t0_vec)) # 向量化计算所有轮胎的剩余寿命模拟值 remaining_life_matrix <- eta * ( (t0_vec/eta)^beta - log(1 - u_matrix) )^(1/beta) - t0_vec # 计算每条轮胎未来三个月(假设为2160小时)内失效的概率 # 即剩余寿命≤2160的模拟次数占比 fail_prob <- colMeans(remaining_life_matrix <= 2160) # 查看失效概率的分布情况 summary(fail_prob) hist(fail_prob, breaks = 30, main = "未来三个月失效概率分布")
为什么之前的方法不对?
你之前直接用rweibull()生成的失效时间如果小于t0,本质是生成了一个「已经失效的轮胎」样本,但你的数据集是在役轮胎,这些样本完全不符合现实场景——因为这些轮胎已经用了t0小时还没坏,所以它们的真实失效时间必然大于t0。要么丢弃这些无效样本(接受-拒绝法),要么直接用条件分布生成有效样本(逆变换法),后者显然是更优的选择。
内容的提问来源于stack exchange,提问作者kelsey Kiser
相关产品推荐
相关产品推荐

