R中重复测量方差分析(rANOVA)的Box-Cox变换

机器算法验证 方差分析 重复测量 数据转换
2022-03-31 16:28:10

我的解决方案建议

尽管知道观察是非独立的,但执行 Box-Cox 变换,然后使用 rANOVA 来估计系数,使用观察来自重复测量设计的知识

什么是方差分析?

可以将基本单向(具有一个离散解释变量)方差分析(ANOVA) 模型视为具有一个离散解释变量的线性模型的特例。

ANOVA 估计解释变量水平之间响应变量平均值的差异,并返回 F 统计量(基于方差,因此得名),从中可以推断出估计差异的统计显着性(在线性模型,用于合适的变量编码)。

为什么我们使用 Box-Cox 变换?

由于 F 统计量的形式,需要假设残差方差的独立性、正态性和同质性。这些假设通常不满足,人们可能会使用完整模型执行Box-Cox 变换,以将响应变量变换为具有更normal相似的分布。

问题:重复测量

有时可能会遇到一项为重复测量而设计的研究,然后需要特殊Error层来考虑模型的阻塞性质。因此,可以执行重复测量方差分析 (rANOVA),但通常会遇到非正态分布情况。

处理重复测量似乎是一个已解决的数学问题,而且Box-Cox当不满足正态性假设时,统计学具有转换功能,因此也有处理非正态性的工具。但是,如果设计被阻止,我们会遇到重复测量类型的观察结果,并且响应变量不是来自正态分布。

问题

然后应该对重复测量方差分析(rANOVA)执行 Box-Cox 变换,但它似乎没有在 R 统计包中实现。

我试过自己看一下MASS::boxcox函数的实现(https://github.com/cran/MASS/blob/master/R/boxcox.R),但只出现了一种标准方法aov(方差分析) 被视为线性模型(lm类)。对于重复测量 ANOVA (class aovlist) R 下面的例子不起作用

> npk.aov <- aov(yield ~  N*P*K, npk)
> boxcox(npk.aov)
> npk.aovE <- aov(yield ~  N + Error(block), npk)
> boxcox(npk.aovE)
Error in boxcox.default(npk.aovE) : 
  ‘npk.aovE’ does not have both 'qr' and 'y' components
> boxcox(npk.aovE[[3]])
Error in update.default(object, y = TRUE, qr = TRUE, ...) : 
  need an object with call component
> npk.aovE[[3]]$y <- npk$yield
> boxcox(npk.aovE[[3]])
Error in qr.resid(xqr, yt) : 
  'qr' and 'y' must have the same number of rows

因为QR分解矩阵只有 18 行

> nrow(npk.aovE[[3]]$qr$qr)
[1] 18
> NROW(npk.aovE[[3]]$y)
[1] 24

有谁知道如何实施这样的算法或见过任何包含 Box-Cox 转换的软件包,用于重复测量方差分析?我已经看到弗里德曼的方法,它等同于 Kruskal-Wallis 检验(非参数方差分析),用于重复测量类型的观察,甚至是 Tal Galili 实施的事后检验(http://www.r-statistics。 com/2010/02/post-hoc-analysis-for-friedmans-test-r-code/)但这种方法对我来说还不够,因为我不会通过秩检验获得线性模型系数,弗里德曼的检验是 -我最感兴趣的是了解解释变量中组之间的区别。也许有人可以提出一种不同于 Box-Cox 变换的方法来进行重复测量 ANOVA(rANOVA)?

1个回答

正如@kjetil b halvorsen 建议的那样,我会使用线性混合模型:这里是相关的论文帖子