从单因素分析到多因素分析-包含共线性诊断(COX回归)


#########数据处理
#1.载入R包
BiocManager::install("grid")
library(survival)
library(plyr)
#2.清理工作环境
rm(list = ls())
#3.读入数据
setwd("C:\\Users\\xx\\xx")
aa<- read.csv('D-V1.csv') #文件名称
#4.查看数据数据性质
str(aa)
#5.查看结局,0=生存,1死亡
aa$status<-factor(aa$removal_state)
summary(aa$status)



#############批量单因素回归
#1.构建模型的y
y<- Surv(time=aa$removal_time,event=aa$removal_state==1)
#2.批量单因素回归模型建立:Uni_cox_model
Uni_cox_model<- function(x){
  FML <- as.formula(paste0 ("y~",x))
  cox<- coxph(FML,data=aa)
  cox1<-summary(cox)
  HR <- round(cox1$coefficients[,2],2)
  PValue <- round(cox1$coefficients[,5],3)
  CI5 <-round(cox1$conf.int[,3],2)
  CI95 <-round(cox1$conf.int[,4],2)
  Uni_cox_model<- data.frame('Characteristics' = x,
                            'HR' = HR,
                            'CI5' = CI5,
                            'CI95' = CI95,
                            'p' = PValue)
  return(Uni_cox_model)} 

#3.将想要进行的单因素回归变量输入模型
#3-(1)查看变量的名字和序号
names(aa)
#3-(2)输入变量序
variable.names<- colnames(aa)[c(3:23)] #例这里选择了3-23号变量
#4.输出结果
Uni_cox <- lapply(variable.names, Uni_cox_model)
Uni_cox<- ldply(Uni_cox,data.frame)
#5.优化表格,这里举例HR+95% CI+P 风格
Uni_cox$CI<-paste(Uni_cox$CI5,'-',Uni_cox$CI95)
Uni_cox<-Uni_cox[,-3:-4]
#查看单因素cox表格
View(Uni_cox)
write.csv(Uni_cox,file = "Uni_cox.csv",row.names = F)

若单因素分析中有显著性差异因素过多,可进行共线性诊断,剔除掉存在共线性的因素。
进行共线性诊断分析的方法有许多,如特征值法;条件指数法和方差膨胀因子法。虽然方法不同,但是判定结果是一致的。下面以方差膨胀因子vif举例。

###共线性诊断###
#6.共线性诊断-VIF值判断法
#先安装car包
options("repos"=c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
install.packages("BiocManager")
BiocManager::install("car")
library(car)
#进行共线性诊断分析,~前观察生存时间,~后为单因素中有显著性差异的因素
fit<-lm(aa$removal_time ~ aa$IIRC+ aa$blood_qf+ aa$corneal_edema
        + aa$neovascularization_iris+ aa$high_pressure+ aa$IAC 
        + aa$local_therapy + aa$cal+ aa$intravitreal_hemorrhosis,data=aa)
vif(fit)
###VIF大于10表明与其他因素存在共线性。根据临床专业判断,先去掉一个不太重要的变量,再看下共线性,不行的话,就再去掉一个

将不存在共线性的变量纳入多因素分析中

######多因素回归
install.packages(c("survival", "survminer"))
library(survival)
library(survminer)
head(aa)#查看示例数据

#多因素分析
multi_cox <- coxph(Surv(removal_time, removal_state) ~ IIRC + blood_qf+
                  high_pressure+IAC+local_therapy+intravitreal_hemorrhosis+cal, 
                  data =  aa)
summary(multi_cox)
ggforest(multi_cox,
         data = aa,
         main = "Hazard ratio",
         cpositions = c(0.02, 0.22, 0.4),#前三列的位置
         fontsize = 0.7,#字体大小
         refLabel = "reference",#显示变量
         noDigits = 3)#小数点后保留位数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容