R语言批量实现单因素二分类logistic回归并提取相关参数

学术   2024-08-10 15:43   陕西  

理论介绍:

二分类logistic模型建立以下模型:

Logit(y)=b1*x1+残差

根据估计的回归系数b1取指数得到OR值,即x1变量的OR=eb1,即e的b1次方。

我们在研究中,一般需要提取以下参数:

回归系数、回归系数标准误、检验统计量Z值、P值、OR值、OR值的置信区间

OR的和其置信区间合并,如1.34(1.22~1.58)        

 

本文将基于已有数据:分别分析性别,年龄,省份,城乡,婚姻,文化程度,是否吸烟是否饮酒的影响,然后提取上述参数。

整个实践操作分为四步:

1.数据的整理:包括分类变量因子化、设置参照、变量顺序设定

2.拟合模型,了解提取参数函数

3.建立批量循环,提取参数

4.结果导出

         

 

实践操作:

目的:分析性别,年龄,省份,城乡,婚姻,文化程度,是否吸烟对是否饮酒的影响

自变量:性别,年龄,省份,城乡,婚姻,文化程度,是否吸烟

因变量:是否饮酒

提取指标:回归系数、回归系数标准误、检验统计量Z值、P值、OR值、OR值的置信区间、    

OR的和其置信区间的合并

具体最终的结果如下:

代码实现

.libPaths()#查看R包位置.libPaths("D:/Program File/R/R-4.3.2/library")#定义包安装位置setwd("E:/02学习/经验/03R语言图形绘制/16R语言批量实现单因素二分类logistic回归并提取相关参数")#设置工作空间getwd()#加载工作空间        

#导入数据

data1<-read.csv("ms2013.csv",                as.is = TRUE,header = T,sep = ",", fileEncoding='utf-8')           

#########第一步:数据整理


#(1)因子化data1$AE<-as.factor(data1$AE)#查看变量名names(data1)#批量因子化 a<-c("性别", "省份", "城乡" , "婚姻", "文化程度", "是否吸烟" )#填入需要转化的变量data1[,a]<-lapply(data1[,a],as.factor)#转因子 #(2)设置参照data1$性别<-relevel(data1$性别, ref=1) #(3)调整变量列的顺序:其实就是选择变量library(dplyr)data1 <- select(data1,性别,年龄,省份,城乡,婚姻,文化程度,是否吸烟,是否饮酒)

#第二步:拟合单因素二元logistic回归模型,了解相关提取的函数


fit1<-glm(是否饮酒~性别,data=data1,family=binomial())summary(fit1)#我们要提取的数据包括bate、标准误、z值、p值、OR、OR的95%置信区间fitSum<-summary(fit)#提取bate、标准误、z值、p值fitSum$coef#计算回归系数的OR值OR<-exp(fitSum$coef[,'Estimate'])#回归系数的置信区间 confint(fit)#OR值的置信区间OR_CI<-exp(confint(fit))#paste函数合并OR和置信区间paste(OR,"(",OR_CI[,1],"~",OR_CI[,2],")")

######第三步:建立循环,提取相关数据


var<-names(data1[,1:7])#自变量varresult<-c()for (i in 1:length(var)){ fit<-glm(substitute(是否饮酒~x,list(x=as.name(var[i]))),data=data1,family=binomial()) fitSum<-summary(fit) result1<-c() #提取bate、标准误、z值、p值,并保留三位小数 result1<-rbind(result1,round(fitSum$coef,3)) #计算or值 OR<-exp(fitSum$coef[,'Estimate']) OR<-round(OR,2)#保留两位小数 #O计算R值的置信区间 OR_CI<-exp(confint(fit)) OR_CI<-round(OR_CI,2)#保留两位小数 #OR和置信区间合并 he<-paste(OR,"(",OR_CI[,1],"~",OR_CI[,2],")") #横向合并result1,OR,OR_CI,he result1<-data.frame(cbind(result1,OR,OR_CI,he)) #将第一列命名为Characteristics;这是原来的变量 result1 <- tibble::rownames_to_column(result1, var = "Characteristics") result<-rbind(result,result1[-1,])#[-1,],删除截距项 }

###第四步:结果导出

write.csv(result, file = "result.csv", row.names = T)         

本文的原始数据如下:点个关注和赞赞呗,谢谢

20240810-1.xlsx

         

 

   

流病统计与科研学习笔记
流行病与卫生统计学专业主要分享基于SAS、R以及其他统计软件实现各种统计学方法和结果绘图,提高自己的学习能力
 最新文章