绘制的 envfit 向量与 NMDS 分数不匹配

2024-03-22

我制作了一个 NMDS 图并绘制了我的环境,如下所示

mytable 的数据框

sites=c("Site A","Site B","Site C","Site D","Site E","Site F","Site 
G","Site H","Site I","Site J","Site K","Site L","Site M","Site N","Site O","Site P","Site Q","Site R","Site S","Site T","Site U")
american.elm=c(41.91,10.11,2.62,5.31,7.51,9.72,17.44,9.06,19.83,30.81,62.6,21.29,20.7,28.68,27.69,34.89,35.65,3.87,12.68,1.58,2.97)
white.birch=c(7.07,15.89,26.77,15.61,14.59,6.33,2.23,11.66,21.49,20.15,7.61,23.29,0,0,0,0,0,0,0,56.09,42.34)
red.oak=c(0,0,0,0,0,0,0,0,0,0,0,6.02,0,0,0,0,0,0,0,0,0.05)
populus.grand=c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.11,0)
beech=c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.36,5.45)
sugar.maple=c(0.49,2.64,3.35,4.6,3.37,2,1.32,4.21,4.13,3.61,0.34,1.2,0,0,0,0,0,0,0,2.19,0.09)

mytable <- data.frame(sites,american.elm,red.oak,populus.grand,beech,sugar.maple)
mytable<-mytable[,2:ncol(mytable)]

Then

library(vegan)

mytable.NMDS=metaMDS(mytable, distance = "jaccard", k = 4, trymax = 2000, autotransform=FALSE)

plot.mytable<-data.frame(mytable.NMDS$points)
plot.mytable
par(mar=c(3,3,2,5) ,mgp=c(1.8,0.75,0))
plot(plot.mytable$MDS1, plot.mytable$MDS2, pch=16, cex=1, col="black",
     xlab="NMDS1", ylab="NMDS2", cex.lab=1, cex.axis=1, main="", bty="L",
     mai=c(0,0,2,10), xlim=c(-1.5,1.3), ylim=c(-0.9,1))

fit <- envfit(mytable.NMDS, mytable, choices=c(1,2,3))
fit.plot = plot(fit, cex=1.3, col="red", xlim=c(-1.5,1.3), ylim=c(-1.2,1.2),
                xlab="NMDS1",ylab="NMDS2")

树木的 NMDS 分数是这样的

fit
# Table of the NMDS score of the trees
Trees=c("american.elm","red.oak","populus.grand","beech","sugar.maple")
Tree.NMDS1=c(-0.76538,-0.1533,0.36065,0.25411,0.49583)
Tree.NMDS2=c(-0.27961,0.06605,-0.51345,-0.79497,0.84299)
Tree.NMDS.scores=data.frame(Trees,Tree.NMDS1,Tree.NMDS2)
# Overlay the NMDS score on the plot
points(Tree.NMDS.scores$Tree.NMDS1,Tree.NMDS.scores$Tree.NMDS2,
       col="red", pch=16)

我想知道为什么矢量箭头的末尾与给出的 NMDS 分数不匹配envfit()功能?


您在表中看到的值是线性回归的归一化系数,用于将向量投影到排序中。这些都是方向对于单位长度的箭头。绘制时,我们通过它们相关性的平方根来缩放这些箭头。因此,相关性较小的箭头比相关性较强的箭头用更短的箭头表示。您可以使用以下命令获得这些缩放的箭头长度scores() method:

> scores(fit, "vectors")
                    NMDS1       NMDS2      NMDS3
american.elm  -0.73129278 -0.26985224 -0.5479775
red.oak       -0.06624995  0.03042562  0.4270764
populus.grand  0.21774166 -0.31045377  0.4862402
beech          0.22772624 -0.70982231  0.4990966
sugar.maple    0.33541356  0.56604306 -0.1245767

但请注意,这些也不是图中箭头的实际坐标。由于这些只是方向,即使我们根据各个箭头与排序轴的相​​关性的强度缩放了各个箭头的长度,我们也可以将所有箭头缩放相同的量,以使它们更好地填充绘图空间。

这一切都在?envfit。这是相关部分:

