绘制svycoxph对象预测结果时,如何区分各曲线对应的组别?
问题解答
你的猜测是对的——曲线确实可能出现顺序颠倒的情况,而且大概率是按因子水平的字母顺序(或模型内部的编码顺序)排列,而非你输入newdata的顺序。
原因
survey包中predict.svycoxph在处理type="curve"时,并不会严格保持你newdata的输入顺序,而是会根据变量的编码规则重新排序:
- 如果
group是因子,它会按照因子水平的内在编码顺序(默认是字母顺序,除非你手动指定过因子水平)来排列预测结果; - 最终返回的列表元素顺序,对应
newdata经过model.matrix转换后的行顺序,而非你输入的A、B顺序。
验证与解决方法
先确认对应关系
用model.matrix查看模型对newdata的处理顺序,就能明确每个预测结果对应的组别:model.matrix(object, newdata = data.frame(group=c("A", "B")))输出矩阵的行顺序就是
prediction列表的元素顺序,结合列名即可对应到具体组别。给
newdata设置行名,直接按行名索引
这是最稳妥的方式,彻底避免顺序混淆:# 给每行设置明确的行名 newdat <- data.frame(group = c("A", "B"), row.names = c("组A", "组B")) prediction <- predict(object, type="curve", newdata = newdat) # 直接通过行名调用,不用猜测顺序 plot(prediction[["组A"]], ci=FALSE, col="sienna") lines(prediction[["组B"]], ci=FALSE, col="royalblue")检查原始因子水平
用levels(object$model$group)查看原始数据中group的因子水平顺序,模型内部的处理逻辑会遵循这个顺序,也能辅助你判断曲线对应的组别。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

