当涉及到二分类时,我们第一想到的就是logistic回归。前面也讲解过其他的二分类其的构建。本文主要分享logistic有关的二分类,无序多分类,有序多分类和条件logistic回归。
本文因没有配图,略显枯燥,建议在运行本代码的过程中1.全神贯注,盯住每一个结果;2.建议对统计学知识有一个自学或复习,甚至建议各位朋友找到相关关于logistic回归的帖子或教材,配合着学习/理解,同时大家多多交流。通过这些合作,相信会学好logistic回归,包括其他知识。多学习,多总结,取长补短,才能进步。
##一. 二分类,涉及到二分类数据,可以使用logistic回归进行危险因素和相关因素的探索
##目的是构建P=P(Y=1 |X)与影响因素x之间的关系,出现阳性概率的结果
rm(list = ls())
library(MPV)
knitr::kable(head(p13.2))
log_fix <- glm(y~x,family = "binomial",data = p13.2)
summary(log_fix)
#结果解读
exp(coef(log_fix)[2])#结果=1.000201,即x每增加一个单位,y相应的增加1.00020倍
exp(confint(log_fix)[2,])##95%CI,若pvalue<0.05,则95%不包括1,反之包括1
##其实在进行logistics后还需要判断或检测是否有过度离势φ=Deviance(res)/df,即残差偏差/自由度
##若φ>>1,则表明存在过度离势,检测方法如下
φ <- log_fix$deviance/log_fix$df.residual
##如果验证了之后存在过度离势,那么验证了之后如何去校正呐?
##首先可以返回原始数据,看看有无离群值或高杠杆
##若没有离群值或高杠杆,检测结果仍显示过度离势,则如下操作
log_fix <- glm(y~x,family = quasibinomial(),data = p13.2)
summary(log_fix)
##二.无序多分类logistic回归
##比如血型A,B,AB,O
rm(list = ls())
library(foreign)
library(nnet)
ml <- read.dta("http://stats.idre.ucla.edu/stat/data/hsbdemo.dta")
head(ml)
ml$prog2 <- relevel(ml$prog,ref = "academic")
test <- multinom(prog2~ses + write,data = ml)
summary(test)
##计算pvalue
z <- summary(test)$coefficients/summary(test)$standard.errors
p <- (1 - pnorm(abs(z),0,1))*2#双侧,所以*2
p
exp(coef(test))#得到OR值
#####三.有序多分类logistic回归
#因变量有多个,且为有序变量
require(foreign)
require(MASS)
dat <- read.dta("http://stats.idre.ucla.edu/stat/data/ologit.dta")
head(dat)
#查看数据
ftable(xtabs(~public+apply+pared,data = dat))
m <- polr(apply~pared+public+gpa,data = dat,Hess = TRUE,method = "logistic")
summary(m)
ctable <- coef(summary(m))
(ctable <- coef(summary(m)))
#计算p值
p <- pnorm(abs(ctable[,"t value"]),lower.tail = FALSE)*2
(ctable <- cbind(ctable,"p value"=p))
(ci <- confint(m))#95%CI
exp(cbind(OR=coef(m),ci))#OR值
##解读:pared↑ 1 unit → OR=2.85(class1→class2;class2→class3)
##OR c1vsCk>1 = OR c2vsCk>2
####三.条件logistic回归--1:n,目的是通过匹配对照组,将混杂因素匹配掉,比如说地域/年龄等
#1:M case control 1个病例;M m个对照组,m<=4
library(faraway)
data(amlxray,package = "faraway")
head(amlxray)
str(amlxray)
library(survivv)
cmod <- clogit(disease~Sex+Mray+Fray+CnRay+strata(ID),data = amlxray)##strate函数中的ID如果自
#自己数据中没有,需要加入进去。
summary(cmod)
##对于条件logistic,重点是需要知道什么时候需要采用条件logistic回归。
学习的过程就是分享的过程,分享的过程也是交流的过程,交流的过程就是进步的过程。