这个问题已在stats.stackexchange上提出,但没有人回答 . 由于我不确定哪个论坛是合适的,我在这里再次发布一些数据 .

我已经对树皮的各种特征进行了实验,现在想要比较五种被检树种在评估参数方面的差异 . 因此,有人建议我应该使用MANOVA来分析我的数据,这对我来说似乎是合理的 . 我的分析是在 R 进行的 .

然而,与我发现的如何做MANOVA(即hereherehere)的大多数例子不同,我的数据来自不同的测量和来自不同的个体 . 现在,我发现只有this线程讨论不相等的样本量,但这只针对解释因素中的样本量 .

为了进一步说明,想象我有每种树种......

999 9测量树皮粗糙度 .

  • 4树皮厚度的测量,

  • 3 pH测量,

  • 5测量持水量,

  • 5测量保水性 .

当然,我可以为每个变量做单独的ANOVA(我已经做过了),但我认为MANOVA应该有一些优点,对吗?

我的问题:

MANOVA是否适合此类数据?我可以忽略不同的变量大小吗?有没有其他方法可以做到这一点,或者更确切地说是另一种统计测试?我的小样本量是否重要?

我的结果到目前为止:

R 中,我只是将所有变量放入一个 data.frame 并填充缺失值,因为 NA 的样本量不相等(这就是为什么我的 data.frame 下面有 nums 列) . 然后,我运行了一个像这样的MANOVA: pH + water content + thickness + roughness ~ tree species ,带有 manova 功能 .

示例数据:

manova_df = structure(list(abbr = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L), .Label = c("AS", "BU", "CL", "MB", "PR"
), class = "factor"), nums = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 
7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L), comb_rugosity = c(3.44, 2.29, 5.21, 1.45, 
2.84, 4.25, 1.54, 2.97, 1.38, 2.45, 9.44, 0, 0.58, 7.71, 5.53, 
0.84, 1.22, 1, 10.83, 15.77, 5.5, 8.49, 10.46, 9.16, 5.52, 6.55, 
1.77, 10.68, 13.43, 20.8, 8.82, 18.09, 15.1, 15.41, 16.3, 13.2, 
2.67, 0.95, 1.49, 2.7, 0, 0.92, 0.83, 0, 1.89), bark_mm = c(9.59, 
4.17, 17.23, 8.49, 3.58, NA, NA, NA, NA, 8.06, 13.53, 6.33, 10.96, 
12.14, NA, NA, NA, NA, 17.94, 7.33, 10.54, 14.68, 16.66, NA, 
NA, NA, NA, 8.52, 8.72, 7.57, 11.89, 6.41, NA, NA, NA, NA, 2.59, 
9, 3.26, 5.81, NA, NA, NA, NA, NA), pH = c(6.5, 7.33, 8.17, NA, 
NA, NA, NA, NA, NA, 7.84, 3.71, 12.47, 4.39, NA, NA, NA, NA, 
NA, 11.04, 6.22, 5.41, 4.29, NA, NA, NA, NA, NA, 9.26, 11.18, 
6.3, NA, NA, NA, NA, NA, NA, 8.42, 7.75, 4.33, NA, NA, NA, NA, 
NA, NA), whc = c(192, 251, 166, 170, 466, NA, NA, NA, NA, 308, 
187, 595, 324, 364, NA, NA, NA, NA, 171, 406, 790, 292, 579, 
NA, NA, NA, NA, 672, 251, 700, 245, 260, 485, 383, NA, NA, 325, 
481, 338, 476, 968, NA, NA, NA, NA), ret = c(83, 90, 286, 309, 
374, NA, NA, NA, NA, 109, 159, 98, 164, 636, NA, NA, NA, NA, 
144, 234, 383, 178, 446, NA, NA, NA, NA, 275, 56, 178, 107, 125, 
367, 137, NA, NA, 132, 120, 142, 147, 330, NA, NA, NA, NA)), row.names = c(NA, 
-45L), class = c("tbl_df", "tbl", "data.frame"))

看起来像这样(其中 abbr 是树种, nums 是每种树种的测量数量,其余是树参数):

> manova_df
# A tibble: 45 x 7
   abbr   nums comb_rugosity bark_mm    pH   whc   ret
   <fct> <int>         <dbl>   <dbl> <dbl> <dbl> <dbl>
 1 AS        1          3.44    9.59  6.5    192    83
 2 AS        2          2.29    4.17  7.33   251    90
 3 AS        3          5.21   17.2   8.17   166   286
 4 AS        4          1.45    8.49 NA      170   309
 5 AS        5          2.84    3.58 NA      466   374
 6 AS        6          4.25   NA    NA       NA    NA
 7 AS        7          1.54   NA    NA       NA    NA
 8 AS        8          2.97   NA    NA       NA    NA
 9 AS        9          1.38   NA    NA       NA    NA
10 BU        1          2.45    8.06  7.84   308   109
# ... with 35 more rows

我的分析很简单:

mano_mod = manova(cbind(pH, bark_mm, comb_rugosity, whc, ret) ~ abbr, data = manova_df)
> summary(mano_mod)
          Df Pillai approx F num Df den Df Pr(>F)
abbr       4 1.5708   1.4226     20     44 0.1628
Residuals 12

我没有在这里包含我的真实数据,但它们遵循相同的结构 . 给定的数据远非重要,而我的实际数据是!我的问题仅仅是关于我的数据中的许多 NA 以及测试是否准确 .

(如果有任何不清楚的地方,请询问 . )