连续变量(向量)的打印输出给出 方向余弦是单元头的坐标 长度向量。在plot这些是根据它们的相关性来缩放的 (列的平方根r2) 以便weak预测者有 箭头比短strong预测因子。你可以看到缩放后的 使用命令的相对长度scores. The plot特德(和 缩放)箭头进一步调整为当前图形使用 常数乘数:这将保持相对r2- 缩放的 箭头的长度,但尝试填充当前的绘图。你可以 使用查看乘数ordiArrowMul(result_of_envfit),并设置 它与论证arrow.mul.

如果我们遵循建议,我们会看到:

> ordiArrowMul(fit)
[1] 1.031244

这意味着我们乘以scaled箭头大约3%。

> scrs <- scores(fit, "vectors", choices = 1:2)
> scrs * ordiArrowMul(fit)
                    NMDS1      NMDS2
american.elm  -0.73819522 -0.2723993
red.oak       -0.06687526  0.0307128
populus.grand  0.21979686 -0.3133840
beech          0.22987567 -0.7165221
sugar.maple    0.33857942  0.5713858

将所有这些与您的绘图代码结合在一起,这就是我们如何得到由plot.envfit:

plot(mytable.NMDS, display = "sites", type = "n")
points(mytable.NMDS, display = "sites", pch = 19, col = "black")
plot(fit, col = 'red')

## add the locations of arrow heads as blue points to see if the correspond
points(scrs * ordiArrowMul(fit), col = "blue")

这就是我们得到的


请注意我如何使用现有的plot方法和提取器函数,例如scores()处理由以下对象生成的对象vegan并从组成部分构建图。以这种方式做事可以避免您 i) 必须输入您已经可用的信息,以及 ii) 当我们更改纯素对象的内部表示或内部存储的值是需要后续转换/处理的实际工作数据时,就会受到影响产生有效或可解释的值。尽可能避免使用$翻找物体。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

绘制的 envfit 向量与 NMDS 分数不匹配 的相关文章

