PAYATHON 2026

变量从克缩放为千克后,多项 Logistic 回归的 p 值为何变化?

数据小许

结论

如果两个模型使用相同的观测、类别参考组和模型设定,把出生体重从克换算成千克只会改变系数的计量单位。斜率系数和标准误会按相同比例变化,因此 Wald 统计量和 p 值理论上不变。截距不受单位换算影响。

如果 p 值明显不同,应检查两个模型使用的数据、参考类别和拟合设定是否一致,也要确认模型是否收敛、Hessian 是否可靠。仅凭所给代码,无法确定 SPSS 与 R 的结果为何不同。

系数和标准误如何换算

对于任一非参考类别,模型的线性预测项可以写成:

β_g × birthweight_g

由于 birthweight_kg = birthweight_g / 1000,同一个线性预测项也可以写成:

β_kg × birthweight_kg

要使两者相等,必须满足 β_kg = 1000 × β_g。标准误也会随系数的线性变换乘以 1000。以千克为单位时,系数和标准误的数值都会变大,但两者的比值不变:

z = β / SE

Wald 检验的 p 值由这个比值计算,因此理论上应保持不变。单位换算不会改变模型的截距参数,所以截距系数和标准误应基本相同。

在 R 中比较结果

multinom() 的 summary() 结果包含系数矩阵及对应的标准误矩阵。可以比较斜率系数、标准误的比例,以及两种单位下的 Wald 统计量:

coef_g <- coef(model_g)
coef_kg <- coef(model_kg)
se_g <- summary_g$standard.errors
se_kg <- summary_kg$standard.errors

# 各类别的 birthweight 斜率系数与标准误
cbind(
  coef_g = coef_g[, "birthweight_g"],
  coef_kg = coef_kg[, "birthweight_kg"],
  se_g = se_g[, "birthweight_g"],
  se_kg = se_kg[, "birthweight_kg"],
  z_g = coef_g[, "birthweight_g"] / se_g[, "birthweight_g"],
  z_kg = coef_kg[, "birthweight_kg"] / se_kg[, "birthweight_kg"]
)

在数据和模型条件相同的情况下,coef_kg / coef_g 和 se_kg / se_g 应接近 1000,z_g 和 z_kg 应接近。浮点计算可能带来极小误差,但通常不会导致 p 值明显不同。

如果 p 值仍然不同,检查这些条件

  1. 模型是否使用相同观测。 比较两个模型的样本量和所用行。缺失值处理或数据筛选不同,都会改变估计结果。
  2. 类别和参考组是否相同。 代码将 D 设为因子参考组;还需确认 SPSS 中的因变量类别顺序和参考类别设置一致。
  3. 模型设定和检验方法是否一致。 确认两边使用的是相同的多项 Logistic 模型,并核对检验方式,例如 Wald 检验或似然比检验。
  4. 模型是否收敛,Hessian 是否可用。 Hess = TRUE 会计算 Hessian,用于估计标准误,但不能单独保证 Hessian 数值稳定。查看 model_g$convergence 和 model_kg$convergence。如果收敛状态异常或 Hessian 病态,标准误可能不可靠。
  5. 比较的是否为同一参数。 多项模型会针对不同的非参考类别分别估计系数。应逐类别比较出生体重的斜率及其标准误,避免混淆不同类别的参数。

如果系数和标准误约按 1000 倍变化,而 p 值基本相同,这是单位换算的预期结果。若 p 值或显著性实质不同,应逐项核对上述条件。现有材料不足以判断差异来自数值稳定性、软件设定还是数据处理。

备注:内容仅供参考。