如何在 R 中执行三向 PCA
How to perform a three-way PCA in R
我想在 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 包需要:
"a tensor (as an array) of order k, if non-identity metrics are used X is a list with data as the array and met a list of metrics"
我不清楚这是什么意思。我试图研究如何生成张量的张量包,但他们的示例非常复杂,因为他们对各种张量进行大量乘法运算,而不是解释如何创建张量形式数据的基础知识。
对于有关此方法的弱点以及如何创建张量以及如何使用任何包分析它们的评论,我将不胜感激。
谢谢
我最终使用 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)
}
}
对于所有函数 PTAk()
、FCAk()
、PCAn()
和 CANDPARA()
(对于 CANDECOMP
或 PARAFAC
),数据输入是一个更有可能从函数 array()
.
生成数组
准备由 array()
读取的数据,您需要记住(对于 matrix()
,对于行和列)索引顺序第一个 运行 比第二个快接下来等等...
因此,使用as.vector()
、cbind()
、rbind()
和所有其他数据操作可以准备要由array()
读取的数据,然后可能还使用abind()
(package abind) 组合一些数组。
中给出了一些示例
例如abind(x1,x2,x3,x4,...xp,along=3)
从维度为 n x q 的一系列 p 矩阵 x1,x2, ... ,xp 创建三向数组 n x q x p 确实非常方便。
我想在 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 包需要: "a tensor (as an array) of order k, if non-identity metrics are used X is a list with data as the array and met a list of metrics"
我不清楚这是什么意思。我试图研究如何生成张量的张量包,但他们的示例非常复杂,因为他们对各种张量进行大量乘法运算,而不是解释如何创建张量形式数据的基础知识。
对于有关此方法的弱点以及如何创建张量以及如何使用任何包分析它们的评论,我将不胜感激。
谢谢
我最终使用 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)
}
}
对于所有函数 PTAk()
、FCAk()
、PCAn()
和 CANDPARA()
(对于 CANDECOMP
或 PARAFAC
),数据输入是一个更有可能从函数 array()
.
准备由 array()
读取的数据,您需要记住(对于 matrix()
,对于行和列)索引顺序第一个 运行 比第二个快接下来等等...
因此,使用as.vector()
、cbind()
、rbind()
和所有其他数据操作可以准备要由array()
读取的数据,然后可能还使用abind()
(package abind) 组合一些数组。
例如abind(x1,x2,x3,x4,...xp,along=3)
从维度为 n x q 的一系列 p 矩阵 x1,x2, ... ,xp 创建三向数组 n x q x p 确实非常方便。