R for statistics

R数据分析:多分类逻辑回归

2021-01-28  本文已影响0人  Codewar

上篇文章给大家写了二分类逻辑回归,今天扩展到多分类:

Multinomial logistic regression is used to model nominal outcome variables, in which the log odds of the outcomes are modeled as a linear combination of the predictor variables.

多分类和二分类唯一的区别就是因变量的水平不一样。

今天依然给大家写一个实际分析例子:

实例描述

一群大学生现在需要选择学习项目program,我们想要探讨学生学习项目的选择和他们的写作分数write和社会经济地位ses有没有关系。在这个例子中项目有三个水平,分别是:general program, vocational program and academic program,然后写作分数是一个连续变量,而社会经济地位是一个分类变量。我们来做一个多分类逻辑回归。(数据请关注后私信“数据链接”获取)

ml <- read.dta('C:/Users/hrd/Desktop/bootcamp/dataset/hsbdemo.dta')
R数据分析:多分类逻辑回归

数据读入之后我们就可以开始做我们的多分类逻辑回归

多分类逻辑回归

我们需要用到的方法为nnet包的multinom,在分析之前我们可以指定一个因变量的参考水平:

ml$prog2 <- relevel(ml$prog, ref = "academic")
test <- multinom(prog2 ~ ses + write, data = ml)
summary(test)
R数据分析:多分类逻辑回归

可以看到我们默认的输出结果中是没有p值的,此时我们需要自己计算z统计量从而得到p值:

z <- summary(test)$coefficients/summary(test)$standard.errors
p <- (1 - pnorm(abs(z), 0, 1)) * 2

那么输出的结果如何解释呢?我们看到每一个因变量的水平其实都有所有自变量的系数,那么多分类逻辑回归做出来的结果其实可以参照二分类逻辑回归一样的解释,相当于有很多个相同参照水平的二元逻辑回归,比如我们的例子中就有2个,我们可以写出回归方程:

R数据分析:多分类逻辑回归

从输出的结果中看b13这个系数为-0.058,那么我们就可以解释为:学生的写作分数每增加一个单位,其选择general program vs. academic program的风险减少exp0.058倍。

到现在我们就做好了我们的多分类逻辑回归,我们可以用我们这个模型来预测原始数据,当然我们通常是在新数据上做预测:

head(pp <- fitted(test))

[图片上传失败...(image-c299e6-1611789643744)]

看,我们模型预测出的前6个选择项目的概率如上图,其和我们原始数据的实际项目选择都是吻合的。

有可能我们还会想看看某个变量的在模型中的预测能力,比如我想看不同的社会经济地位是如何影响学生项目的选择的,此时我们将写作分数全部固定:

dses <- data.frame(ses = c("low", "middle", "high"), write = mean(ml$write))
predict(test, newdata = dses, "probs")

上面的代码就可以得出在写作分数一样的情况下,不同的社会经济地位对应的不同项目的选择概率。

有可能我们还会想看一看写作分数对选择概率的影响,这个时候我们就可以画图。

要画图我们就需要足够的数据,我们进行模拟:

dwrite <- data.frame(ses = rep(c("low", "middle", "high"), each = 41), 
                     write = rep(c(30:70),3))
pp.write <- cbind(dwrite, predict(test, newdata = dwrite, type = "probs", se = TRUE))

上面的代码给不同的社会经济地位水平都模拟出来了30到70分的写作水平的学生,并给每个学生进行了项目选择的概率预测,那么我们现在就可以在每一个社会经济地位的水平中画出学生选择不同项目的概率与其写作分数的关系:

lpp <- melt(pp.write, id.vars = c("ses", "write"), value.name = "probability")
ggplot(lpp, aes(x = write, y = probability, colour = ses)) + geom_line() +  
  facet_grid(variable ~., scales = "free")
R数据分析:多分类逻辑回归

小结

今天给大家写了多分类逻辑回归的做法和解释画图,(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)

感谢大家耐心看完,也欢迎大家的意见和建议。

如果你是一个大学本科生或研究生,如果你正在因为你的统计作业、数据分析、论文、报告、考试等发愁,如果你在使用SPSS,R,Python,Mplus, Excel中遇到任何问题,都可以联系我。因为我可以给您提供最好的,最详细和耐心的数据分析服务。

如果你对Z检验,t检验,方差分析,多元方差分析,回归,卡方检验,相关,多水平模型,结构方程模型,中介调节等等统计技巧有任何问题,请私信我,获取最详细和耐心的指导。

If you are a student and you are worried about you statistical #Assignments, #Data #Analysis, #Thesis, #reports, #composing, #Quizzes, Exams.. And if you are facing problem in #SPSS, #R-Programming, #Excel, Mplus, then contact me. Because I could provide you the best services for your Data Analysis.

Are you confused with statistical Techniques like z-test, t-test, ANOVA, MANOVA, Regression, Logistic Regression, Chi-Square, Correlation, Association, SEM, multilevel model, mediation and moderation etc. for your Data Analysis...??

Then Contact Me. I will solve your Problem...

加油吧,打工人!

往期内容:

机器学习:逻辑回归分类器(一)

R数据分析:逻辑斯蒂回归与泊松回归

R数据分析:多元逻辑斯蒂回归的做法

R数据分析:如何做逻辑斯蒂回归

上一篇下一篇

猜你喜欢

热点阅读