假设:
在违反正态性假设的 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))