多因素Logistic回归OR值表展示及参照组、NA值设置问题
多因素Logistic回归问题解答
1. 设置0为参照组并获取OR值
首先要注意,class_dummy是0~3的多分类变量,如果直接以数值型输入glm,会被当成连续变量处理,这不符合分组参照的需求。必须先把它转成因子变量,明确指定0作为参照组:
# 转换class_dummy为因子,参照组设为0 reg_df$class_dummy <- factor(reg_df$class_dummy, levels = c(0,1,2,3), ref = 0) # 其余0/1哑变量如果是数值型,glm默认会以0为参照;如果原本是因子,也可以用同样方式指定 reg_df$smoke_dummy <- factor(reg_df$smoke_dummy, levels = c(0,1), ref = 0) reg_df$drink_dummy <- factor(reg_df$drink_dummy, levels = c(0,1), ref = 0) reg_df$edu_dummy <- factor(reg_df$edu_dummy, levels = c(0,1), ref = 0) reg_df$sex_dummy <- factor(reg_df$sex_dummy, levels = c(0,1), ref = 0)
拟合模型后,summary(model)输出的是对数优势比(log odds),要得到OR值(优势比),只需要对系数取指数,同时可以附带95%置信区间:
model <- glm(NEWDI ~ class_dummy + age + smoke_dummy + drink_dummy + bmi + edu_dummy + sex_dummy, data = reg_df, family = "binomial") # 输出OR值及置信区间 exp(cbind(OR = coef(model), confint(model)))
其中连续变量age和bmi的OR值,代表变量每增加1单位时,结局发生的优势比变化。
2. NA值的处理
glm默认采用逐例删除的方式处理NA:只要某一行里,模型用到的任何一个变量有NA,整行数据都会被排除在回归计算之外。
你可以用以下代码确认缺失情况:
# 查看目标变量的缺失数 colSums(is.na(reg_df[, c("smoke_dummy", "drink_dummy", "bmi", "edu_dummy")])) # 查看模型实际使用的样本量(已剔除含NA的行) nrow(model$model)
如果需要更复杂的缺失值处理(比如多重插补),可以用mice这类包,但默认情况下glm确实会自动忽略带NA的观测。
内容的提问来源于stack exchange,提问作者Bruce
相关产品推荐
相关产品推荐

