后续:将 vegan 包中的 ordiellipse 函数绘制到 ggplot2 中创建的 NMDS 图上

2023-12-11

我正在尝试做一些类似于旧帖子的事情:绘图 - 原始帖子

在我的分析中,我感兴趣的是不同的哺乳动物宿主是否有不同的跳蚤群落。我链接到的原始帖子有两种不同的椭圆解决方案。我的问题是,当我运行第一个解决方案和通用解决方案时,我得到的图看起来截然不同,但我认为它们应该非常相似。下面是我的代码。

我的问题是:我是否做错了什么或者哪个代码产生了正确的数字?或者我应该使用更好的新代码来显示宿主物种跳蚤群落的差异?

谢谢, 阿曼达

Link to ARG_comm数据 链接到ARG_env data

library(vegan)
library(BiodiversityR)
library(MASS)

comm_mat <- read.csv("d:/fleaID/ARG_comm.csv",header=TRUE)
env <- read.csv("d:/fleaID/ARG_env.csv",header=TRUE)

library(ggplot2)
sol <-metaMDS(comm_mat)
MyMeta=env

#originalresponse
NMDS = data.frame(MDS1 = sol$points[,1],     MDS2=sol$points[,2],group=MyMeta$host)
NMDS.mean=aggregate(NMDS[,1:2],list(group=NMDS$group),mean)

veganCovEllipse<-function (cov, center = c(0, 0), scale = 1, npoints = 100) 
{
  theta <- (0:npoints) * 2 * pi/npoints
  Circle <- cbind(cos(theta), sin(theta))
  t(center + scale * t(Circle %*% chol(cov)))
}

df_ell <- data.frame()
for(g in levels(NMDS$group)){
  df_ell <- rbind(df_ell, cbind(as.data.frame(with(NMDS[NMDS$group==g,],
                                                   veganCovEllipse(cov.wt(cbind(MDS1,MDS2),wt=rep(1/length(MDS1),length(MDS1)))$cov,center=c(mean(MDS1),mean(MDS2)))))
                                ,group=g))
}

ggplot(data = NMDS, aes(MDS1, MDS2)) + geom_point(aes(color = group)) +
  geom_path(data=df_ell, aes(x=MDS1, y=MDS2,colour=group), size=1, linetype=2)+
  annotate("text",x=NMDS.mean$MDS1,y=NMDS.mean$MDS2,label=NMDS.mean$group)

#update - can use se (standard error) or sd (standard dev)
#update
NMDS = data.frame(MDS1 = sol$points[,1], MDS2 =        sol$points[,2],group=MyMeta$host)

plot.new()
ord<-ordiellipse(sol, MyMeta$host, display = "sites", 
             kind = "se", conf = 0.95, label = T)

df_ell <- data.frame()
for(g in levels(NMDS$group)){
  df_ell <- rbind(df_ell, cbind(as.data.frame(with(NMDS[NMDS$group==g,],
                                                   veganCovEllipse(ord[[g]]$cov,ord[[g]]$center,ord[[g]]$scale)))
                            ,group=g))
}

ggplot(data = NMDS, aes(MDS1, MDS2)) + geom_point(aes(color = group)) +
geom_path(data=df_ell, aes(x=NMDS1, y=NMDS2,colour=group), size=1, linetype=2)

第一种和第二种绘图方法之间有两个主要区别。 第一种方法是使用标准差且不缩放来计算椭圆路径。第二种方法是使用标准误差并缩放数据。因此,通过对ordiellipse功能 (kind='sd', not 'se'),并去除刻度(ord[[g]]$scale) 来自veganCovEllipse功能。我已将其包含在下面,以便您自己查看。

最终,这两个图都是正确的,这只是取决于你想展示什么。只要指定使用标准误差或偏差,都可以使用。至于是否扩展,这实际上取决于您的数据。此链接可能会有所帮助:理解 R 中的“scale”.

第一种方法:

sol <-metaMDS(comm_mat)
MyMeta=env

#originalresponse
NMDS = data.frame(MDS1 = sol$points[,1],     MDS2=sol$points[,2],group=MyMeta$host)
NMDS.mean=aggregate(NMDS[,1:2],list(group=NMDS$group),mean)

veganCovEllipse<-function (cov, center = c(0, 0), scale = 1, npoints = 100) 
{
  theta <- (0:npoints) * 2 * pi/npoints
  Circle <- cbind(cos(theta), sin(theta))
  t(center + scale * t(Circle %*% chol(cov)))
}

