You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中逻辑回归向后逐步选择仅得到截距模型的原因是什么

核心原因:你把向后逐步回归的起始模型传错了

向后逐步回归的运行逻辑是从包含全部候选变量的全模型出发,每一步尝试移除1个变量,若移除后模型AIC降低就保留该操作,直到移除任何变量都无法让AIC下降为止,最终输出最优模型。
你代码里的错误非常直接:

  • 你给step()传入的起始模型是仅含截距的空模型intercept_only,同时指定方向为backward(仅允许删除变量、不允许添加变量)
  • 空模型里本身没有任何自变量可供删除,因此step()不会执行任何筛选步骤,直接把你传入的起始截距模型作为结果返回,这和变量本身是否显著没有任何关系。
    你贴出的逐步回归输出也能佐证这一点:整个过程只有1步,残差自由度461、残差Deviance596.1084完全就是截距模型本身的拟合结果,根本没有执行变量移除的操作。
修正方法

把起始模型替换为你之前拟合的全变量模型即可,正确的向后逐步回归代码如下:

# 拟合全变量逻辑回归
full_model <- glm(chd ~ ., data = CHD, family = binomial(link = logit))
# 从全模型启动向后逐步回归
back <- step(
  full_model,
  direction = "backward",
  trace = 1 # 设为1可以打印每一步的变量移除过程,方便排查
)

补充:如果你要做向前逐步回归,才需要以截距模型为起点,方向设为forward,scope上限设为全模型,不要把两种方法的起始参数搞混:

intercept_only <- glm(chd ~ 1, data=CHD, family = binomial(link = logit))
# 向前逐步回归的正确写法
forward <- step(
  intercept_only,
  direction = "forward",
  scope = formula(full_model),
  trace = 1
)
修正代码后仍得到仅截距模型的含义

如果你修正代码后重新运行,最终结果仍然只剩截距项,才是统计层面的真实筛选结果,含义为:

  • 你纳入的所有自变量(sbp、tobacco、ldl、adiposity、typea、obesity、alcohol、age)在当前数据集上,都无法对CHD的患病风险提供统计上足够显著的解释增益,加入任何变量都无法让模型AIC低于仅截距模型
  • 通俗来说,基于当前样本,你用这些变量建出来的模型,预测效果还不如直接用样本中CHD的整体患病率作为所有人的预测概率
  • 出现这类结果常见的诱因包括:CHD阳性样本量太少导致检验效能不足、自变量和CHD的真实关联强度极低、自变量间存在严重多重共线性、样本存在较严重的选择偏倚等。

内容的提问来源于stack exchange,提问作者MaximeTars

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:09:26