数据变换(Box-Cox/Yeo-Johnson)
这个方法是做什么的
给一个偏态的定量变量找一个幂次 λ,把它拉得更接近正态。λ 由极大似然估计得到,并附一个剖面似然 95% 置信区间。变换方法在控件里选:Box-Cox 只对严格为正的数据有定义,Yeo-Johnson 对任意实数(含 0 与负值)都有定义,默认是后者。一次只处理一个变量。
它不只报一个 λ。第二张卡给出 λ 的特殊取值检验:H₀ 为 λ=1(等价于不做变换)与 λ=0(对数变换)的似然比检验,各带 LR、df 与 p;同一张卡并排列出变换前后的偏度、超额峰度及各自 95% 置信区间、Shapiro-Wilk W 与 p。第三张卡是变换前后的直方图、Q-Q 图与 λ 的剖面对数似然曲线(峰顶是 λ̂,灰色门限线以上的区间即 95%CI)。第四张卡用不随样本量变化的量衡量改善:KS 距离 D、偏度与峰度绝对值的相对降幅,以及形态指标的置信区间是否覆盖 0。它是报告式分析,不会往你的数据集里写入变换后的新列。
需要准备什么数据
- 放入[定量]待变换变量:不限
数据要求
- 数据表至少 8 行。
- 单列缺失率不超过 50%。
- 不接受取值全都一样的列(零方差列没有可分析的变异)。
以上条目由系统从该方法的校验规则直接生成,与上传数据时的实际拦截规则一致。
什么时候用它
- 一个右偏的连续变量(支出、时长、浓度、收入)想在做参数方法前先拉正
- 需要一个有依据的 λ,而不是凭经验直接取对数
- 想知道"到底该不该变换"——λ=1 的似然比检验与 λ 的置信区间就是回答这个的
- 论文的数据预处理部分需要交代变换参数是怎么定的
前提是该列为定量数值列、剔除缺失与非有限值后至少 8 个有效观测、且不是常数列。选了 Box-Cox 而数据里含 0 或负值,模块会直接拒绝并提示改用 Yeo-Johnson。
什么时候不要用它
- 你只想知道正不正态、并不打算动数据:用「正态性分析」,它给五种检验、形态指标的置信区间与三张图。
- 偏态是少数极端值造成的,不是分布形状:换 λ 解决不了这个,用「缩尾处理(Winsorize)」把两尾压到分位点上,或者先回原始数据核对那几个点是不是录入错误。
- 直方图呈双峰或明显的混合分布:幂变换只能校正单峰偏态,对混合分布无效。先查是不是混进了不同来源的子总体——用「描述性统计」看分布形态,怀疑有亚群就用「聚类分析(K-Means)」找出来分开建模。
- 变量是计数,尤其零特别多:硬做变换会把"0"这个有实际含义的取值挪到别处,改用为计数设计的「计数数据回归」,零过多时用「零膨胀计数回归(ZIP/ZINB)」。
- 你真正想修的是回归残差不正态:原始自变量或因变量正态与否本来就不是最小二乘的前提,先看「线性回归 (最小二乘法)」第一张卡的残差诊断;若是异方差或尾部主导,改用推断不依赖同方差的「分位数回归」更直接。
容易误读的地方
- 变换之后,系数和效应量的单位变了,解释必须回到原尺度。 λ = −0.05 之后的"1 个单位"不再是"1 元",在变换尺度上跑出来的回归系数、组间均值差、Cohen's d 都不能直接说成"多花 100 元对应……"。只有 λ=0(对数)有干净的百分比/几何均值解释,其他 λ 没有对应的通俗表述——通行做法是把预测值反变换回原尺度再报告,并注明反变换后得到的是条件中位数一类的量而非均值。
- λ=1 的似然比检验不显著,就不该变换。 模块专门做了这个检验,并且表注写死了它是最重要的一行:不拒绝 λ=1 意味着幂变换没有带来统计上可辨识的改善,此时保留原始变量、保住可解释性更划算。等价的读法是看 λ 的 95%CI 有没有覆盖 1。示例那次 LR = 118.93、p < 0.001,CI 为 [−0.24, 0.14] 不覆盖 1,才算"确需变换"。
- λ 是从这批数据估出来的,它本身带着抽样误差。 剖面似然曲线越平坦,说明一大片 λ 与数据同样相容,此时纠结小数点后几位没有意义,取一个邻近的整洁值(如 0 或 0.5)往往更好交代。把估出来的 λ 当成已知常数带进下游推断,会低估整条链路的不确定性。
- Box-Cox 与 Yeo-Johnson 的差别只在定义域,代价在可解释性。 前者要求 x > 0,λ 有"平方根、对数、倒数"这类直观对应;后者允许 0 和负值,做法是对正负两侧分别施加不同的表达式,λ 的直观解释也随之变弱。数据全为正时优先选 Box-Cox;含 0 或负值时只能用 Yeo-Johnson,并在方法部分写明。
- 变换后 p 值变大不等于"数据变正态了"。 正态性检验只能拒绝、不能证明正态,而且 p 强烈依赖样本量。真正该看的是与样本量无关的量:第四张卡的 KS 距离 D(示例由 0.1342 降到 0.0331)、偏度与超额峰度的绝对值降幅,以及它们的 95% 置信区间是否覆盖 0。大样本下即使变换很成功,p 也可能仍然小于 0.05。
- 模块不生成变换后的列,你得自己造。 它只输出对比报告与 λ,不修改原始数据集。要在后续分析里用变换后的变量,需按报告给出的 λ 与方法自行生成新列——同一份数据重复跑会得到同一个 λ,但换了子集(比如只用训练集)λ 就会变,跨数据集使用时应固定同一个 λ 而不是各估各的。
检验只能拒绝原假设,不能证明它成立。p = 0.42 既可能是真的没有差别,也可能是样本量不够、差别没被检出来,两者从这个 p 值上分不开。规范的写法是「没有证据表明……」;要论证「两者确实相当」,需要另做等价性检验。
报告里有什么
- 输出结果一:数据概览与前提检验
- 输出结果二:最优 λ 与变换前后正态性对比
- 输出结果三:变换前后分布可视化与 λ 剖面似然
- 输出结果四:变换效果的量化指标(效应量)
- 输出结果五:结论与学术表述
左图为变换前、右图为变换后的频数分布;绿色曲线是按各自样本均值与标准差绘制、并缩放到频数量级的理论正态曲线。柱形越贴合绿线越接近正态。切换器的「表格」视图给出变换后的分箱频数。
散点为样本分位数对理论正态分位数,虚线为拟合参考线;散点越贴近参考线越接近正态。
曲线为对数似然随 λ 的变化,峰顶即最优 λ̂ = -0.0503(红色竖线);灰色水平虚线为 95%CI 门限 llf(λ̂) − χ²₀.₉₅(1)/2 = -1560.7692,曲线高于该门限的 λ 区间即 95% 置信区间(橙色竖线为其端点)。