如何用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结局",
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")
免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。
- 上一篇:微信为什么也做鸿蒙版APP?
- 下一篇:ip隔离浏览器有哪些?
相关推荐

你 发表评论:
欢迎