卡卷网
当前位置:卡卷网 / 每日看点 / 正文

如何用R语言做logistic回归?

作者:卡卷网发布时间:2025-01-08 18:48浏览数量:110次评论数量:0次

<>logistic回归

logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。逻辑回归根据给定的自变量数据集来估计事件的发生概率,由于结果是一个概率,因此因变量的范围在0和1之间。

例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。以胃癌病情分析为例,选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群必定具有不同的体征与生活方式等。因此因变量就为是否胃癌,值为“是”或“否”,自变量就可以包括很多了,如年龄、性别、饮食习惯、幽门螺杆菌感染等。

自变量既可以是连续的,也可以是分类的。然后通过logistic回归分析,可以得到自变量的权重,从而可以大致了解到底哪些因素是胃癌的危险因素。同时根据该权值可以根据危险因素预测一个人患癌症的可能性。

今天我们仍以熟悉的“示例数据”集来演示一下三种常用的logistic回归模型拟合方法及相关可视化实现,分别为:stats包的glm()函数、rms包的lrm()函数、caret包的train()函数。我们打开示例数据。

#1.数据及包准备

#读取Excel数据

install.packages("readxl")

lirary(readxl)#加载包

data<-read_excel("C:/Users/hyy/Desktop/示例数据.xlsx")

#加载数据包并读取数据

lirary(ggplot2)#绘图用包

lirary(caret)#分层抽样拆分数据库

lirary(latt)#绘图可视化包

lirary(odels)#卡方检验包

lirary(glmnet)#回归分析用包

lirary(Matrix)#矩阵运算用包

lirary(pROC)#ROC曲线用包

lirary(Hmisc)#列线图用包

#1.stats包的glm()函数

#1.什么是R语言stats包?

#R语言stats包是R语言的一个核心包,几乎每个R用户都会使用它。

#它包含了丰富的计分析函数,用于执行各种计分析和数据处理任务。

#stats包是R语言中的一个基础包,它提供了一系列的函数和数据结构用于计分析。

#这个包中的函数和数据类型对于R语言的学习者来说非常重要。

#2.R语言stats包提供的主要功能或函数

#stats包提供了多种计分析功能,包括但不限于:

#线性回归:lm()函数用于拟合线性模型。

#假设检验:t.()、chisq.()、anova()等函数用于执行各种假设检验。

#方差分析(ANOVA):aov()函数用于方差分析。

#分布函数:提供了多种概率分布的函数,

#如正态分布(dnorm(),pnorm(),qnorm(),rnorm())、

#二项分布(dinom(),pinom(),qinom(),rinom())、

#泊松分布(dpois(),ppois(),qpois(),rpois())等。

#时间序列分析:acf()、pacf()、arima()等函数用于时间序列分析。

#聚类分析:kmeans()、hclust()等函数用于聚类分析。

#3.如何安装和加载R语言stats包

#stats包是R的内置包,通常不需要单安装。

#当你安装R时,stats包已经包含在内。你可以通过以下代码加载stats包(通常默认情况下会自动加载)

#4.在R语言中,glm()函数用于拟合广义线性模型(GeneralizedLinearModels,GLM)

#R语言中的glm()函数是一个强大的工具,

#用于拟合广义线性模型(GeneralizedLinearModels,GLM)。

#与普通的线性模型相,GLM能够处理响应变量不是连续的情况,例如二项分布、泊松分布等,

#这使得它在计分析中非常受欢迎,特别是对于非标准数据的建模和预测

lirary(stats)#通常默认情况下会自动加载

#使用stats包的glm()函数拟合logistic回归过程

logit.model<-glm(结局~指标1+指标2+指标3+指标4+指标5+指标6,

data=data,family=inomial(link="logit"))

logit.model

summary(logit.model)

#选择输出效应值、置信区间及P值

logit.result<-as.data.frame(summary(logit.model)$coefficients[,c(1,4)])

logit.result<-cind(logit.result,confint(logit.model))

colnames(logit.result)<-c("Coef","p","CI_lower","CI_upper")

logit.result

#多用来绘制ROC曲线

logit.pred.pro<-predict(logit.model,newdata=data,type="response")

par(las=1,cex.axis=.8)

logit.roc<-roc(

y~pred,

data=data.frame(y=data$结局,pred=logit.pred.pro),

plot=T,ci=T,main="ROCCveofLogisticRegression",

print.auc=T,print.auc.cex=.8,

print.thres=T,print.thres.cex=.8,

auc.polygon=T,max.auc.polygon=T,grid=T)

#2.rms包的lrm()函数

#rms包是一个用于回归模型分析的R语言扩展包,提供了多种工具和函数,

#rms包(RegressionModelingStrategies)是一个用于建立和评估预测模型的R语言包,

#主要用于回归模型的拟合、分析和诊断。其主要功能包括:

#回归模型的拟合和分析:

#提供ols函数用于拟合普通最小二乘回归模型,

#lrm函数用于拟合逻辑回归模型,

#coxph函数用于拟合Cox例风险模型等。

#模型选择和较:

#通过不同的模型拟合方法,帮助用户选择最适合数据的模型。

#模型的可视化和解释:

