gatsby2016 / coding4bioinfo

coding test for bioinfo.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

coding4bioinfo

coding test for bioinfo, bioinfomatics.

ARI (est_k) Yan Biase Goolam Deng1 (FIXED) Deng2 (FIXED) Klein Baron
Rcode 0.6584(6) 0.9871(5) 0.5973(6) 0.4268(8) 0.4439(9) 0.7876(9) 0.6178(12) 0.2977(37)
Python(base) 0.6584(6) 0.9871(5) 0.5973(6) 0.3625(9) 0.3827(9) 0.6648(9) 0.7291(12) 0.3276(37)
+ normdists 0.6584(6) 0.9871(5) 0.5973(6) 0.3647(9) 0.6557(9) 0.6870(12) -
- laplacian 0.7212(6) 0.9839(5) 0.5973(6) 0.4333(9) 0.7745(9) 0.8224(12) 0.4179(37)
- laplacian pca->decom 0.6584(6) 0.9839(5) 0.5973(6) 0.4642(9) 0.8176(9) 0.5312(12) -
- laplacian + normdists 0.6584(6) 0.9394(5) 0.5860(6) 0.4504(9) 0.7975(9) 0.6141(12) 0.2983(37)
- laplacian + JS dist 0.7080(6) 0.9839(5) 0.5973(6) 0.3023(9) 0.5858(9) 0.8070(12) -
- laplacian + UMAP* 0.7902(6) 0.8302(5) 0.5927(6) 0.3606(9) 0.6616(9) 0.5548(12) -
- laplacian - spearman 0.7212(6) 0.9839(5) 0.5973(6) 0.4440(9) 0.7888(9) 0.8247(12) 0.3757(37)
- laplacian - spearman +rbf 0.7212(6) 0.9871(5) 0.5927(6) 0.4721(9) 0.8366(9) 0.8167(12) 0.4228(37)
-laplacian -spearman +linear 0.7212(6) 0.9807(5) 0.5973(6) 0.4343(9) 0.7722(9) 0.8372(12) 0.4208(37)
-laplacian -spearman +rbf pca>decom (similarity) - - - - 0.6870(9) 0.3402(12) -

