用向量做Mantel的几个问题
时间:2022-07-25
本文章向大家介绍用向量做Mantel的几个问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这几天有读者问我mental计算的几个问题,在此记录一下。
- mantel test一般用距离矩阵来计算,vegan的mantel输入只能是距离矩阵。如果想用向量做mantel ,可以用ecodist包做,输入数据可以是向量的形式。
- ecodist针对r<=0,r=0,r>=0分别输出了3个P值,不确定用哪个。我测试了一下发现r<=0时对应的P值和vegan中mantel结果的P值是一致的。因此可以用r<=0对应的P值,这也可以反推出vegan中mantel的原假设也是r<=0。 这一点在介绍ecodist的文章中已经添加: R——ecodist&MRM methods
- 后来他又发现数据为435行时可以出结果,而当数据为704行的时候会报错: Error in mantel(A ~ B) : Matrix not square.
我测试了一下果然如此。把435随机换成其他几个数也会报错。 这时候开始有点意思了。难道435这个数存在什么特别之处么。 函数说明中没有提到这个报错,我在网上搜了一下也没有找到答案。
那就简单粗暴看函数源代码: https://github.com/cran/ecodist/blob/master/R/mantel.R
其中有这么几句:
1 m <- as.matrix(m)
2 n <- (1 + sqrt(1 + 8 * nrow(m)))/2
3 if (abs(n - round(n)) > 1e-07)
4 stop("Matrix not square.n")
m为输入数据,通过一个公式得到n,将n和其整数部分进行比较,如果不相等则会报这个错。 接下来测试当输入的数据是多少行的时候不会报错:
1 s = c()
2 for (i in 1:1000){
3 n <- (1 + sqrt(1 + 8 * i))/2
4 if (n - round(n) == 0 ){s = c(s,i)}
5 }
6s
7[1] 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190
8[20] 210 231 253 276 300 325 351 378 406 435 465 496 528 561 595 630 666 703 741
9[39] 780 820 861 903 946 990
1000行以内只有44种情况不会报错,其中就有435。 结合这个结果和报错信息,我才突然发现原来输入数据的行数(1,3,6,10…)必须满足可以被转化为对称矩阵中上(或下)三角的形式才会计算结果。如435正好填满29*29的上(下)三角矩阵。其他数字得到的不是对称矩阵,因此会报错:Matrix not square。
所以ecodist用向量计算mantel还是有隐含的前提条件的。
如果数据不方便先转化为矩阵,那只能取特定的行数输入才能算mantel。
点分享
点点赞
点在看
一个环境工程专业却做生信分析的深井冰博士,深受拖延症的困扰。想给自己一点压力,争取能够不定期分享学到的生信小技能,亦或看文献过程中的一些笔记与小收获,记录生活中的杂七杂八。
目前能力有限,尚不能创造知识,只是知识的搬运工。
- 微信小程序左右滑动切换图片酷炫效果(附效果)
- Facebook推出用于android数据加密的开源API
- Android 表单验证框架:AValidations
- 推荐系统介绍
- Android WebView 上传文件支持全解析
- 网站管理软件 – AspxSpy2014 Final
- 特性分支与特性开关哪家强?
- Android快速开发框架 roboguice
- 悄悄的干活,打枪的不要!勒索+比特币挖矿木马
- 拥有可移动头像的折叠Android工具栏:CollapsingAvatarToolbar
- Android平台下的第一个Tor木马
- 利用代码实现自定义圆角+阴影按钮 android-flat-button
- 周末阅读:程序员的《权利法案》
- 对利用Adobe 0day – CVE-2014-0502进行攻击的行为分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Redis常用命令详解
- three.js 制作逻辑转体游戏(下)
- ROS机器人TF基础(坐标相关概念和实践)
- (在模仿中精进数据可视化01) 全国38城居住自由指数可视化
- js字符串/数组常用方法总结
- ThinkPHP5+mpdf 实现富文本生成 PDF文件
- nodejs使用readline逐行读取和写入文件
- go语言逐行读取和写入文件
- SpringBoot中Tomcat是如何启动的
- 自定义注解详解及应用
- 微服务开源框架TARS 之 框架服务解析
- dotnet 在 UOS 国产系统上使用 Xamarin Forms 创建 xaml 界面的 GTK 应用
- K8s集群上使用Helm部署2.4.6版本Rancher集群
- VMware下安装CentOS
- leetcode多线程之按序打印