df_ell <- data.frame()
for(g in levels(NMDS$group)){
  df_ell <- rbind(df_ell, cbind(as.data.frame(with(NMDS[NMDS$group==g,],
                                                   veganCovEllipse(cov.wt(cbind(MDS1,MDS2),wt=rep(1/length(MDS1),length(MDS1)))$cov,center=c(mean(MDS1),mean(MDS2)))))
                                ,group=g))
}

ggplot(data = NMDS, aes(MDS1, MDS2)) + geom_point(aes(color = group)) +
  geom_path(data=df_ell, aes(x=MDS1, y=MDS2,colour=group), size=1, linetype=2)+
  annotate("text",x=NMDS.mean$MDS1,y=NMDS.mean$MDS2,label=NMDS.mean$group)

Gives:

plot1

第二种方法:

plot.new()

ord<-ordiellipse(sol, MyMeta$host, display = "sites", 
                 kind = "sd", conf = .95, label = T)

df_ell <- data.frame()
for(g in levels(NMDS$group)){
  df_ell <- rbind(df_ell, cbind(as.data.frame(with(NMDS[NMDS$group==g,],
            veganCovEllipse(ord[[g]]$cov,ord[[g]]$center)))
            ,group=g))
}

plot2<-ggplot(data = NMDS, aes(MDS1, MDS2)) + geom_point(aes(color = group)) +
  geom_path(data=df_ell, aes(x=NMDS1, y=NMDS2,colour=group), size=1, linetype=2)+
  annotate("text",x=NMDS.mean$MDS1,y=NMDS.mean$MDS2,label=NMDS.mean$group)

plot2

还给出:

plot2

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