随机推荐

  • 将 LIMIT 作为参数传递给 MySQL sproc

    我正在创建一个分页类 需要将两个参数传递给我的 MySQL 存储过程作为 LIMIT 子句 我将它们作为 INT 传递并尝试这样的事情 SELECT FROM MyTable LIMIT MyFirstParamInt MySecondPa
  • 可以从 iOS 应用程序打开 watchOS 应用程序吗?

    我知道苹果手表应用程序可以在后台启动其父应用程序来来回传递数据 但它可以反过来工作吗 我的 iOS 应用程序可以启动相关的 watchOS 应用程序吗 为了获得更多的见解 我正在尝试完成此任务 以便我可以定期监控数据以发出通知 苹果给了我
  • 无法将spark添加到PYTHONPATH

    我正在努力将 Spark 添加到我的 python 路径中 myenv me me home me set SPARK HOME home me spark 1 2 1 bin hadoop2 4 myenv me me home me s
  • 在新线程问题中使用 spring 发送电子邮件

    我正在开发的应用程序的功能之一是 每次用户在我们的系统中注册他的发票时都会发送一封电子邮件 从 Java 应用程序发送电子邮件很容易 尤其是使用 Spring 框架时 我用JavaMailSenderImpl and 简单邮件消息来自 Sp
  • Gmail HTML 电子邮件背景

    我正在处理 HTML 电子邮件 我遇到的问题是 GMAIL 不使用我给它的 背景位置 我有一个 100 宽度的表格 其背景必须居中 大多数客户端都能完美地做到这一点 但 Gmail 却做不到 有解决方法吗 内联CSS是这样的 我已经将所有背
  • 在任何地方使用 eks 创建集群时出错

    我正在尝试在任何地方使用 eks 在 centos7 机器上创建本地集群 但是我遇到了以下错误 如果我遗漏了什么 请告诉我 这是我用来创建集群的链接 我还附上了集群创建 yaml 文件 Link https aws amazon com b
  • jquery .load 使用 python 烧瓶

    我试图在我的 Flask 应用程序中使用 jquery load 来在每次用户按下按钮添加新的 div 时添加一个 div 但它找不到 html 文件 有问题的函数 document ready function add click fun
  • 什么是全局::?

    在 C 中我看到global 在自动生成的代码中经常使用 这不是我自己用过的东西 所以我不知道它的目的是什么 有人可以解释一下吗 global 指的是全局命名空间 它可以用来解决重新定义类型的问题 例如 class foo class Sy
  • XMLHttpRequest() 与 ActiveXObject("Microsoft.XMLHTTP") - 有什么意义?

    Microsoft 最终在 Internet Explorer 7 中添加了本机 XMLHttpRequest 对象 但我发现它可以在 Internet 选项 对话框中禁用 那么使用 XMLHttpRequest 与 ActiveXObje
  • 使用 gcov 进行交叉分析,但忽略 GCOV_PREFIX 和 GCOV_PREFIX_STRIP

    我想使用 GCOV 进行代码覆盖 但测试将在另一台机器上运行 因此可执行文件中 gcda 文件的硬连线路径将不起作用 为了更改此默认目录 我可以使用 GCOV PREFIX 和 GCOV PREFIX STRIP 环境变量 如上所述here
  • 将 Twitter Bootstrap 添加到 CodeIgniter?

    我使用 CodeIgniter 开发了网站 该网站使用 MySQL 来填充结果页面 我现在想改进所有页面的外观 大多数地方都推荐使用 Bootstrap 我尝试将 Bootstrap 添加到我的 CodeIgniter 项目中 但没有成功
  • Qt:QProcess调用终端+脚本

    我在使用 QProcess 时遇到了真正的麻烦 我已经查看了几个使用它的位置 但每次使用它时我的程序都会冻结 或者它只是不执行我想要它执行的操作 我想从 GUI 应用程序执行以下操作 将目录更改为 Users Tim etc 等 从那里我需
  • 创建一个简单的 VUE.JS 应用程序

    我正在尝试按照以下步骤在应用程序中使用 Vue 中的简单多边形裁剪器article https morioh com p 06b7fc24c8b5 我使用以下方法创建了我的应用程序 vue init webpack myproject 现在
  • 如何在包含 Rust 特征的泛型类型上实现 deref?

    如果能够使用 Deref 从通用容器生成 TraitType 而不是调用 instance as ref 会相当方便 IE my container do thing vs my container as ref do thing 为此 我
  • 防止复制使用 dompdf 创建的 pdf 中的内容

    有没有办法阻止接收者在dompdf中选择和复制pdf文件的内容 像其他打开它时看起来像图片的pdf文件一样 所有字母和图像都无法选择 您可以使用底层 CPDF 引擎来指定用户可以对文档执行哪些操作 根据 CPDF 文档 调用 setEncr
  • 获取设备令牌时发件人 ID 无效

    我正在我的 Android 应用程序中进行 Firebase 云消息传递设置 我不是第一次做 我已经做过很多次了 但这一次 我在尝试获取设备令牌时遇到了一个奇怪的错误 无效的发件人 ID 除了默认情况下存在于 google services
  • 如何使用Java打开和关闭虚拟键盘

    我尝试了这里的所有答案 在Java程序中打开Windows虚拟键盘 https stackoverflow com questions 4948420 open the windows virtual keyboard in a java
  • 抽象类中受保护的抽象或公共抽象方法

    嗨 我有一个抽象类 其中有一些公共方法和一些抽象方法 我有公众 以便他们实现派生类的通用方法 让我困惑的是为什么我想要定义一个公共抽象方法而不是受保护的抽象方法 对我来说 在抽象类中定义公共抽象方法是没有意义的 因为 if 是一个抽象 在派
  • Laravel 5,连接子句中的派生表?

    我有这样的疑问 SELECT FROM blog LEFT JOIN SELECT blog id AVG value as blog rating FROM blog ratings GROUP BY blog id T ON T blo
  • 绘制的 envfit 向量与 NMDS 分数不匹配

    我制作了一个 NMDS 图并绘制了我的环境 如下所示 mytable 的数据框 sites c Site A Site B Site C Site D Site E Site F Site G Site H Site I Site J Si