用R语言建立logistic回归模型

用R语言建立logistic回归模型

公式:fm<-glm(formula,family=binomial(link=logit),data=data.frame)
其中:link=logit可以不写。

函数 用途
summary() 展示拟合模型的详细结果
coefficients() 列出拟合模型的模型参数(截距项和斜率)
fitted() 列出拟合模型的预测值
confint() 提供参数的置信区间
residuals() 列出拟合模型的残差值
anova() 生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表
vcov() 列出模型参数的协方差矩阵
AIC() 输出赤池信息统计量
plot() 生成评价拟合模型的诊断图
predict() 用拟合模型对新的数据集预测响应变量值

以R语言中Affairs数据集作为实验

数据加载中

install.packages("AER")
library(AER)
data("Affairs")
head(Affairs)

用R语言建立logistic回归模型_第1张图片
变量解释说明:
响应变量是affairs(是否为婚外情,0表示无,否则有)
自变量即为 gender(性别) age(年龄) yearsmarried (结婚时长)children(是否有小孩) religiousness(信仰宗教) education(受教育程度) occupation(职位) rating(不太清楚)

数据处理

# 查看数据响应数据的各个取值的占比情况
table(Affairs$affairs)

在这里插入图片描述
结果显示,有婚外情的有出现过1次,2次等等多次的,他们都属于属于婚外情,所以,我们需要构建一个新变量将其组合在一起。

Affairs$ynaffair <- ifelse(Affairs$affairs==0,0,1)
table(Affairs$ynaffair)

用R语言建立logistic回归模型_第2张图片观察到数据分布还行,不至于差异特别大(比如婚外情的占了90%以上,如果是这样的话,我们需要进行类失衡处理,这个还可以)

对相应变量进行因子转化

Affairs$ynaffair <- factor(Affairs$ynaffairs,lecels=c(1,0),labels=c('yes','no'))

建模

glm(formula = ynaffair ~ gender + age + yearsmarried + children + 
    religiousness + education + occupation + rating, family = binomial(), 
    data = Affairs)
summary(fit.ful)

用R语言建立logistic回归模型_第3张图片

模型优化

红框框起来的即为通过模型的,其他的变量不合格,我们需要丢弃

fit.reduced <- glm(ynaffair ~  age + yearsmarried + religiousness + rating,family=binomial(),data=Affairs)
summary(fit.reduced)

模型中的变量均显示显著性检验,都通过了,模型构建成功
用R语言建立logistic回归模型_第4张图片

使用前面表格的函数

anova(fit.ful,fit.reduced,test="Chisq")# 模型是否有差异

前后两个模型的方差检验,看优化前后模型是否有差别,因p值=0.2108>0.05,所以两者还是有区别的;统计学知识(logistic回归用卡方检验)
用R语言建立logistic回归模型_第5张图片

# logistics回归方程模型的系数展示
coef(fit.reduced)

在这里插入图片描述
#这个是以控制变量的形式,一个变量变,其他的不变,都取平均值,以此来判断随着这个变量的变化,相应变量是如何变的。比如:随着年龄的增大,婚外情发生的概率是变小的。

testdata <- data.frame(rating=c(1,2,3,4,5),age=mean(Affairs$age),yearsmarried=mean(Affairs$yearsmarried,religiousness=mean(Affairs$religiousness)))
testdata
testdata$prob <- predict(fit.reduced,newdata=testdata,type="response")
testdata2<-data.frame(rating=mean(Affairs$rating),age=seq(17,57,10),yearsmarried=mean(Affairs$yearsmarried),religiousness=mean(Affairs$religiousness))
testdata2$prob <- predict(fit.reduced,newdata=testdata2,type="response")
testdata2

用R语言建立logistic回归模型_第6张图片

# 协方差矩阵
vcov(fit.reduced)

用R语言建立logistic回归模型_第7张图片

你可能感兴趣的:(R语言算法)