paml计算 KaKs值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了paml计算 KaKs值相关的知识,希望对你有一定的参考价值。

参考技术A PAML 可实现系统发育树的构建,祖先序列估计,进化模拟和 KaKs 计算等功能。其中分支及 位点 KaKs 的计算是本软件包的特色功能。

此次用到的是codeml

所需文件:

本次使用我最近的数据,来源于2个物种的同源基因对,具体如何得到基因对请挪步 python版的MCScan绘图 。

使用

上述脚本有疑问请挪步 Kaks_calculator计算ka/ks 值

上述得到一paml_result文件夹,每个同源基因对儿形成一个单独的以*.paml结尾的文件

可获得共有27个同源基因对

将所有*paml文件合并为paml的输入文件

关于树文件,可参考paml安装目录下*.trees格式

其中3表示,3个物种,4表示树的个数;

在本次我只有两个物种,所以得到如下树的输入文件

可将paml安装目录下baseml.ctl 拷贝到自己所需目录下即可进行修改

即可得到相应的Ka,Ks

用计算值替换缺失值

【中文标题】用计算值替换缺失值【英文标题】:Replace missing values with calculated values 【发布时间】:2018-08-10 02:15:55 【问题描述】:

我正在尝试学习如何用计算值替换一个变量中的缺失数据。

我的数据集 (bk3) 看起来像:

ign:  80, 96, 75, 66, 53

Mean: 26, 24, 27, 34, 41

sd:    6,  7, NA,  8,  4

lci:  24, 25, 20, 32, 38

uci:  29, 26, 29, 33, 43

输入:

bk3 <- structure(list(ign = c(80L, 96L, 75L, 66L, 53L), mean = c(26L, 24L, 
  27L, 34L, 41L), sd = c(6L, 7L, NA, 8L, 4L), lci = c(24L, 25L, 20L,
  32L, 38L), uci = c(29L, 26L, 29L, 33L, 43L)), .Names = c("ign",
  "mean", "sd", "lci", "uci"), class = "data.frame", row.names = c(NA, -5L))

基本上,我使用 95% 置信区间(ucilci)和样本 n(ign)来计算缺失的 SD(sd)。

我尝试使用的代码是:

bk3$sd[is.na(bk3$sd)] <- (bk3$uci - bk3$lci) * sqrt(bk3$ign)/3.92

但我收到以下警告消息:

“要替换的项目数不是替换长度的倍数”

更新:我正在尝试创建一个函数,如果提供了适当的变量,它将自动执行此操作。我尝试将其设置为以下格式:

fillsd <- function(x, n, u, l)
 
i1 <- is.na(x)
i2 <- n > 59
x[i1 & i2] <- with(df, (u[i1 & i2] - l[i1 & i2]) * (sqrt(n[i1 & 
i2])/3.92)) 

虽然函数“fillsd”似乎已正确保存在我的全局环境中,但当我尝试将它与以下代码一起使用时它不起作用:

fillsd(x="bk3$sd", n="bk3$ign", u="bk3$uci", l="bk3$lci")

该代码没有产生错误消息,但该函数似乎也没有做任何事情。这是我处理的第一个函数,我无法找到可比较的示例来知道代码的哪一部分是不正确的。如果您对如何完成这项工作有任何想法,请告诉我。谢谢!

【问题讨论】:

对不起,我是新手。这是使用 dput 的输出: structure(list(ign = c(80L, 96L, 75L, 66L, 53L), mean = c(26L, 24L, 27L, 34L, 41L), sd = c(6L, 7L, NA , 8L, 4L), lci = c(24L, 25L, 20L, 32L, 38L), uci = c(29L, 26L, 29L, 33L, 43L)), .Names = c("ign", "mean", "sd", "lci", "uci"), class= "data.frame", row.names = c(NA, -5L)) 没关系。我在下面发布了一个解决方案。你可以检查这是否是你想要的 您好 akrun,再次感谢您对我的问题的答复。我忘记了我只需要完成对 ign 值 >59 的计算,并且对于小于或等于 60 的 ign 值有一个单独的计算。我正在尝试复制 STATA 命令“如果 ign>59”。我一直在到处寻找模拟,但似乎找不到这么简单的。我尝试创建 ifelse 语句无济于事。你知道怎么做吗?再次感谢。 不完全清楚您的问题。也许i2 &lt;- bk3$ign &gt; 59 然后将其也用作索引,即with(bk3, (ici[i1 &amp; i2] - lci[i1 &amp; i2] * sort(ign[i1 &amp; i2])/3.92) 你能在你的帖子中更新它吗?从 cmets 不清楚 【参考方案1】:

如果我们replace'sd'的NA元素与其他列的计算值对应的元素,那么逻辑索引应该在赋值的两边。根据计算的性质,它给出的长度等于数据集的行数,而 lhs 只有较小的长度,因为我们只对具有 NA 元素的行进行子集化,这会导致长度不等,从而导致错误

i1 <- is.na(bk3$sd)
bk3$sd[i1] <- with(bk3, (uci[i1] - lci[i1]) * sqrt(ign[i1])/3.92)

但是,如果我们决定基于获取某些列的summean 来获取摘要,则它是一个单一的数字,并且随着值的获取,在 rhs 上没有逻辑索引是有意义的回收

数据

bk3 <- structure(list(ign = c(80, 96, 75, 66, 53), Mean = c(26, 24, 
27, 34, 41), sd = c(6, 7, NA, 8, 4), lci = c(24, 25, 20, 32, 
38), uci = c(29, 26, 29, 33, 43)), .Names = c("ign", "Mean", 
"sd", "lci", "uci"), row.names = c(NA, -5L), class = "data.frame")

【讨论】:

以上是关于paml计算 KaKs值的主要内容,如果未能解决你的问题,请参考以下文章

通过PAML中的CODEML模块计算dnds的过程以及踩坑

通过PAML中的CODEML模块计算dnds的过程以及踩坑

Ka/ Ks|同义替换的三种路径|kaks_Calculator|

Hyphy,不亚于Paml的选择压力分析的优秀软件,使用指北

当实际值没有改变时,防止计算与其他计算为依赖项重新计算

计算所有值并计算一些值