summary.manova 中的错误 - 残差有等级顺序缺陷
Error in summary.manova - residuals have rank order deficiency
我正在尝试进行多元方差分析。有 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])
然后我正在执行多元方差分析:
> 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
根据其他一些 posts,这似乎表明在给定变量数量的情况下没有足够的观察值,或者某些预测变量可能是多重共线性的。但是这个数据好像不是这样的:
> 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
我对可能发生的事情感到困惑。
您可以通过在 ?summary.manova
中设置 'tol' 参数来解决此错误。 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
DV 不是满秩,因为 rowSums(df$DV)
表明行值加起来是一个常数值。正如丹尼尔森指出的那样,这违反了 MANOVA 假设。
这种似乎遵循 "parts-of-a-whole" 结构模式的数据有时被称为组合数据。您可以在以下网站获得不错的工具并了解更多信息:
http://www.compositionaldata.com/
但是,作为一个简短的解决方案,我建议您在构建 MANOVA 模型之前对 DV 应用等距对数比变换(例如 compositions
package in R 中的 ilr
函数)。这应该可以防止错误消息和 MANOVA 假设问题。
library(compositions)
mv_out <- manova(ilr(clo(DV)) ~ cluster_assignment, data = df)
summary(mv_out)
这应该会给你一个公平的解决方案。
我正在尝试进行多元方差分析。有 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])
然后我正在执行多元方差分析:
> 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
根据其他一些 posts,这似乎表明在给定变量数量的情况下没有足够的观察值,或者某些预测变量可能是多重共线性的。但是这个数据好像不是这样的:
> 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
我对可能发生的事情感到困惑。
您可以通过在 ?summary.manova
中设置 'tol' 参数来解决此错误。 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
DV 不是满秩,因为 rowSums(df$DV)
表明行值加起来是一个常数值。正如丹尼尔森指出的那样,这违反了 MANOVA 假设。
这种似乎遵循 "parts-of-a-whole" 结构模式的数据有时被称为组合数据。您可以在以下网站获得不错的工具并了解更多信息:
http://www.compositionaldata.com/
但是,作为一个简短的解决方案,我建议您在构建 MANOVA 模型之前对 DV 应用等距对数比变换(例如 compositions
package in R 中的 ilr
函数)。这应该可以防止错误消息和 MANOVA 假设问题。
library(compositions)
mv_out <- manova(ilr(clo(DV)) ~ cluster_assignment, data = df)
summary(mv_out)
这应该会给你一个公平的解决方案。