基本原理
详见7.常用统计分析方法——Logistic回归_logistic回归模型怎么建立-CSDN博客
二分类Logistic回归
1. glm()函数
案例:探讨人群未来10年冠心病发生风险与人口学资料以及临床症状和体征之间的关系。
load("framingham.Rdata")
str(framingham)
因变量十年的冠心病风险为二分类资料,采用二分类logistic回归
对分类变量因子化:
framingham$male<-factor(framingham$male,
levels = c(0,1),
labels = c("女性","男性"))
framingham$education<-factor(framingham$education,
levels = c(1,2,3,4),
labels = c("高中以下","高中","大学","大学以上"))
framingham$currentSmoker<-factor(framingham$currentSmoker,
levels = c(0,1),
labels = c("不吸烟","吸烟"))
framingham$BPMeds<-factor(framingham$BPMeds,
levels = c(0,1),
labels = c("不服用","服用"))
framingham$prevalentStroke<-factor(framingham$prevalentStroke,
levels = c(0,1),
labels = c("无脑卒中家族史","有脑卒中家族史"))
framingham$prevalentHyp<-factor(framingham$prevalentHyp,
levels = c(0,1),
labels = c("无高血压家族史","有高血压家族史"))
framingham$diabetes<-factor(framingham$diabetes,
levels = c(0,1),
labels = c("不患糖尿病","患糖尿病"))
framingham$TenYearCHD<-factor(framingham$TenYearCHD,
levels = c(0,1),
labels = c("未来10年无冠心病风险","未来10年有冠心病风险"))
str(framingham)
二分类的logistic回归可以使用rms包中的lrm()函数或者基础包中的glm()函数,但是某些绘图中只能使用lrm函数绘制,所以推荐lrm函数。
framinghamLog <- glm(formula=TenYearCHD ~., data = framingham, family = binomial)
summary(framinghamLog)
用“.”表示除了TenYearCHD变量之外的所有变量,纳入方程。
family指定因变量TenYearCHD是二分类变量(binomial),如果不指定默认未Logit链接函数。
注意:如果glm()函数不指定family的类型,则会默认为正态分布,这时拟合就不再是Ligstic回归模型。
上述结果只提供了偏回顾i系数没有提供OR值。
方法一:
coef<-coef(framinghamLog)
coef_CI<-confint(framinghamLog)
OR_Results<-exp(cbind("OR"=coef,"LL"=coef_CI[,1],"UL"=coef_CI[,2]))
round(OR_Results,3)
利用coef()函数提取各自变量的偏回归系数。confint()函数提取各自变量的偏回归系数的95%置信区间。利用exp计算OR值。
解释:比如性别,以女性作为参考水平,男性未来10年冠心病的风险是女性的1.707倍,或者描述为男性未来10年冠心病的风险比女性高70.7%。
方法二:
epiDisplay包中的logistic.display()函数
library(epiDisplay)
logistic.display(framinghamLog,
crude=TRUE,
crude.p.value=TRUE,
simplified=FALSE)
crude设置为TRUE,将显示自变量单因素分析的OR及95%CI,crude.p.value则显示分析结果的p值,simplified=F表示不显示简化结果。
同时展现单因素和多因素的结果。
2.rms包lrm()函数
案例:探究低出生体重的危险因素,因变量low为二分类变量。
data("birthwt")
str(birthwt)
birthwt$white<-ifelse(birthwt$race==1,1,0)
birthwt$black<-ifelse(birthwt$race==2,1,0)
race有三个水平,表示母亲的种族,1表示白人,2表示黑人,3表示其他
二分类变量本身为哑变量,无须处理,需要处理多分类变量race
在数据集birthwt中生成white和black列,其中0,1分别表示否,是
这里没有将race=3设置为哑变量,在回归时race=3将作为参照水平。三分类变量处理成2个哑变量,以此类推,四分类处理为3个哑变量,五分类处理为4个哑变量。
library(rms)
birthwtLog <- lrm(formula=low~age+lwt+smoke+ptl+ht+ui+ftv+white+black,data =birthwt)
birthwtLog
同样没有显示OR值
coef<-coef(birthwtLog)
se<-c(1.1046,0.0370,0.0069,0.4022,0.3454,0.6975,0.4593,0.1724,0.4408,0.5376)
coef_CI<-cbind(coef-1.96*se,coef+1.96*se)
OR_Results<-exp(cbind("OR"=coef,"LL"=coef_CI[,1],"UL"=coef_CI[,2]))
round(OR_Results,3)
需要手动提取出coefficient的标准误se,然后利用近似正态法计算偏回归系数的95%CI。
其他Logistic回归
参考7.常用统计分析方法——Logistic回归_logistic回归模型怎么建立-CSDN博客