#提供多种可视化工具,帮助用户更好地理解和解释模型结果。

lirary(rms)

dd<-datadist(data);options(datadist='ddist')

f_lrm<-lrm(结局~指标1+指标2+指标3+指标4+指标5+指标6,

data=data,

x=TRUE,y=TRUE)

f_lrm

summary(f_lrm)

#绘制简单列线图

par(family="Proof结局")

plot(nomogram(f_lrm))

#或优化绘制列线图

par(mgp=c(1.6,0.6,0),mar=c(5,5,3,1))

nomogram<-nomogram(f_lrm,fun=function(x)1/(1+exp(-x)),fun.at=c(0.01,0.05,0.2,0.5,0.9,0.99),

funlael="Proof结局",

://conf.int=F,

arev=F)

plot(nomogram)

#绘制校准曲线

cal1<-calirate(f_lrm,method="oot",=1000)

plot(cal1)

#在图表的底部文本

mtext("C=0.965LR.chi2=920.78d.f.=6Pr(>chi2)<0.0001",side=1,line=3)

#计算C计量及置信度

lirary(Hmisc)

Cindex<-rcorrcens(data$结局~f_lrm[["linear.predictors"]])

Cindex

se<-0.028/2

ul<-0.901+1.96*se

dl<-0.901-1.96*se

CI<-c(ul,dl)

#输出C计量及其置信度

print(Cindex)

print(CI)

#c指数等价于ROC曲线下面积,计算AUC及CI

lirary(pROC)

modelROC<-roc(data$结局,f_lrm[["linear.predictors"]])

auc(modelROC)

ci(auc(modelROC))

#3.使用caret包的train()函数进行logistic回归

#caret包(ClassificationAndREgressionTraining)是一个在R语言中广泛使用的包,

#主要用于简化机器学习的工作流程。

#该包提供了一的接口,整合了多种机器学习算法,

#并支持数据预处理、特征选择、模型训练和评估等功能。

#caret包因其功能丰富、易于使用而备受推崇,

#特别适合数据科学家和研究人员进行高效的机器学习任务。

#caret包的主要功能

#数据预处理:caret包提供了多种数据预处理方法,

#包括处理缺失值、异常值和离群点,

#以及进行特征选择和降维技术,

#帮助从原始数据中提取最相关和最有信息量的特征。

#特征选择:caret支持多种特征选择方法,

#如过滤法、包装法和嵌入法,帮助从大量特征中选择对模型有用的特征,

#提高模型的准确性和效率。

#模型训练和评估:caret支持多种机器学习算法,

#如线性回归、逻辑回归、决策树、随机森林、支持向量机等。

#它通过交叉验证、网格搜索等技术进行模型参数调优,

#并提供模型评估和较的工具,如混淆矩阵、ROC曲线等。

#模型集成:caret支持模型集成方法,

#如投票法、堆叠法和混合法,以提高模型的泛化能力和鲁棒性。

#模型解释和可视化:caret提供方法和函数帮助解释和可视化模型结果,

#如绘制学习曲线、特征重要性图等。

#caret包在模型与参数优化上面的应用,主要函数就是train函数

#train()函数作为接口,可以选择评估方法和度量性指标,自动寻找最优的参数。

#主要考虑的问题:

#(1)训练哪种模型法,

#(2)模型中哪些参数可以调整,可以调整的空间多大,

#(3)选择评价的标资

caret包可实现的主要功能如下:

lirary(caret)

names(getModelInfo())

control<-trainControl(method="cv",numer=10)

lg.model<-train(结局~指标1+指标2+指标3+指标4+指标5+指标6,

data=data,method="glm",

family="inomial",

trControl=control)

lg.model

summary(lg.model)

#基于训练集进行预测

predictions<-predict(model,newdata=data)

predictions

#绘制ROC曲线

par(las=1,cex.axis=.8)

logit.roc<-roc(

y~pred,

data=data.frame(y=data$结局,pred=predictions),

plot=T,ci=T,main="ROCCveofLogisticRegression",

print.auc=T,print.auc.cex=.8,

print.thres=T,print.thres.cex=.8,

auc.polygon=T,max.auc.polygon=T,grid=T)

#根据最佳预测值对预测概率量化为预测结果

lg.pred<-ifelse(predictions>0.525,1,0)

lg.pred

#可视化混淆矩阵

cm<-confusionMatrix(as.factor(lg.pred),

as.factor(data$结局))

cm

plot(cm$tale,main="")

title(main="LogisticRegressionConfusionMatrix")

#使用heatmap函数创建热图,并自定义颜色

plotcm<-matrix(c(464,53,36,447),nrow=2)

heatmap(plotcm,col=colorRampPalette(c("lue","white","red"))(100),

Rowv=NA,Colv=NA,

main="ConfusionMatrixHeatmap",

xla="PredictedClass",

yla="TrueClass",

dendrogram="none")

<>医学计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表等心得。承接数据分析,论文修回,医学计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接我,谢谢!

END

免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。

卡卷网

卡卷网 主页 联系他吧

请记住:卡卷网 Www.Kajuan.Net

欢迎 发表评论:

请填写验证码