? ? ? ? 常見(jiàn)的二分類(lèi)結(jié)局變量,如事件是否發(fā)生、是否死亡等,我們可以用二分類(lèi)logistics回歸分析結(jié)局變量和自變量因素之間的關(guān)系,在R語(yǔ)言中也很容易實(shí)現(xiàn),結(jié)果也非常容易解釋。但有時(shí)候我們會(huì)遇到這樣的結(jié)局指標(biāo),如病情的嚴(yán)重程度、對(duì)服務(wù)質(zhì)量的評(píng)價(jià)、患者滿意度等,這些指標(biāo)都是有序的都分類(lèi)指標(biāo),如輕度、中度、重度;差、一般、好等。此時(shí),如果要探究結(jié)局變量的影響因素,就會(huì)用到有序多分類(lèi)Logistic回歸(Ordinal Logistic Regression)。這里我們以一個(gè)簡(jiǎn)單的例子介紹在R中如何進(jìn)行有序Logistic回歸的分析。
? ? ? ? ? ? ? 我們一個(gè)500人的數(shù)據(jù),變量有年齡(Age)、性別(Sex)、血壓(blood.pressure)和自評(píng)的健康狀況(outcome,差、一般、好)。要分析自評(píng)的健康狀況的影響因素,我們要用到有序多分類(lèi)Logistic回歸。在R語(yǔ)言中完成這個(gè)過(guò)程:
#####載入需要的包
install.packages("MASS")
install.packages("brant")
library(MASS)
library(brant)
###生成模擬數(shù)據(jù)
n <-1000? # define sample size
set.seed(2022) # so can reproduce the results
age? ? ? ? ? ? <- rnorm(n, 60, 10)
blood.pressure <- rnorm(n, 125, 15)
sex? ? ? ? ? ? <- factor(sample(c('female','male'), n,TRUE))
outcome<- factor(sample(c(1,2,3),n,TRUE),levels = c("1","2","3"),
? ? ? ? ? ? ? ? ? labels = c("poor","fair","good"))
data<-data.frame(age,blood.pressure,sex,outcome)
head(data)

#####單因素分析------------
fit0<-polr(ordered(outcome)~ 1, data=data)#####空模型
fit1<-polr(ordered(outcome)~ +sex, data=data)
summary(fit1)

#####平行線檢驗(yàn)---
brant(fit1) ###p>0.1,滿足平行線檢驗(yàn)

####檢驗(yàn)?zāi)P驼w是否有意義
anova(fit0,fit1)? ####p=0.0687,接近有意義

#####生成OR、95%CI和P值
#####生成OR、95%CI和P值
OR<-round(exp(fit1$coefficients),2)
CI <- round(exp(confint(fit1)), 2)
CI<-data.frame(CI[1],CI[2])
colnames(CI) <- c("Lower", "Higher")
P <- (pnorm(abs( coef(summary(fit1))[,"t value"]),lower.tail = FALSE)*2)[1]
out<- as.data.frame(cbind(OR, CI, P))
out
#####輸出的即為我們需要的OR、95%CI和P value

######多因素分析,方法類(lèi)似-----------------------------
fit2<-polr(ordered(outcome)~ +sex+age+blood.pressure, data=data)
summary(fit2)

#####平行線檢驗(yàn)---
brant(fit2) ###p>0.1,三個(gè)變量都滿足平行線檢驗(yàn)

####檢驗(yàn)?zāi)P驼w是否有意義
anova(fit0,fit2)?

#####生成OR、95%CI和P值,和單因素的有些區(qū)別
OR_CI<-exp(cbind(OR=coef(fit2),confint(fit2)))
colnames(OR_CI) <- c("OR","Lower", "Higher")
P <- (pnorm(abs( coef(summary(fit2))[,"t value"]),lower.tail = FALSE)*2)
P

P<-P[1:3] ###提取前三個(gè)
out<- as.data.frame(cbind(OR_CI, P))
out

######結(jié)果輸出即可
write.table(out, file ="/STR_2.csv", sep = ",",? ? col.names = NA,qmethod = "double",append=TRUE)? ??
? ? ? ? ? ? 得到結(jié)果后如何解釋呢,以性別為例(僅解釋結(jié)果,先暫時(shí)忽略掉其沒(méi)有意義),我們可以說(shuō):“和女性相比,男性對(duì)自身的健康狀況評(píng)價(jià)更低 (OR=0.82, 95%CI=0.65-1.02)”,或者是“男性認(rèn)為自身健康好的OR值是女性的0.82倍 (OR=0.82, 95%CI=0.65-1.02)”。
? ? ? ? ? ?總結(jié)以上,對(duì)于有序多分類(lèi)結(jié)局變量,我們可以用有序多分類(lèi)Logistic回歸,但是要滿足平行線假設(shè)的條件,如果不滿足的話,可以用無(wú)序多分類(lèi)Logistic回歸或者轉(zhuǎn)化為二分類(lèi)Logistic回歸。