如何在R中执行三向PCA [英] How to perform a three-way PCA in R
本文介绍了如何在R中执行三向PCA的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在R中执行三向主成分分析,虽然我找到了几篇解释它的工作原理和如何解释结果的文章,但我在网上找不到任何关于如何在R中执行此操作的有用指南。
我的数据由230个样本、250,000个变量和50个注释组成。通常,人们只对以下类型的数据只使用一个注释进行标准的主成分分析:
标准数据:
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:Three Way、Ptak和rT。我曾尝试运行Three-Way,但他们使用的数据结构似乎非常难看。也许我可以做到这一点,但Three Way文章中的示例也生成了一个错误,所以我更喜欢另一个包:
三向数据结构:
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是以数据为数组并满足度量列表的列表"
我不清楚这意味着什么。我试图研究如何生成张量的张量包,但他们的例子非常复杂,因为他们对各种张量进行了大量的乘法,而不是解释如何从数据中创建张量的基本知识。
对于这种方法的缺点和如何创建张量,以及如何使用任何软件包分析张量,我都会非常感激。
谢谢
推荐答案
我最终使用了ptak包来运行分析。
为了构建张量,我使用了两个程序包tensor和abind。
我通过从矩阵创建一个向量,然后重新定义其三维维度来构建张量(也称为多向数组)。然后使用函数abind()
将每个个体的数组合并到最终的三维张量中。
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)
}
}
这篇关于如何在R中执行三向PCA的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文