1

我正在尝试进行 MANOVA。有7因变量和代表6组的分类自变量。

数据可在此处获得:http: //pastebin.com/fqXNjWtr

点击文字上方的下载。我正在使用R这样的方式读取文件(我认为下载文件的名称应该与您相同;我使用的是 Macintosh 操作系统):

> df <- read.csv("~/downloads/fqXNjWtr.txt", stringsAsFactors = F)
> str(df)

'data.frame':   244 obs. of  8 variables:
 $ var1              : num  0.3 0 0.312 0 0.643 ...
 $ var2              : num  0 0.125 0 0.375 0.0714 ...
 $ var3              : num  0 0.0625 0.0625 0 0.0714 ...
 $ var4              : num  0.2 0.3125 0.0625 0.0625 0 ...
 $ var5              : num  0.1 0.25 0.438 0.188 0 ...
 $ var6              : num  0.2 0.0625 0.125 0.0625 0.0714 ...
 $ var7              : num  0.2 0.188 0 0.312 0.143 ...
 $ cluster_assignment: int  1 4 2 6 1 4 3 3 4 6 ...

然后我正在创建因变量DV

> df$DV <- as.matrix(df[, 1:7])

然后我正在执行 MANOVA:

> mv_out <- manova(DV ~ cluster_assignment, data = df)
Call:
   manova(DV ~ cluster_assignment, data = df)

Terms:
                cluster_assignment Residuals
resp 1                    5.160838  6.738524
resp 2                    3.384101  3.622020
resp 3                    0.000200  3.365565
resp 4                    0.065469  2.743549
resp 5                    0.889180  8.019733
resp 6                    0.442187  5.884827
resp 7                    3.133188  7.736993
Deg. of Freedom                  1       242

Residual standard errors: 0.1668686 0.1223398 0.1179292 0.1064752 0.1820423 0.1559406 0.1788045
Estimated effects may be unbalanced

然后当我尝试该summary()功能时,我收到此错误:

> summary(mv_out)
Error in summary.manova(mv_out) : residuals have rank 6 < 7

根据其他一些帖子,这似乎表明在给定变量数量的情况下没有足够的观察结果,或者某些预测变量可能是多重共线性的。但是,这些数据似乎并非如此:

> cor(df[, 1:7)

            var1         var2        var3         var4        var5        var6       var7
var1  1.00000000 -0.417605243 -0.05274197 -0.118358341 -0.25617705  0.06089533 -0.4360312
var2 -0.41760524  1.000000000 -0.07181878  0.008873035 -0.29523300 -0.33954011  0.1958746
var3 -0.05274197 -0.071818782  1.00000000  0.131137673 -0.11624079 -0.14408909 -0.2951076
var4 -0.11835834  0.008873035  0.13113767  1.000000000 -0.14361455 -0.24308229 -0.1491373
var5 -0.25617705 -0.295233000 -0.11624079 -0.143614554  1.00000000 -0.03180183 -0.2383027
var6  0.06089533 -0.339540114 -0.14408909 -0.243082287 -0.03180183  1.00000000 -0.3215075
var7 -0.43603124  0.195874568 -0.29510761 -0.149137349 -0.23830275 -0.32150753  1.0000000

我对可能发生的事情感到困惑。

4

2 回答 2

4

您可以通过设置 'tol' 参数来解决此错误?summary.manova。df$DV 未通过默认 tol=1e-7 的排名不足测试,因为 rowSums 为 1。但这可能不会产生您想要的结果。

summary(mv_out,tol=0)
                       Df Pillai approx F num Df den Df Pr(>F)
df$cluster_assignment   1 1.2106  -193.79      7    236       
Residuals             242     
于 2016-09-11T00:43:16.083 回答
2

DV 不是满秩的,这rowSums(df$DV)表明行值加起来是一个常数值。正如 danielson 指出的那样,这违反了 MANOVA 假设。这种似乎遵循“整体部分”结构模式的数据有时被称为组合数据。您可以在以下网站获得不错的工具并了解更多信息:http: //www.compositionaldata.com/

但是,对于一个简短的解决方案,我建议您在构建 MANOVA 模型之前对 DV应用等距对数比变换(例如R 包中ilr的函数)。这应该可以防止错误消息和 MANOVA 假设问题。compositions

library(compositions)
mv_out <- manova(ilr(clo(DV)) ~ cluster_assignment, data = df)
summary(mv_out)

这应该给你一个公平的解决方案。

于 2019-09-25T12:23:02.277 回答