后续:将 vegan 包中的 ordiellipse 函数绘制到 ggplot2 中创建的 NMDS 图上 的相关文章

  • 在 R 中将文本文件拆分为段落文件

    我正在尝试将一个巨大的 text 文件拆分为多个 text 文件 每个文件仅包含一个段落 让我举个例子 我需要这样的文字 这是第一段 这没有任何意义 因为这只是一个例子 这是第二段 和前一段一样毫无意义 另存为两个独立的 txt 文件 其中
  • R 中有没有快速替换列值的方法?

    假设我们有一个包含数值的数据框 如下所示 Temperature Height 32 157 31 159 33 139 我想更换Height价值观与pic 00001 pic 00002等等 最终结果是 Temperature Heigh
  • 有条件地将可选组替换为 gsub

    一位用户问我如何做到这一点如何使 ggplot 图例中的选定单词变为斜体 https stackoverflow com questions 76054997 how to italicize select words in a ggplo
  • 使用 ggplot_build 和 ggplot_gtable 后使用 ggsave 保存图形

    我正在通过更改 ggplot build 生成的数据来修改使用 ggplot 构建的图表 原因类似于包括 geom boxplot 中填充美学中使用的缺失因子水平的空间 https stackoverflow com questions 1
  • xml2 包 (R) 中的 xml_find_all 函数未找到相关节点

    我使用 R 中的 xml2 包来访问 xml 数据 发现它在不同的 xml documents 上表现不同 在这个宠物的例子中 library xml2 doc lt read xml
  • 如何处理重叠的因子水平? (例如,生成表格和图表时)

    我面临一个数据集的问题重叠因素水平 我想按因素级别生成时间线 条形图和统计数据 但是 我希望因子水平是模棱两可的 这意味着属于多个级别的观察结果应该在图中出现多次 这是我的数据结构的示例 head lt c ID YEAR BRAZIL G
  • 在R中绘制3x3方形网格

    我得到了一个数字列表 n 9 想将它们画在一个 3 3 的正方形网格中 每个网格填充相应的数字 我如何在 R 中执行此操作而不安装额外的软件包 例如情节 非常感谢 这里有一个ggplot解决方案比我预期的要难一点 Setup the dat
  • R Shiny - 修复了 Shiny 仪表板中的侧边栏和主标题

    我有一个简化的闪亮仪表板 请参阅下面的代码 我想修复侧边栏和主标题 因此 在其他帖子的帮助下 我编写了一个 CSS 文件来解决该问题 sidebar color FFF position fixed width 220px white sp
  • R markdown 引文标识符

    R markdown 允许使用 YAML 元数据部分中的参考书目元数据字段指定参考书目文件 例如 title Sample Document output html document bibliography bibliography bi
  • 如何更改 Quarto pptx 中的字体格式

    我正在 R 中使用 Quarto 创建 pptx 要更改我尝试更改的默认字体格式mainfont范围 但是当我渲染它时 最终的 pptx 文件具有默认字体 Calibri 这是我的文件 YAML 将 Quarto 文件渲染为 pptx 时如
  • 使 matplotlib 图形默认看起来像 R?

    Is there a way to make matplotlib behave identically to R or almost like R in terms of plotting defaults For example R t
  • R 中使用 randomForest 进行内存高效预测

    TL DR我想知道使用基于大型数据集 数百个特征 数十万行 构建的随机森林模型执行批量预测的内存有效方法 Details 我正在处理一个大型数据集 内存中超过 3GB 并且想要使用以下方法进行简单的二进制分类randomForest 由于我
  • 如何获得 R 帮助?

    R 包可能有哪些可用文档 例如我尝试理解sp包裹 此外help sp 还有哪些用于搜索帮助和文档的其他功能 获取有关您知道其名称的函数的帮助 Use http www inside r org r doc utils Question或者
  • 如何使用 tidyr 将向量中字符串中的每个字符分隔到一列中

    我想将向量中的每个字符串分成列 但我做不到 library tidyr library dplyr df lt data frame x c abe bas dds eer df gt separate x c A B C sep 1 我想
  • 如何在knitr中安装软件包?

    到目前为止 我一直在使用这段代码来加载 R 包并编写 R 文件 但我正在尝试使用knitr rm list ls all TRUE kpacks lt c ggplot2 install github devtools mapdata ne
  • 访问动态创建的 Shiny 模块的返回值

    我正在寻找构建一个闪亮的应用程序 它动态创建返回简单表单的模块 通过 callmodule 我有两个未解决的问题 希望得到一些指导 首先 当向用户提供多个表单 通过单击按钮 时 先前呈现的表单上的值将恢复为默认值 如何停止这种行为 以便值保
  • R 中的 huxtable 即使有选项也默认为科学记数法(scipen=999)

    我试图生成像样的桌子 并在过去的一周尝试了很多软件包 我的头在游泳 今天早上开始使用 package huxtable 并试图摆脱科学记数法 x lt mtcars 1 5 1 2 x mpg lt x mpg 10000000 get s
  • R Leaflet:添加多边形时传递 popupOptions。

    Within addPolygons 有一个popup参数就像addPopups 功能 区别 我认为 是当弹出窗口创建时addPolygons 可以单击多边形内的任意位置来触发弹出窗口 但是如果addPopups 被使用 单个lng and
  • linux下无法安装Cairo包

    我在本地下载该软件包并尝试安装它 但出现此错误 R CMD INSTALL l usr local lib64 R library Cairo 1 5 1 tar gz 我得到他的错误 checking for PNG support in
  • 使用 lpSolve 优化 R 团队名单

    我是 R 新手 有一个想要解决的特定幻想运动队优化问题 我见过其他帖子使用 lpSolve 来解决类似的问题 但我似乎无法理解代码 下面的示例数据表 每个球员都在一个球队中 扮演着特定的角色 有薪水 并且每场比赛都有平均得分 我需要的限制是

