WeibullR 1.2.1生成威布尔图异常问题求助
问题描述
使用R 4.2.1搭配WeibullR 1.2.1版本运行威布尔图生成代码时,遇到两个问题:
- 输出的Beta、Eta及对数似然参数和预期不符
- 删失数据在生成的图里缺失
但同样的代码在WeibullR 1.1.10版本能正常运行,原始代码如下:
library(weibullR) left<-c( 36.0, 35.0 ,34.0 ,33.0 ,32.0 ,31.0, 30.0 ,32.5 ,35.5 ,29.5 ,28.5, 30.5, 26.5, 31.5, 20.5 ,34.5, 25.5, 10.5, 27.5, 18.5, 33.5, 2.5 ,11.5 ,23.5, 22.5 ,13.5 , 9.5 ,24.5 ,21.5,15.5, 16.5, 14.5 ,17.5, 19.5 , 0.5, 8.5,6.5) right<-c( -1.0, -1.0 ,-1.0 ,-1.0, -1.0, -1.0, -1.0 ,32.5, 35.5 ,29.5, 28.5, 30.5, 26.5, 31.5,20.5, 34.5, 25.5, 10.5,27.5 ,18.5, 33.5, 2.5 ,11.5, 23.5 ,22.5 ,13.5 , 9.5 ,24.5, 21.5,15.5, 16.5 ,14.5, 17.5, 19.5, 0.5 , 8.5, 6.5) qty<-c( 65416,29,16,7,4,2,1,45,62,21,26,34,20,41,5,44,14,2,20,6,50,1,3,21,13,7,1, 7,13,4,4,2,5,2,1,1,1) state<-c( 0 ,0, 0, 0 ,0 ,0, 0, 1, 1, 1, 1, 1 ,1 ,1, 1, 1 ,1 ,1 ,1, 1 ,1, 1 ,1 ,1, 1 ,1 ,1, 1 ,1, 1 ,1 ,1 ,1, 1 ,1, 1 ,1) ci<-0.9# Confidence dist= "weibull2p" ##Distribution type weibull_fit<-mlefit(data.frame(left,right,qty),dist =dist)## This generates the weibulll parameters-Beta, Eta etc da1<-wblr(data.frame(time=left,event =state,qty=qty)) da1 <- wblr.fit(da1 ,dist= dist,method.fit="mle",pch=3) #### BLCOK IN CASE OF 3 P da1<-wblr.conf(da1,method.conf="fm",ci=as.numeric(ci),col="Red") df <-da1$data$dpoints df <- df[!duplicated(df[ , c("time")]),] da1$data$dpoints <- df par(mar=c(1,1,1,1)) p1<-plot(da1) p1
解决方案
WeibullR 1.2.x版本对数据输入和处理逻辑做了更新,调整代码即可解决问题:
1. 修正删失数据的输入方式
新版本更推荐直接用区间数据(left/right)定义删失,right=-1会被自动识别为右删失,无需单独指定state参数,调整后代码如下:
library(weibullR) # 原始数据保留 left<-c(36.0, 35.0, 34.0, 33.0, 32.0, 31.0, 30.0, 32.5, 35.5, 29.5, 28.5, 30.5, 26.5, 31.5, 20.5, 34.5, 25.5, 10.5, 27.5, 18.5, 33.5, 2.5, 11.5, 23.5, 22.5, 13.5, 9.5, 24.5, 21.5, 15.5, 16.5, 14.5, 17.5, 19.5, 0.5, 8.5, 6.5) right<-c(-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 32.5, 35.5, 29.5, 28.5, 30.5, 26.5, 31.5, 20.5, 34.5, 25.5, 10.5, 27.5, 18.5, 33.5, 2.5, 11.5, 23.5, 22.5, 13.5, 9.5, 24.5, 21.5, 15.5, 16.5, 14.5, 17.5, 19.5, 0.5, 8.5, 6.5) qty<-c(65416,29,16,7,4,2,1,45,62,21,26,34,20,41,5,44,14,2,20,6,50,1,3,21,13,7,1,7,13,4,4,2,5,2,1,1,1) # 构建包含区间信息的数据框 data_df <- data.frame(left = left, right = right, qty = qty) ci <- 0.9 dist <- "weibull2p" # 用区间数据初始化wblr对象,自动识别删失 da1 <- wblr(data_df) da1 <- wblr.fit(da1, dist = dist, method.fit = "mle", pch = 3) da1 <- wblr.conf(da1, method.conf = "fm", ci = ci, col = "Red") # 保留去重逻辑 df <- da1$data$dpoints df <- df[!duplicated(df[, c("time")]),] da1$data$dpoints <- df # 调整绘图边距,避免轴标签被截断 par(mar=c(4,4,1,1)) p1 <- plot(da1) p1
2. 验证拟合参数
新版本mlefit()的返回结构略有变化,可通过以下代码查看参数,确认是否符合预期:
weibull_fit <- mlefit(data_df, dist = dist) print(weibull_fit$par) # 查看Beta、Eta参数 print(weibull_fit$loglik) # 查看对数似然值
3. 确保删失数据显示
调整后,删失数据会以对应符号在图中呈现(默认是空心点),如果还是看不到,检查:
- 数据中
right=-1的行是否被正确识别 - 绘图边距是否合理,避免点被边界截断
内容的提问来源于stack exchange,提问作者Raghavan vmvs
相关产品推荐
相关产品推荐

