Solved! | 為什么我 Ka/Ks 計算出來的總是 NaN?

寫在前面

很久以前,參考NG86計算邏輯提出的文章,我在TBtools中寫了Simple Ka/Ks Calculator,旨在理解算法,具體可見 《批量計算dn/ds,粗略篩選正選擇?所有人-技能Get !》。近期,不時有人在 TBtools 群提出,TBtools 的 Simple Ka/Ks Calculator 計算出來的有一堆 NaN。Emmm,這是一個比較有趣的事情。有趣之處有二:

  1. TBtools中幾乎每一個功能,我都會在從頭實現(xiàn)算法之后,拿一些軟件的運行結(jié)果進行比較。針對 Ka/Ks 的計算,我拿了 DNAsp 和 KaKs_Calculator2 的結(jié)果與TBtools的結(jié)果進行比較,無出入。
  2. 曾經(jīng)有人提出 TBtools 的計算存在問題,經(jīng)過一堆比較,TBtools的結(jié)果反而是對的。具體可見推文《Ks值用TBtools計算不出來?講一個故事》。

但是今天的情況有所不同。一般十來個基因?qū)Γ敲从袃扇齻€NaN可以理解。如果全部都是 NaN,那就要引起重視。如


不是用戶使用問題

我要來數(shù)據(jù),隨后自己使用 TBtools 最新版本進行計算,結(jié)果與該用戶的結(jié)果一致。



說明不是用戶使用問題。

不是 TBtools 實現(xiàn)邏輯問題

既然如何,那么就有可能是 TBtools 的算法實現(xiàn)邏輯問題。為此,我直接讓 TBtools 輸出 AXT 格式的比對結(jié)果。隨后使用 章張老師 的 KaKs_Calculator 計算,結(jié)果如下。



換句話說,至少在 Ka/Ks 的計算上,TBtools 完全沒問題。

那么還存在一個可能,是不是 Codon Alignment 出現(xiàn)了問題?于是我拿了一個基因?qū)?,使?Mega 進行 Codon Alignment,隨后導(dǎo)出結(jié)果。再使用 KaKs_Calculator 進行結(jié)算,



結(jié)果與前述一致。


序列距離(差異)太大,導(dǎo)致計算出錯

回到 TBtools 計算源碼,在 Java 的數(shù)值計算中,除非是NaN參與運算,才會得到 NaN。那是咋回事?
重新過了一遍,發(fā)現(xiàn)問題應(yīng)該是在 JC69 模型應(yīng)用上。



當(dāng) pS 大于等于 3/4 的時候,計算結(jié)果就會得到負(fù)值。換成生物學(xué)角度,那就是...絕大部分可發(fā)生同義突變位點都發(fā)生了同義突變,亦即,序列分歧度太大,進化距離很遠。
為此.... 我繼續(xù)對 TBtools 做個改進,當(dāng)計算出來的 pS>=3/4,補充一個信息,說明原因...那就不會有用戶問我了。

寫在后面

Emmm,有時候我覺得,之所以總是有用戶提出問題,是因為大家能直接接觸到我。畢竟為什么同樣的問題,似乎沒有人會去問其他軟件開發(fā)的人呢?還是因為我不知道?
或者說,我太貼心了?哈哈哈哈哈哈哈啊哈哈哈啊哈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容