随机推荐

  • 系统V ABI的红区是如何实现的

    编译器如何确保红色区域不被破坏 是否存在空间过度分配的情况 是什么因素导致选择128字节作为红色区域的大小 编译器不会 它只是利用担保的RSP 以下的空间不会异步地被破坏 例如被信号处理程序破坏 进行函数调用当然会同步破坏它 事实上 在Li
  • 如何使用ggplot2的x轴日期注释?

    我在理解之间的区别时遇到问题geom segment and annotate segment 当涉及到带有日期的绘图时x axis 让我们从一些随机数据开始 library data table library lubridate lib
  • 如何垂直居中对齐未知高度的浮动元素?

    我有一个 水平 居中的外部 div 其中包含两个宽度未知的元素 div style width 100 margin 0 auto div div div div div 默认情况下 两个浮动都是顶部对齐的 并且具有变化 未知和不同的高度
  • 以编程方式在运行时获取摘要注释

    我正在寻找一种方法来以编程方式获取 ASP net 中方法的 Xml 注释的摘要部分 我查看了之前的相关帖子 但他们没有提供在网络环境中执行此操作的方法 我无法使用任何第三方应用程序 并且由于网络环境 Visual Studio 插件也没有
  • 当存在无效路径时如何使毕加索显示默认图像

    我在此处显示默认图像名称 R drawable avatar placeholder 时遇到一个问题 当来自Web服务的链接非空 但错误404时 意味着该链接路径上没有任何图像 如果我在下面运行此函数 则会显示字符串 路径不为空 但无法显示
  • Excel:获取单元格颜色

    1 如何使用 Excel 宏获取单元格的颜色 我无法让这个功能工作 Sub BGCol MRow As Integer MCol As Integer bgColor Cells MRow MCol Interior ColorIndex
  • C++:隐藏规则背后的基本原理

    背后的理由是什么隐藏规则 in C class A void f int class B public A void f double B f int is hidden 如果这是一个有意义的功能 我认为也应该可以隐藏函数而无需定义具有相同
  • 在循环期间在值之间优雅地插入空格而无需尾随空格

    有没有一种方法可以在循环期间在值之间优雅地插入空格 或者我想是任何字符或字符串 例如 我想执行以下操作 for int i 0 i lt 6 i System out print i 输出以下内容 0 1 2 3 4 5 但这段代码实际上在
  • 从 NSDateFormatterFullStyle 字符串中删除年份

    我搜索过这个问题 但没有找到结论性且优雅的解决方案 无论如何 是否可以更改 NSDateFormatterFullStyleyear 以抑制年份信息 我正在使用代码 NSString dateDescription NSDateFormat
  • 如何使用 C 在 MPI 中发送(MPI_Send)具有指针字段的嵌套结构

    我有一个结构 struct vertex double a double b struct polygon int numofVertex vertex v 如何使用 MPI Send 在 MPI 中发送此嵌套结构 问题是该结构包含指针字段
  • 从 Xamarin Forms 应用程序启动另一个 IOS 应用程序

    我正在尝试测试 MyApp CanOpen 中是否存在应用程序 如果是这样 我希望打开应用程序 否则我有一个 https 地址来打开 webview 我在开罐测试中得到了错误的回报 我相信我的代码是合理的 但我在 info plist 上不
  • 如何将 map.locate 与 Polymer 1.0 / leaflet-map 1.0 一起使用

    我对 Polymer 和 Leaflet 的 Web 组件都很陌生 我想要一个按钮来切换 Leaflet 给出的地理位置功能 在 Javascript HTML css 应用程序中使用 Leaflet 我知道如何做到这一点 但我无法使用 P
  • 10-08 10:23:40.433:E/MoreInfoHPW_ViewGroup(10127):父视图不是 TextView

    您好 不明白为什么我收到此错误 10 08 10 23 40 433 E MoreInfoHPW ViewGroup 10127 Parent view is not a TextView 任何帮助 将不胜感激 LayoutInflater
  • 为什么Guava的ImmutableList有这么多重载的of()方法?

    我只是在看番石榴ImmutableList我注意到of 方法被重载了12次 在我看来 他们所需要的只是 static
  • 通用静态类 - 在运行时检索对象类型

    我有一个类型的对象X 我可以 显然 在运行时检索它 var type myObject GetType 我有一个通用的静态类 public static class MyStaticClass
  • PHP 不使用 strlen() 的字符串长度

    刚刚浏览了最新版本的 PHP 编码标准 有一些东西引起了我的注意 编码标准 4 规定 在编写处理字符串的函数时 请务必记住 PHP 保存每个字符串的长度属性 并且不应该使用 strlen 计算它 我一直使用 strlen 也许只是晚了 但是
  • 如何用Python对大文件进行排序?

    我在 activestate com 上发现了一些很有前途的代码来对大文件进行排序 我试图在 Ubuntu 10 04 上的默认 Python 2 6 5 解释器上运行它 当我尝试在一个小测试文件上运行它时 我得到下面的错误跟踪 我在 ac
  • 由文本选择触发的工具提示

    我希望创建一个由选择文本 左键单击并拖动文本 触发的工具提示 最好通过创建一个 JQuery 插件 我的最终目标是当用户选择 突出显示一个句子 短语 段落时 它将触发工具提示 工具提示将包含社交共享按钮 允许用户将选择发布到他们的个人资料状
  • 甜蜜警报功能不显示消息

    我试图在将记录插入数据库后显示一条警报消息 并且正常的 js 警报工作正常 其代码是 echo echo exit 但是 当我使用 sweet Alert 函数而不是普通的 js 函数时 它不会显示
  • 后续:将 vegan 包中的 ordiellipse 函数绘制到 ggplot2 中创建的 NMDS 图上

    我正在尝试做一些类似于旧帖子的事情 绘图 原始帖子 在我的分析中 我感兴趣的是不同的哺乳动物宿主是否有不同的跳蚤群落 我链接到的原始帖子有两种不同的椭圆解决方案 我的问题是 当我运行第一个解决方案和通用解决方案时 我得到的图看起来截然不同