? ? ? ? 常見的二分類結局變量饺汹,如事件是否發(fā)生力惯、是否死亡等璃俗,我們可以用二分類logistics回歸分析結局變量和自變量因素之間的關系套利,在R語言中也很容易實現(xiàn)推励,結果也非常容易解釋鹤耍。但有時候我們會遇到這樣的結局指標,如病情的嚴重程度吹艇、對服務質量的評價、患者滿意度等昂拂,這些指標都是有序的都分類指標受神,如輕度、中度格侯、重度鼻听;差、一般联四、好等撑碴。此時,如果要探究結局變量的影響因素朝墩,就會用到有序多分類Logistic回歸(Ordinal Logistic Regression)醉拓。這里我們以一個簡單的例子介紹在R中如何進行有序Logistic回歸的分析。
? ? ? ? ? ? ? 我們一個500人的數(shù)據(jù)收苏,變量有年齡(Age)亿卤、性別(Sex)、血壓(blood.pressure)和自評的健康狀況(outcome鹿霸,差排吴、一般、好)懦鼠。要分析自評的健康狀況的影響因素钻哩,我們要用到有序多分類Logistic回歸。在R語言中完成這個過程:
#####載入需要的包
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)
#####平行線檢驗---
brant(fit1) ###p>0.1,滿足平行線檢驗
####檢驗模型整體是否有意義
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
######多因素分析阳仔,方法類似-----------------------------
fit2<-polr(ordered(outcome)~ +sex+age+blood.pressure, data=data)
summary(fit2)
#####平行線檢驗---
brant(fit2) ###p>0.1,三個變量都滿足平行線檢驗
####檢驗模型整體是否有意義
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] ###提取前三個
out<- as.data.frame(cbind(OR_CI, P))
out
######結果輸出即可
write.table(out, file ="/STR_2.csv", sep = ",",? ? col.names = NA,qmethod = "double",append=TRUE)? ??
? ? ? ? ? ? 得到結果后如何解釋呢扣泊,以性別為例(僅解釋結果近范,先暫時忽略掉其沒有意義),我們可以說:“和女性相比延蟹,男性對自身的健康狀況評價更低 (OR=0.82, 95%CI=0.65-1.02)”评矩,或者是“男性認為自身健康好的OR值是女性的0.82倍 (OR=0.82, 95%CI=0.65-1.02)”。
? ? ? ? ? ?總結以上阱飘,對于有序多分類結局變量斥杜,我們可以用有序多分類Logistic回歸虱颗,但是要滿足平行線假設的條件,如果不滿足的話蔗喂,可以用無序多分類Logistic回歸或者轉化為二分類Logistic回歸忘渔。