【问题标题】:Deviance and Score Residual plots偏差和分数残差图
【发布时间】:2020-04-26 21:14:52
【问题描述】:

我正在尝试在比例风险模型的数据(kidtran)上绘制偏差和分数残差图。 1-我尝试使用以下代码绘制 coxph 模型的偏差残差图和协变量(种族、性别和种族交互的性别):

library(KMsurv)
data(kidtran)
kidtran

####Deviance Residuals####
fit<-coxph(Surv(time, delta)~race+gender+race*gender, method="breslow", data=kidtran)
resid.dev<-resid(fit,type="deviance")
par(mfrow = C(1,1))
plot(resid.dev,xlab = "Risk Score", ylab = "Deviance Residual", lwd=1 )
title("Deviance Residual")
resid.dev
abline(h=2.5, col="blue")
abline(h=-2.5, col="blue")

它应该看起来像这样:

这是我得到的结果。

除了运行后提示错误

par(mfrow = C(1,1))

C(1, 1) 中的错误:对象不可解释为因素

2- 我确实为每个协变量绘制了一个分数残差图:

##score for interaction
fit<-coxph(Surv(time, delta)~race+gender+race*gender, method="breslow", data=kidtran)
resid.score<-resid(fit,type="score")
par(mfrow = C(1,2))
plot(resid.score)
resid.score
abline(h=2.5, col="blue")
abline(h=-2.5, col="blue")

##score for race
fit1<-coxph(Surv(time, delta)~race, method="breslow", data=kidtran)
resid.score<-resid(fit1,type="score")
par(mfrow = C(1,2))
plot(resid.score)
resid.score
abline(h=2.5, col="blue")
abline(h=-2.5, col="blue")

##score for gender
fit2<-coxph(Surv(time, delta)~gender, method="breslow", data=kidtran)
resid.score<-resid(fit2,type="score")
par(mfrow = C(1,2))
plot(resid.score)
resid.score
abline(h=2.5, col="blue")
abline(h=-2.5, col="blue")

结果应如下所示:

我得到了不同的结果。是我用于绘图的代码还是 coxph 代码的问题?

【问题讨论】:

    标签: r plot cox-regression


    【解决方案1】:

    我的猜测是风险分数应该是预测(如果我没记错我的统计数据,风险比?),在你上面的代码中,残差只是一个向量,所以:

    ##note it's a small c for par
    par(mfrow = c(1,1))
    plot(predict(fit),resid.dev,xlab = "Risk Score", 
    ylab = "Deviance Residual", lwd=1 ,main="Deviance Residual")
    abline(h=2.5, col="blue")
    abline(h=-2.5, col="blue")
    

    对于第二个图,您需要在 x 轴上绘制观察次数:

    fit<-coxph(Surv(time, delta)~race+gender+race*gender, method="breslow",data=kidtran)
    resid.score<-resid(fit,type="score")
    par(mfrow = c(1,3))
    for(i in colnames(resid.score))
    plot(1:nrow(resid.score),resid.score[,i],main=i,xlab="obs no")
    

    【讨论】:

    • 感谢您的澄清。如何为最后 3 个图表绘制线条?
    • 尝试在情节中添加 type="l"(...type="l")
    • 如果你加入点就是这样; for(i in colnames(resid.score)){plot(1:nrow(resid.score),resid.score[,i],main=i,xlab="obs no",type="l")}
    • 因为有时你的残基低于/高于预期,这就是为什么它看起来很奇怪
    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 2020-01-23
    • 1970-01-01
    • 2020-11-25
    • 2016-07-24
    • 2020-03-25
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多