为 ANOVA 估计 Box Cox 变换的 Lambda

机器算法验证 r 方差分析 最大似然 造型 数据转换
2022-04-10 21:02:05

假设:

在违反正态性假设的 ANOVA 中,可以将 Box-Cox 变换应用于响应变量。lambda可以通过使用最大似然来优化模型残差的正态性来估计

问题:

lambda空模型和完整模型中的估计值不同时,应该如何lambda估计?

我的数据:

在我的数据中,空模型-2.3的 lambda 估计值为 ,完整模型的 lambda 估计值为-2.8. 使用这些不同的参数转换响应并执行 ANOVA 会导致不同的 F 统计量。

我在下面生成了一个简化版本的分析,使用具有不同参数的 beta 分布来模拟非正态性。不幸的是,在这个例子中,方差分析的结果对 的不同估计不敏感lambda因此,它并不能完全说明问题。

library(ggplot2)
library(MASS)
library(car)


#Generating random beta-distributed data
n=200
df <- rbind(
  data.frame(x=factor(rep("a1",n)), y=rbeta(n,2,5)), # more left skewed
  data.frame(x=factor(rep("a2",n)), y=rbeta(n,2,2))) # less left skewed

print(qplot(data=df, color=x, x=y, geom="density"))

print("Untransformed Analaysis of Variance:")
m.null <- lm(y ~ 1, df)
m.full <- lm(y ~ x, df)
print(anova(m.null, m.full))

# Estimate Maximum Liklihood Box-Cox transform parameters for both models
bc.null <- boxcox(m.null); bc.null.opt <- bc.null$x[which.max(bc.null$y)]
bc.full <- boxcox(m.full); bc.full.opt <- bc.full$x[which.max(bc.full$y)]

print(paste("ML Box-Cox estimate for null model:",bc.null.opt))
print(paste("ML Box-Cox estimate for full model:",bc.full.opt))

df$y.bc.null <- bcPower(df$y, bc.null.opt)
df$y.bc.full <- bcPower(df$y, bc.full.opt)

print(qplot(data=df, x=x, y=y.bc.null, geom="boxplot"))
print(qplot(data=df, x=x, y=y.bc.full, geom="boxplot"))


print("Analysis of Variance with optimial Box-Cox transform for null model")
m.bc_null.null <- lm(y.bc.null ~ 1, data=df)
m.bc_null.full <- lm(y.bc.null ~ x, data=df)
print(anova(m.bc_null.null, m.bc_null.full))

print("Analysis of Variance with optimial Box-Cox transform for full model")
m.bc_full.null <- lm(y.bc.null ~ 1, data=df)
m.bc_full.full <- lm(y.bc.null ~ x, data=df)
print(anova(m.bc_full.null, m.bc_full.full))
2个回答

Box-Cox 变换试图改善残差的正态性。由于这也是 ANOVA 的假设,因此您应该在您实际要使用的模型(即完整模型)上运行它。例如,如果您有两个分离良好的组,则响应变量的分布将是强双峰分布,即使在每个组内分布都是正态的,也不会接近正态分布。

此外,您当然希望将 whuber 的评论牢记在心,并检查异常值、缺失的预测变量等,以确保某些伪影没有推动您的转换。还要考虑最佳 lambda 周围的置信区间,以及该区间内的特定转换是否具有应用意义。例如,如果您有线性测量,但结果合理地与体积相关,那么 lambda=3 或 lambda=-3 可能是有意义的。另一方面,如果涉及区域,则 2 或 -2 可能是更好的选择。

在使用相同的数据集拟合 lambda 后,不适合做普通的 ANOVA。分析应该是统一的,对 lambda 中的不确定性进行惩罚(要估计的参数,并包含在协方差矩阵中)。