美文网首页
成分数据的ILR变换,用来矫正空转的细胞比例

成分数据的ILR变换,用来矫正空转的细胞比例

作者: 生信云笔记 | 来源:发表于2024-04-26 12:13 被阅读0次

      10x Visium空间转录组数据下游聚类时,可以分为两种策略:一是基于细胞类型相对比例聚类,二是基于基因表达值聚类。第二种与普通单细胞处理方法一致,第一种略有不同。

      10x Visium空间转录组数据的捕获基于spot,这就导致一个spot里面可能会包含多个细胞,分析时可以对数据反卷积获取spot内不同细胞类型的相对丰度。然后,基于细胞类型相对比例进行聚类,将spot分成不同的生态位。

      ILR (isometric log ratio)适用于composition数据的处理,变换可以消除组成数据中的“无偏性”问题,后续可以应用于常规的统计分析方法,如主成分分析(PCA)、聚类分析、回归分析等。

      spot的细胞类型丰度可以当成composition数据,聚类前先进行ILR处理以获取更好的结果。在PythonR里面都有不少现成的包可以用来转换,下面分别给出一个示例。

    Python实现ILR转换:

    import pandas as pd
    from composition_stats import ilr
    
    df
       ct1  ct2  ct3  ct4
    0  0.1  0.3  0.4  0.2
    1  0.2  0.5  0.1  0.2
    2  0.3  0.2  0.3  0.2
    
    pd.DataFrame(ilr(df.values))
              0         1         2
    0 -0.776836 -0.683398  0.117048
    1 -0.647915  0.940026  0.064416
    2  0.286707 -0.165530  0.234095
    

      可以看出ILR转换还带有一点降维的作用,变换的数据变量会减少一个维度。如ct1-4为四种细胞类型,列维度为4,变换后细胞类型维度变为3,细胞数不变。

    R实现ILR转换:

    library(compositions)
    
    df
      ct1 ct2 ct3 ct4
    1 0.1 0.3 0.4 0.2
    2 0.2 0.5 0.1 0.2
    3 0.3 0.2 0.3 0.2
    
    ilr(df)
               [,1]       [,2]        [,3]
    [1,]  0.7768362  0.6833980 -0.11704769
    [2,]  0.6479154 -0.9400264 -0.06441599
    [3,] -0.2867071  0.1655304 -0.23409539
    

      第一眼看到这个结果,心里一蒙,咋跟Python不一样,什么情况?仔细再看一眼,好像又没有问题。R的结果整体乘以-1就与Python的结果一致了,这种差别并不会影响后续的聚类。下面可以生成数据来验证一下。

    tmp <- seq(from=0, to=1, by=0.1)
    df <- data.frame(ct1=sample(tmp, size=6), ct2=sample(tmp, size=6), ct3=sample(tmp, size=6), 
                     ct4=sample(tmp, size=6), ct5=sample(tmp, size=6), ct6=sample(tmp, size=6))
    
    ilr1 <- as.matrix(ilr(df))
    rownames(ilr1) <- paste0('cell',1:6)
    ilr1
                [,1]        [,2]       [,3]        [,4]          [,5]
    cell1 -0.9802581  0.45692438 -1.3621133 -0.07245972  8.673617e-17
    cell2  0.1577863  0.09109797  0.4714511 -0.87475494 -1.346988e+00
    cell3 -0.6479154  0.28804762 -0.3053578 -0.07345574  4.063415e-01
    cell4 -0.4901291  0.61403703  0.3933885  0.60416743  1.126055e+00
    cell5  0.0000000 -0.66212175 -0.7173308  0.20220423  2.437939e-02
    cell6  0.1090010 -0.37139162 -0.2865855 -1.46192756  5.827060e-01
    
    hc1 <- hclust(dist(ilr1))
    plot(hc1)
    

    结果如下:

      将上面的ilr1乘以-1,然后聚类:

    ilr2 <- ilr1 * -1
    ilr2
                [,1]        [,2]       [,3]        [,4]          [,5]
    cell1  0.9802581 -0.45692438  1.3621133  0.07245972 -8.673617e-17
    cell2 -0.1577863 -0.09109797 -0.4714511  0.87475494  1.346988e+00
    cell3  0.6479154 -0.28804762  0.3053578  0.07345574 -4.063415e-01
    cell4  0.4901291 -0.61403703 -0.3933885 -0.60416743 -1.126055e+00
    cell5  0.0000000  0.66212175  0.7173308 -0.20220423 -2.437939e-02
    cell6 -0.1090010  0.37139162  0.2865855  1.46192756 -5.827060e-01
    
    hc2 <- hclust(dist(ilr2))
    plot(hc2)
    

    结果如下:

      可以看出聚类结果完全一致,这种矩阵间整体的线性关系不会影响数据中的相对关系,可以放心食用。由此,也可以看出PythonR内部在数据处理的实现过程中虽然存在差别,但殊途同归。

    相关文章

      网友评论

          本文标题:成分数据的ILR变换,用来矫正空转的细胞比例

          本文链接:https://www.haomeiwen.com/subject/bmcwxjtx.html