【问题标题】:adonis function from vegan doesn't work素食主义者的阿多尼斯功能不起作用
【发布时间】:2015-02-17 20:19:15
【问题描述】:

我在解决一个错误时遇到了问题。这是我尝试执行的行:

library(vegan)
adonis(data = dset, adiv ~ N+P+K)

它返回一个失败消息:

Error in rowSums(x, na.rm = TRUE) : 
  'x' must be an array of at least two dimensions

数据集似乎一切正常,因为 aov(data = dset, adiv ~ N+P+K) 工作得很好。我知道当某些函数丢弃数据框尺寸时会出现此类错误,但我不知道在这种情况下如何修复它。

编辑。添加一段我的数据集。

treatment   N   P   K   M   adiv
N   1   0   0   0   0.2059
P   0   1   0   0   0.20856
K   0   0   1   0   0.22935
O   0   0   0   0   0.10729
NP  1   1   0   0   0.30674
NK  1   0   1   0   0.30509
PK  0   1   1   0   0.30606
NPK+    1   1   1   1   0.50389
NPK 1   1   1   0   0.40731
manure  0   0   0   1   0.2085

在我尝试执行 adonis 之前,我将处理值转换为以下因素:

dataset$N <- as.factor(dat$N)
dataset$P <- as.factor(dat$P)
dataset$K <- as.factor(dat$K)
dataset$M <- as.factor(dat$M)

然后我只是尝试执行该函数并得到错误。 正如我已经提到的,当我尝试 aov() 或 lm() 时,一切正常。

【问题讨论】:

  • 你能做一个重现错误的小例子吗?
  • @RomanLuštrik 我添加了一些附加信息。

标签: r vegan


【解决方案1】:

这是猜测,因为您的问题没有可重复的内容。但是,如果我使用单变量响应,我可能会触发类似的错误:adonis 用于多变量响应,可能不适用于单变量响应。可以使用?adonis 阅读adonis 帮助页面,它说公式的左侧应该是“相异对象(继承自类"dist")或数据框或矩阵。”当我尝试时,遵循这一点会有所帮助(但我真的无法重现您的示例):您可以尝试使用 as.matrix(Nitrososphaearaceae)dist(Nitrososphaeraceae) 的 lhs。

adonis 函数确实适用于多变量响应,使用单变量响应需要小心。您还应该仔细考虑与此类模型一起使用的相异性(或距离)类型。例如,上面的两个备选方案将给出不同的结果,因为它们使用不同的差异度量。我完全不确定在单变量响应中使用基于距离的方法(如 adonis)是否有意义。

【讨论】:

  • 使用 as.matrix() 解决了这个问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2017-09-16
相关资源
最近更新 更多