2

我想在 R 中执行三向主成分分析,尽管我找到了一些解释它如何工作以及如何解释结果的文章,但我在网上找不到任何有用的指南来说明如何在 R 中进行分析。

我的数据由 230 个样本、250,000 个变量和 50 个注释组成。通常人们只对以下类型的数据使用一个注释来做一个标准的 PCA:

标准数据:

        var1 var2 var3 var4
Sample1  1/1  0/0  1/1  1/0
Sample2  1/0  1/1  1/1  1/0
Sample3  0/0  1/1  1/1  1/1
Sample4  0/0  0/0  1/1  0/0
Sample5  1/0  1/0  0/0  1/1

但是,我想将所有注释信息实现到分析中,以便我将所有 50 个矩阵组合用于分析。以这种方式,注释的组合可以比单个注释单独解释更多样本之间的方差,例如注释1和4一起解释比单独注释1更多的方差。

注释1:

         var1 var2 var3 var4
Sample1  1/1  0/0  1/1  1/0
Sample2  1/0  1/1  1/1  1/0
Sample3  0/0  1/1  1/1  1/1
Sample4  0/0  0/0  1/1  0/0
Sample5  1/0  1/0  0/0  1/1

注释2:

         var1      var2      var3  var4
Sample1  missense  none      STOP  synonymous
Sample2  missense  missense  STOP  synonymous
Sample3  none      missense  STOP  synonymous
Sample4  none      none      STOP  none
Sample5  missense  missense  none  synonymous

注释3:

         var1  var2   var3  var4
Sample1  0.30   0.00  0.01  0.04
Sample2  0.30  -0.24  0.01  0.04
Sample3  0.00  -0.24  0.01  0.04
Sample4  0.00  -0.24  0.01  0.00
Sample5  0.30  -0.24  0.00  0.04

注释4:

         var1  var2  var3  var4
Sample1  CTCF  NONE  NONE  MAX
Sample2  CTCF  NONE  NONE  MAX
Sample3  NONE  NONE  NONE  MAX
Sample4  NONE  NONE  NONE  NONE
Sample5  CTCF  NONE  NONE  MAX

根据我的发现,可以执行 Tucker 3-way PCA 的三个软件包:ThreeWay、PTAk 和 rTensor。我曾尝试运行 ThreeWay,但他们使用的数据结构似乎很难使用。也许我可以做到这一点,但 ThreeWay 文章中的示例也产生了错误,所以我更喜欢另一个包:

三路数据结构:

         var1_anno1    var1_anno2    var1_anno3   var2_anno1    var2_anno2
Sample1  1/1           missense      0.30         0/0           missense
Sample2  1/0           missense      0.30         1/1           missense
Sample3  0/0           none          0.30         1/1           missense
Sample4  0/0           none          0.30         0/0           none
Sample5  1/0           missense      0.30         1/0           missense

PTAk 包需要:“一个 k 阶张量(作为一个数组),如果使用非身份度量 X 是一个列表,其中数据作为数组并满足一个度量列表”

我不清楚这意味着什么。我试图研究如何生成张量的张量包,但他们的示例非常复杂,因为他们对各种张量进行了大量的乘法运算,而不是解释如何从数据中创建张量的基础知识。

对于这种方法的弱点以及如何创建张量以及如何使用任何软件包分析它们,我将不胜感激。

谢谢

4

2 回答 2

0

我最终使用PTAk包来运行分析。

为了构建张量,我使用了两个包tensorabind

我通过从矩阵创建向量来构建张量(又名多路数组),然后在三个维度中重新定义其维度。然后使用该函数abind()将来自每个个体的数组合并到最终的 3 维张量中。

for (i in 1:length(list_of_sample_matrices)) {  

    # Converting matrix into single sample tensor
    single_sample_tensor <- array(as.vector(list_of_sample_matrices[i])), c(250000, 50, 1))
    
    # Creating all sample tensor
    if (i == 1) {
        all_sample_tensor <- single_sample_tensor
    }

    # Adding a single sample tensor at the time to the all sample tensor
    if (i > 1) {
        all_sample_tensor <- abind(all_sample_tensor, single_sample_tensor)
    }
}
于 2016-11-20T13:37:36.910 回答
0

对于所有函数PTAk(),FCAk()和(for or ) PCAn(),数据输入是一个更有可能从函数生成的数组。CANDPARA()CANDECOMPPARAFACarray()

准备读取的数据array(),您需要记住(例如 for matrix(),对于行和列)索引的顺序,第一个比下一个运行得更快,等等...

因此,使用as.vector()cbind()rbind()和所有其他数据操作可以准备要由 读取的数据array(),然后还可能使用abind()(package abind) 组合一些数组。

JSS论文中给出了一些例子

例如abind(x1,x2,x3,x4,...xp,along=3),从维度为 nx q 的一系列 p 矩阵 x1,x2,...,xp 创建一个 3 路数组 nxqxp 确实非常方便。

于 2021-01-07T13:12:39.637 回答