【问题标题】:Complex eigenvalues in Principal Coordinate Analysis (PCoA)主坐标分析 (PCoA) 中的复特征值
【发布时间】:2021-04-12 15:10:23
【问题描述】:

我正在分享一个与主坐标分析 (PCoA) 中的复杂特征值相关的问题。非常感谢任何帮助!

目标:在系统发育距离矩阵上执行 PCoA -> 在回归模型中包含排序轴,以说明植物物种(n = 1013 个物种)之间的系统发育相关性。

输入数据:系统发育距离矩阵,通过在有根和时间校准的系统发育上应用cophenetic() 函数获得。结果是一个 1013 x 1013 的矩阵,主对角线为 0。输入矩阵是对称的(根据isSymmetric())并且不包含复数(根据any(is.complex())。也没有NA。请参阅以下某些物种的子集:

    structure(c(0, 55.7063710000001, 105.333883, 237.6822, 237.682199, 
261.495339, 55.7063710000001, 0, 105.333886, 237.682203, 237.682202, 
261.495342, 105.333883, 105.333886, 0, 237.682201, 237.6822, 
261.49534, 237.6822, 237.682203, 237.682201, 0, 66.171369, 261.495341, 
237.682199, 237.682202, 237.6822, 66.171369, 0, 261.49534, 261.495339, 
261.495342, 261.49534, 261.495341, 261.49534, 0), .Dim = c(6L, 
6L), .Dimnames = list(c("Cyrtomium_falcatum", "Cyrtomium_fortunei", 
"Nephrolepis_cordifolia", "Pteris_cretica", "Pteris_vittata", 
"Azolla_filiculoides"), c("Cyrtomium_falcatum", "Cyrtomium_fortunei", 
"Nephrolepis_cordifolia", "Pteris_cretica", "Pteris_vittata", 
"Azolla_filiculoides")))

最小可重现示例:我创建了一个距离矩阵的子集来重现错误消息。它是 txt 格式的,你可以在 R 中使用read.table("you_path/distance.matrix.subset.txt", header = T, row.names = 1, sep = " ") 加载。下载它here (GoogleDrive)。

问题:错误消息表明执行 PCoA 时产生了复杂的特征值(如果我正确理解错误)。我使用默认设置的ape::pcoa()ape 版本 5.4.1)。

Error in min(D.eig$values) : invalid 'type' (complex) of argument

关于这个错误信息elsehwere已经进行了一些讨论,但是我还没有找到解决方案。

有趣的是,如果我使用 stats::cmdscale()stats 版本 3.6.3)执行 PCoA,我不会收到任何错误消息。此外,我最近对一组较小的物种(n = 79)进行了相同的程序,并且在使用ape::pcoa() 时没有收到错误消息。

非常感谢您提供任何帮助和/或见解!我是 Stack Overflow 的新手,所以请不要犹豫,告诉我如何使问题更易于理解,或者是否需要更多信息。

干杯!

【问题讨论】:

  • 如果没有minimal reproducible example,将很难弄清楚/解决这个问题...
  • 嗨!我可以使用大小为 600 x 600 的矩阵重现错误,但这仍然是一个相当大的数据集。关于如何共享如此大的数据集有什么建议吗?
  • 嗨!我添加了一个最小可重现示例,请参阅编辑后的帖子。非常感谢!

标签: r pca eigenvalue phylogeny ape


【解决方案1】:

我想我已经找到了问题所在 - 这是一个名为 center() 的内部函数深处的舍入错误,它使对称矩阵变为非对称 - 并提交了一个 Github 问题。

https://github.com/emmanuelparadis/ape/issues/17

【讨论】:

  • 感谢您的回复!显然 E. Paradis 没有发现任何错误……奇怪。无论如何,我不久前通过从 ape::pcoa 切换到 stats::cmdscale 来避开了这个错误。
猜你喜欢
  • 1970-01-01
  • 2011-06-26
  • 2016-01-16
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 2016-02-05
  • 1970-01-01
相关资源
最近更新 更多