我的因变量是连续的、非正态的(根据 Shapiro-Wilk 检验向左倾斜)。我有两个自变量(按颜色、食物类型划分的治疗组)。每个自变量内有 3 个水平。每个自变量的观察数不相等。
我查找了非参数检验,例如弗里德曼检验和 Scheirer-Ray-Hare 检验,这两种检验似乎都不合适(由于观察次数不等)。
是否有任何人可以建议的替代测试?我正在使用 SAS。
我的因变量是连续的、非正态的(根据 Shapiro-Wilk 检验向左倾斜)。我有两个自变量(按颜色、食物类型划分的治疗组)。每个自变量内有 3 个水平。每个自变量的观察数不相等。
我查找了非参数检验,例如弗里德曼检验和 Scheirer-Ray-Hare 检验,这两种检验似乎都不合适(由于观察次数不等)。
是否有任何人可以建议的替代测试?我正在使用 SAS。
你想回答什么问题?
如果您想要对正在发生的任何事情进行整体测试,空值是主效应和交互作用都为 0,那么您可以用它们的等级替换所有数据点,只需进行常规 ANOVA 与截距/大均值进行比较唯一的模型。这基本上是有多少非参数测试起作用,使用等级将数据转换为均匀分布(在空值下),并且通过将其视为正常得到一个很好的近似值(中心极限定理适用于样本的均匀分布)大于约 5 或 6 的尺寸)。
对于其他问题,您可以使用置换测试。如果您想同时测试其中一个主效应和交互作用(但允许另一个主效应为非零),那么您可以置换正在测试的预测变量。我想测试交互作用,同时允许两个主效应都为非零,那么您可以仅拟合主效应的简化模型并计算拟合值和残差,然后随机排列残差并将置换后的残差添加回拟合值并拟合包括交互在内的完整方差分析模型。重复此操作多次以获取交互效果大小的空分布,以与原始数据中的交互效果大小进行比较。
可能存在用于执行此类操作的现有 SAS 代码,我已经看过一些关于使用 SAS 进行引导和排列测试的基本教程(最快的方法似乎是使用数据步骤在一个大表中创建所有数据集,然后使用处理以进行分析)。就我个人而言,我将 R 用于这种类型的事情,因此在使用 SAS 时无法提供更多帮助。
编辑
以下是使用 R 代码的示例:
> fit1 <- aov(breaks ~ wool*tension, data=warpbreaks)
> summary(fit1)
Df Sum Sq Mean Sq F value Pr(>F)
wool 1 451 450.7 3.765 0.058213 .
tension 2 2034 1017.1 8.498 0.000693 ***
wool:tension 2 1003 501.4 4.189 0.021044 *
Residuals 48 5745 119.7
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
>
> fit2 <- aov(breaks ~ wool + tension, data=warpbreaks)
>
> tmpfun <- function() {
+ new.df <- data.frame(breaks = fitted(fit2) + sample(resid(fit2)),
+ wool = warpbreaks$wool,
+ tension = warpbreaks$tension)
+ fitnew <- aov(breaks ~ wool*tension, data=new.df)
+ fitnew2 <- update(fitnew, .~ wool + tension)
+ c(coef(fitnew), F=anova(fitnew2,fitnew)[2,5])
+ }
>
> out <- replicate(10000, tmpfun())
>
> # based on only the interaction coefficients
> mean(out[5,] >= coef(fit1)[5])
[1] 0.002
> mean(out[6,] >= coef(fit1)[6])
[1] 0.0796
>
> # based on F statistic from full-reduced model
> mean(out[7,] >= anova(fit2,fit1)[2,5])
[1] 0.022