Update

  • 3.30 完成阶段性报告输出;更新部分数据集cluster图和rbf的h5ad文件;Baron和klein文件太大未上传.

  • 3.29 针对PCoA和kPCA的等价推导,有以下疑问:

    • 能否对输出的dist matrix直接应用PCoA?
    • 能否直接对dist matrix做特征分解?此时相当于把dist matrix当成kernel matrix
    • 能否修改dist matrix,即,改变不同的kernel function得到不同的kernel matrix?有方案:RBFkernel 或JS散度 或Jaccard系数度量
    • 接第一条PCoA(MDS),思考降维能否采用embedding的方式实现?即,IsoMap, LLE, spectral embedding, tSNE or UMAP?在以上输入dissimilarity matrix的情况下,仅spectral embedding, tSNE or UMAP可用。
    • LLE延伸:laplacian eigenmap,取最小的d个非零特征值对应的特征向量;进而延申为,谱聚类spectral cluster方法。 继续延申,距离度量,是否可以采用k个最近点的方式?
  • 3.28

    • 主要完成workflow与PCoA及KPCA的关联推导证明
    • 基于推导结果验证修改距离度量为RBF kernel计算,并直接进行特征分解,结果较差,待更新
  • 3.27

    • 完成Rcode中Baron数据svm mixed model实验验证对比;
    • 验证dist calculation中remove spearman dist的结果;【分析:spearman相关系数对分量排序离散化,可以理解为筛选当前cell的marker gene 同时确定pairwise的cell是否也具有同样趋势;】
    • 距离度量部分:是否需要修改现有euclidean距离度量为标准化euclidean距离,以消除不同维度分量量纲影响;【分析:修改现有euclidean为标准化没有意义,因为对于某个样本来说,某个gene可能的确是marker gene,进而导致在该样本下gene expression value higher but lower in other cells. 同时其他gene的expression lower。】
    • 把kmeans结果之后CSPA之前的multi-res直接ARI分析。【发现:laplacian采用后k个特征值对应的特征向量作为降维进行kmeans结果ARI和pca降维kmeans结果相似;而采用前k个特征值对应的特征向量的kmeans后几乎都预测为一类,导致ARI很低!所以,尝试将laplacian降维关闭!结果见表!】
    • 距离度量添加JS散度距离;结果有下降,耗时巨大;
    • 降维部分增加基于优化的非线性降维UMAP算法;优化学习由于收敛问题引入了不确定性;
    • 距离度量后,Pearson和spearman距离范围都是[0,2],但是欧式距离没有上限;已进行归一化。欧式距离先对样本单位化再归一化。结果没有提升;
    • 推导原方案与kernelPCA的关联;
  • 3.26

    • 新增支持Klein数据;
    • python脚本优化计算spearman和pearson距离效率;
    • 将Rcode结果送入到k_cluster_matrix中进行后续操作,结果和Rcode完全一致;证实整个python workflow仅在kmeans聚类有差异;
    • run baron数据集,目前整个runtime控制在1h以内(57min);排查结果差的原因:estimate k cluster (37) > true cluster (14),手动指定k值为14 ARI为0.56
    • 重构SC3脚本,剥离SC3类文件与main文件;增加对数据变量adata结构的h5ad格式保存与载入,保存位置为SC3/Results
  • 3.25

    • 修复Baron数据上获取n_dim时的dtype错误;
    • 修复gene_filter操作与R不一致问题;原有方式基于count进行filter,然后应用在logcount上,已对齐;
    • 继续验证Rcode与Python不一致问题;已确定是kmeans算法问题;Rcode使用Hartigan-Wong算法ref or here;Python使用Elkan algorithm with random(or kmeans++);两者样本迭代过程有差异。排查确定方式
  • 3.24

    • 新增支持Deng数据集;已完成结果比对,但结果和文章不一致,待排查
    • 排查与文章不一致结论:数据网站上写的deng数据是22431 features and 268 samples;但是下载下来按照其bash脚本处理后,22958 features and 267 samples
    • 排查Rcode和python不一致结论:Rcode经过了一次duplicated后特征维度降为7861维。原因:缺失feature_symbol信息。
    • 问题已修复!!! 数据网站给的deng.sh生成gene_name.txt时1这里少加了域号$导致txt为空没有维度信息进而导致一系列错误。 现已和22431 features and 268 samples数据对齐。
    • 修复Goolam数据上的稍微差异问题 On CPM calculation
    • 调整kmeans聚类 Number of time the k-means algorithm will be run with different centroid seeds
    • 排查确定kmeans随机初始化影响较大;已对齐kmeans输入的情况下,经过kmeans聚类结果不管是python内部还是python与Rcode都有较大不同;目前暂无法解决该问题。具体地:deng数据上
      • 在python内部,kmeans的init参数指定random与默认会导致ARI 0.6648与0.5553的差别;其中,指定random主要为了对齐Rcode;
      • python与Rcode之间,同样random centroids from row of data的情况下,会存在0.5553与0.7876的差异。
  • 3.23 新增Goolam数据集及data process R脚本,修复create_sce脚本calculateCPM传参问题;同步更新SC3的R和python脚本支持Goolam数据;目前已完成结果比对,见表。

    • understanding PCoA PCoA主坐标分析; principal_coordinates_analysis; group discussion; PCoA and NMDS;
    • 聚类算法中不同相似度相异度矩阵计算
    • 重新理解SC3设计流程。第一步特征选择filter;第二步计算distance matrix;此时用到了euclidean and pearson and spearman;三种度量,一种距离,两种相似性系数,而euclidean和pearson都是基于连续量计算,spearman则对变量进行rank,也就变成了顺序的、离散量计算;第二步完成后得到的其实是dissimilarity matrix;然后第三步,对dissimilarity matrix应用PCA和graph laplacian进行降维,说是PCA,但其实又不是PCA,第一输入不是data matrix而是dissimilarity matrix,第二不是用前K个主成分变换,而是取得前K个主成分;而取前K个最大特征值对应特征向量的操作和PCoA很像,而且PCoA也应用在dissimilarity matrix。PCoA analysis is also called metric multi-dimensional scaling。第四步,对降维(或者说变换)后的数据进行多重kmeans聚类,并进行Similarity matrix融合,最后进行层次聚类获得final result。
  • 3.22 1. 新增支持R code based SC3 workflow定量结果输出,直接run脚本即可。实现Rcode和python的横向比对。2. 增加层次聚类后一致性矩阵图绘制。

  • 3.21 新增支持基于SVM-mixed hybrid model 并且重构SC3类

    • hybrid model 50 cluster+40 svmYan:{'6': 0.6913063345361797} 耗时也有近半下降
    • hybrid model 40 cluster+ remained svm{'5': 0.9871491842026757}效果未改善
  • 3.20 完成SC3 basic framework (only cluster without SVM training) python版本开发。数据处理,三个距离矩阵计算,两个降维算法实现并且都已经和Rcode一致对齐。后续的kmeans聚类,转换相似矩阵,层次聚类等方法输出结果未和Rcode比较,仅观察最终输出ARI定量结果(下方),目前应该没有问题。该版本已经在biase和yan数据上跑通。

  • 3.19

  • 3.18 学习R的基本知识 SC3分析博客 尝试基于SC3demo跑通实验流程,多次遇到因为内存和CPU挂掉的问题,目前该SC3.R代码已经可以正常走通。但仅在20000*90的scRNAseq数据上。大数据量上该咋办?耗时也较长。

  • 3.17 安装R环境 VScode配置R

  • 3.17 回顾PCA原理,考虑task4的可能的改进方案:关于距离度量和降维。是否可以在降维这里用上autoencoder?

  • 3.16 通读SC3文章,理解所解决的问题:scRNAseq的cell cluster问题。SC3算法更像是一套cluster workflow not algorithm,总结而言:特征选择(基因过滤)、距离矩阵计算(三种距离形式)、矩阵变换(PCA和laplacian)、kmeans for multi combination、consensus cluster and hierarchical cluster. workflow又有一些扩展:当样本量过大时,即cell num>5000,此时先采样5000样本用workflow进行unsupervised cluster,然后得到伪标签用SVM进行supervised learning提高speed. 目前原理理解下来,整个思路比较清晰。

  • 3.16 继续理解ZINB分布,以及相应的NB分布,zero-inflation模型,NB分布的两种起源形式(一种基于概率分布的定义,另一种基于泊松分布+gamma分布的推导)和ZINB的两种参数化形式。

  • 3.15 通读DCA文章,理解所解决的问题:scRNAseq的denoise和imputation。通过autoencoder,既可以做到dimension reduction又可以做到imputation;深度理解DCA的算法原理,思路比较清晰;暂对ZINB分布模型有一定疑惑。


DCA 关于ZINB分布


SC3 距离度量降维与聚类


INSTALL (to be updated)


TBD

  • python hybrid model with SVM training support
  • R code ARI quantitative metric completely compared to Python's
  • python plots func support for visualization, such as sc3_plot_consensus and sc3_plot_expression
  • spearman distance slow calculation [尝试自己实现python版本和c++版,随着维度上升,效率十分慢于pandas;已优化,替换pandas计算为scipy.stats.spearmanr]
  • more datasets support [add deng, goolam, klein and baron dataset, others cannot downloaded from hemberg-lab site]
  • dist mearsurement and dims reduction support
  • further analysis implementation on the cluster results

工程优化考虑

  • 特征选择 [特征选择策略]
  • 距离度量 []
  • 特征分解进行降维 []
  • kmeans聚类 []
  • CSPA combination [assign weights]
  • 层次聚类

About

coding test for bioinfo.


Languages

Language:R 74.8%Language:Python 18.2%Language:C++ 4.2%Language:Shell 2.7%