r语言做二分类logistic回归分析

时间:2022-12-06 23:53:56
#第1步:读入数据
setwd("C:/Users/IBM/Desktop/logsistic建模/3.2建模")#设定当前的工作目录,重要!
safe<-read.csv("model2.csv",header=T)
str(safe) #看表头
colnames(safe)#看列名
attach(safe)
cor(safe)   #变量间相关系数阵

#第2步:使用glm函数计算.
glm.safe<-glm(is_run~reg_age+reg_life+heart_num+max_period
+min_period+median25_period+median50_period+median75_period
+lost_num_m30+avg_income_fund+avg_amt_fund+avg_nums_fund
+avg_amt_p2p+avg_nums_p2p+log_num+avg_income_p2p
,data=safe,family=binomial)#logistic模型
summary(glm.safe)

#第3步:逐步回归
glm.safe1<-step(glm.safe)
summary(glm.safe1)#逐步回归

#第4步:模型解读
coef(glm.safe1)#用以解释模型
exp(glm.safe1$coefficients) #解释Odds比与x的关系
exp(confint(glm.safe1)) #回归系数的置信区间
xp05<-0/glm.safe1$coefficients[]
xp05 #求使得pi为0.5的x
ratio05<-glm.safe1$coefficients[]*0.25
ratio05 #pi为0.5处的pi关于x的变化率

#第5步:模型评价
#5.1计算决定系数
R2cox<-1-exp((glm.safe1$deviance-glm.safe1$null.deviance)/length(is_run))

#5.2计算Cox-Snell拟合优度
cat("Cox-Snell R2=",R2cox,"\n")
R2nag<-R2cox/(1-exp((-glm.safe1$null.deviance)/length(is_run)))

#5.3计算Nagelkerke拟合优度
cat("Nagelkerke R2=",R2nag,"\n")

#5.4残差分析
plot(residuals(glm.safe1))

#5.5异常值诊断
library(car)
influencePlot(glm.safe1)

#第6步:分类表
fitt.pi<-fitted(glm.safe1)#同predict(glm.safe1,data.frame(x2=x2),type="resp")
ypred<-1*(fitt.pi>0.5) #1*逻辑变量就变成了0和1变量
ypred
length(ypred)
n<-table(safe$is_run,ypred)
n
Percantage<-c(n[1,1]/sum(n[1,]),n[2,2]/sum(n[2,]))
Percantage
rbind(Category,Percantage)