怎么使用R语言做逻辑回归(r语言,开发技术)

时间:2024-05-03 02:07:14 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

首先加载需要用的包

library(ggplot2)##Warning:package'ggplot2'wasbuiltunderRversion3.1.3library(Rcpp)##Warning:package'Rcpp'wasbuiltunderRversion3.2.2然后加载测试数据mydata<-read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")##这里直接读取网络数据head(mydata)##admitgregparank##103803.613##216603.673##318004.001##416403.194##505202.934##617603.002#Thisdatasethasabinaryresponse(outcome,dependent)variablecalledadmit.#Therearethreepredictorvariables:gre,gpaandrank.Wewilltreatthevariablesgreandgpaascontinuous.#Thevariableranktakesonthevalues1through4.summary(mydata)##admitgregparank##Min.:0.0000Min.:220.0Min.:2.260Min.:1.000##1stQu.:0.00001stQu.:520.01stQu.:3.1301stQu.:2.000##Median:0.0000Median:580.0Median:3.395Median:2.000##Mean:0.3175Mean:587.7Mean:3.390Mean:2.485##3rdQu.:1.00003rdQu.:660.03rdQu.:3.6703rdQu.:3.000##Max.:1.0000Max.:800.0Max.:4.000Max.:4.000sapply(mydata,sd)##admitgregparank##0.4660867115.51653640.38056680.9444602xtabs(~admit+rank,data=mydata)##保证结果变量只能是录取与否,不能有其它!!!##rank##admit1234##028979355##133542812

可以看到这个数据集是关于申请学校是否被录取的,根据学生的GRE成绩,GPA和排名来预测该学生是否被录取。

其中GRE成绩是连续性的变量,学生可以考取任意正常分数。

而GPA也是连续性的变量,任意正常GPA均可。

最后的排名虽然也是连续性变量,但是一般前几名才有资格申请,所以这里把它当做因子,只考虑前四名!

而我们想做这个逻辑回归分析的目的也很简单,就是想根据学生的成绩排名,绩点信息,托福或者GRE成绩来预测它被录取的概率是多少!

接下来建模

mydata$rank<-factor(mydata$rank)mylogit<-glm(admit~gre+gpa+rank,data=mydata,family="binomial")summary(mylogit)####Call:##glm(formula=admit~gre+gpa+rank,family="binomial",##data=mydata)####DevianceResiduals:##Min1QMedian3QMax##-1.6268-0.8662-0.63881.14902.0790####Coefficients:##EstimateStd.ErrorzvaluePr(>|z|)##(Intercept)-3.9899791.139951-3.5000.000465***##gre0.0022640.0010942.0700.038465*##gpa0.8040380.3318192.4230.015388*##rank2-0.6754430.316490-2.1340.032829*##rank3-1.3402040.345306-3.8810.000104***##rank4-1.5514640.417832-3.7130.000205***##---##Signif.codes:0'***'0.001'**'0.01'*'0.05'.'0.1''1####(Dispersionparameterforbinomialfamilytakentobe1)####Nulldeviance:499.98on399degreesoffreedom##Residualdeviance:458.52on394degreesoffreedom##AIC:470.52####NumberofFisherScoringiterations:4

根据对这个模型的summary结果可知:

GRE成绩每增加1分,被录取的优势对数(log odds)增加0.002

而GPA每增加1单位,被录取的优势对数(log odds)增加0.804,不过一般GPA相差都是零点几。

最后第二名的同学比第一名同学在其它同等条件下被录取的优势对数(log odds)小了0.675,看来排名非常重要啊!!!

这里必须解释一下这个优势对数(log odds)是什么意思了,如果预测这个学生被录取的概率是p,那么优势对数(log odds)就是log2(p/(1-p)),一般是以自然对数为底

最后我们可以根据模型来预测啦

##重点是predict函数,type参数newdata1<-with(mydata,data.frame(gre=mean(gre),gpa=mean(gpa),rank=factor(1:4)))newdata1##gregparank##1587.73.38991##2587.73.38992##3587.73.38993##4587.73.38994##这里构造一个需要预测的矩阵,4个学生,除了排名不一样,GRE和GPA都一样newdata1$rankP<-predict(mylogit,newdata=newdata1,type="response")newdata1##gregparankrankP##1587.73.389910.5166016##2587.73.389920.3522846##3587.73.389930.2186120##4587.73.389940.1846684##type="response"直接返回预测的概率值0~1之间可以看到,排名越高,被录取的概率越大!!!log(0.5166016/(1-0.5166016))##第一名的优势对数0.06643082log((0.3522846/(1-0.3522846)))##第二名的优势对数-0.609012两者的差值正好是0.675,就是模型里面预测的!newdata2<-with(mydata,data.frame(gre=rep(seq(from=200,to=800,length.out=100),4),gpa=mean(gpa),rank=factor(rep(1:4,each=100))))##newdata2##这个数据集也是构造出来,需要用模型来预测的!newdata3<-cbind(newdata2,predict(mylogit,newdata=newdata2,type="link",se=TRUE))##type="link"返回fit值,需要进一步用plogis处理成概率值##?plogisTheLogisticDistributionnewdata3<-within(newdata3,{PredictedProb<-plogis(fit)LL<-plogis(fit-(1.96*se.fit))UL<-plogis(fit+(1.96*se.fit))})最后可以做一些简单的可视化head(newdata3)##gregparankfitse.fitresidual.scaleUL##1200.00003.38991-0.81148700.514771410.5492064##2206.06063.38991-0.79776320.509098610.5498513##3212.12123.38991-0.78403940.503449110.5505074##4218.18183.38991-0.77031560.497823910.5511750##5224.24243.38991-0.75659190.492223710.5518545##6230.30303.38991-0.74286810.486649410.5525464##LLPredictedProb##10.13938120.3075737##20.14238800.3105042##30.14544290.3134499##40.14854600.3164108##50.15169730.3193867##60.15489660.3223773ggplot(newdata3,aes(x=gre,y=PredictedProb))+geom_ribbon(aes(ymin=LL,ymax=UL,fill=rank),alpha=.2)+geom_line(aes(colour=rank),size=1)

怎么使用R语言做逻辑回归

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:怎么使用R语言做逻辑回归的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:怎么使用Android OpenGL ES实现抖音传送带特效下一篇:

7 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18