用R语言做列线图出现了报错

在用Rstudio绘制列线图的时候,在cox模型构建这一步,出现了如图的报错

img


奇怪的是,我把X改成四个变量之后,它就不报错了,

img


是哪里出了问题呢,这个问题应该如何解决?
感谢!

deemed to be singular,这句话是指X矩阵为奇异矩阵,说明可能这几个变量有多重共线性

参数问题解决了吗

写的一个例子:

library(foreign) # 读取spss格式数据
library(survival)
library(rms) 
library(VIM) # 包中aggr()函数,判断数据缺失情况
 
par(family = "STXihei") # 指定绘制图片中的字体
# 数据来自张文彤《SPSS统计分析高级教程》,侵删!
url <- 'http://online.hyconresearch.com:4096/spss20/spss20advdata.zip'
# 书中数据下载地址
 
file <- basename(url) 
# 获取文件名 spss20advdata.zip
if (!file.exists(file)) download.file(url, file) 
# 判断工作目录下是否有spss20advdata.zip文件,如果不存在则执行下载数据命令
unzip(file)    # 解压缩zip文件
pancer <- read.spss('part4/pancer.sav') # 读取文件
pancer <- as.data.frame(pancer) 
# Cox回归所需数据类型为数据框格式,将其转换为数据框格式
aggr(pancer,prop=T,numbers=T) 
# 判断pancer各个变量的数据缺失情况,出现红色即有缺失,绘制列线图不允许缺失值存在
pancer$censor <- ifelse(pancer$censor=='死亡',1,0) 
# Cox回归结局变量需为数值变量
pancer$Gender <- as.factor(ifelse(pancer$sex=='男',"Male","Female"))
# 更改变量名称以及变量取值
pancer$Gendr <- relevel(pancer$Gender,ref='Female')  # 设置参考组
dd<-datadist(pancer) 
options(datadist='dd') 
coxm <- cph(Surv(time,censor==1)~age+Gender+trt+bui+ch+p+stage,x=T,y=T,data=pancer,surv=T) 
# 建立Cox回归方程
surv <- Survival(coxm) # 建立生存函数
surv1 <- function(x)surv(1*3,lp=x)  # lp: linear predictor, 用这个函数去
surv2 <- function(x)surv(1*6,lp=x) 
surv3 <- function(x)surv(1*12,lp=x) 
# maxscale 参数指定最高分数,一般设置为100或者10分
# fun.at 设置生存率的刻度
# xfrac 设置数值轴与最左边标签的距离,可以调节下数值观察下图片变化情况
plot(nomogram(coxm,fun=list(surv1,surv2,surv3),lp= F,
              funlabel=c('3-Month Survival','6-Month survival','12-Month survival'),maxscale=100,
              fun.at=c('0.9','0.85','0.80','0.70','0.6','0.5','0.4','0.3','0.2','0.1')),xfrac=.45)
med <-  Quantile(coxm)
surv4 <- function(x) med(x)
plot(nomogram(f, fun=surv4,
              fun.at=c(12,6,3,1,0),lp=F, funlabel="Median Survival Time"))



应该是参数的问题,可以查看相关的函数使用是否出错