用r绘制可靠性数据的Kaplan Meier estimate并用Weibull分布近似进行模型诊断

数据集及软件

作业中遇到的问题,觉得保存之后制图调用代码会很方便。
需要导入r中的“survival”包,用于生存性分析。
调用的数据是r中内置的ovarian(卵巢癌患者在接受两种治疗药物之后的生存时间)

KM统计量

作为生存性数据里非参数统计分析里最为重要的统计量之一,Kaplan-Meier 统计量

library(survival)
fit1 = survfit(Surv(ovarian$futime,ovarian$fustat)~1)
# 绘制带confidence bound的KM curves
plot(fit1,main="Kaplan-Meier estimate with 95% cofidence bounds", xlab = "days", ylab = "survival function", col=4)

用r绘制可靠性数据的Kaplan Meier estimate并用Weibull分布近似进行模型诊断

Weibull分布近似估计

进行Weibull 分布近似

fit2<-survreg(Surv(ovarian$futime,ovarian$fustat)~1, dist="weibull")
summary(fit2)
mu <- fit2$coefficients
sigma <- fit2$scale
lambda.hat<- exp(-mu)
alpha.hat<- 1/sigma
t.vals<-1:10:max(ovarian$futime)
prob.hat.Wei <- 1-pweibull(t.vals,shape = alpha.hat,scale = 1/lambda.hat)
plot(fit1,main="Kaplan-Meier estimate with 95% cofidence bounds", xlab = "days", ylab = "survival function", col=4)
lines(t.vals, prob.hat.Wei, type = "l")
legend("topright",pch = c(15,15),legend = c("KM-estimator","Weibull"), col =c(4,1),bty="n")

用r绘制可靠性数据的Kaplan Meier estimate并用Weibull分布近似进行模型诊断

检验样本是否来自指数分布

基于Weibull分布假设,我们可以采用wald test或是score test检验scale参数是否为1。

#wald test
library(EWGoF)
WLK.test(ovarian$futime,type = "EW",funEstimate = "MLE",procedure = "W",r=sum(ovarian$fustat))

第一个参数为所有的时间数据;type 为分布假设(exponential-Weibull);procedure为检验方法“W”-wald test,“S”-“score test”,“LR”-likelihood ratio test。
用r绘制可靠性数据的Kaplan Meier estimate并用Weibull分布近似进行模型诊断

检验样本Weibull分布是否合理

plot(x=log(fit1$time),y=log(-log(fit1$surv)),type = "b",main="log(-log(KM_estimate)) vs. log(t)", xlab = "log(t)", ylab = "log(-log(KM_estimate))",mark.time = TRUE, col=4)

用r绘制可靠性数据的Kaplan Meier estimate并用Weibull分布近似进行模型诊断
近似直线因此可认为满足weibull假设。

上一篇:题解[P4350Export Estimate]


下一篇:感知机学习算法实现