在R的clogit()中如何获取预测因子主效应而非多项式分项?
问题:单变量条件Logistic回归获取预测因子主效应
我正在执行单变量条件logistic回归分析,代码如下:
modEpi <- with(imp30, clogit(Prognosis ~ Epidermal_contour, strata(Set_ID)))
运行后得到了Epidermal_contour的.L(线性)、.Q(二次)、.C(三次)、4(四次)及5(五次)多项式分项,但我希望获取该预测因子的主效应而非这些分项,请问该如何操作?
我使用以下代码汇总模型结果:
summaryPoolEpi=summary(pool(modEpi), conf.int = TRUE, exponentiate = TRUE) summaryPoolEpi
输出结果:
| 项 | 估计值 | 标准误 | 统计量 | 自由度 | P值 | 2.5%下限 | 97.5%上限 |
|---|---|---|---|---|---|---|---|
| Epidermal_contour.L | 0.782666 | 0.2491813 | -0.98341729 | 210.9379 | 0.32652872 | 0.4789046 | 1.2790984 |
| Epidermal_contour.Q | 1.425971 | 0.2361749 | 1.50250164 | 210.2856 | 0.13446781 | 0.8951888 | 2.2714695 |
| Epidermal_contour.C | 0.530852 | 0.2571401 | -2.46275099 | 209.1418 | 0.01459575 | 0.3197580 | 0.8813034 |
| Epidermal_contour^4 | 1.298370 | 0.2581982 | 1.01127713 | 210.1770 | 0.31304659 | 0.7804535 | 2.1599822 |
| Epidermal_contour^5 | 1.022575 | 0.2352206 | 0.09490628 | 211.2418 | 0.92447924 | 0.6431634 | 1.6258069 |
解决方案
出现多项式分项的核心原因是Epidermal_contour是有序因子(ordered factor),R在拟合模型时会自动将其分解为正交多项式项,而非单一主效应变量。以下两种方法可解决该问题:
方法1:将有序因子转换为连续变量
若该变量的数值等级具备实际量化意义,可先转换为连续型变量再拟合模型:
# 将有序因子转为连续变量 imp30$Epidermal_contour <- as.numeric(as.character(imp30$Epidermal_contour)) # 重新拟合条件Logistic回归 modEpi <- with(imp30, clogit(Prognosis ~ Epidermal_contour, strata(Set_ID)))
方法2:强制将有序因子当作名义因子处理
若需保留因子类型,可通过两种方式强制模型按原始因子拟合:
# 子方法2.1:用I()函数直接拟合原始因子 modEpi <- with(imp30, clogit(Prognosis ~ I(Epidermal_contour), strata(Set_ID))) # 子方法2.2:转换为名义因子后拟合 imp30$Epidermal_contour <- factor(imp30$Epidermal_contour, ordered = FALSE) modEpi <- with(imp30, clogit(Prognosis ~ Epidermal_contour, strata(Set_ID)))
完成上述操作后,再用summary(pool(modEpi), conf.int = TRUE, exponentiate = TRUE)汇总结果,即可得到Epidermal_contour的主效应(连续变量输出单一项的OR值,名义因子输出各水平相对于参照组的OR值)。
内容的提问来源于stack exchange,提问作者thamila
相关产品推荐
相关产品推荐

