R 主成分分析,成分标签?

R 主成分分析,成分标签?,r,pca,R,Pca,我有一个数据框架,一个基因每列17列,一个患者每行34行 Patient EXO1 MLH1 MSH2 MSH3 MSH6 PCNA PMS1 PMS2 POLE POLE2 POLE3 POLH RFC2 1651109 0 0 1 1 1 1 1 1 1 0 1 0 0 1651648 0 1 1 1 1 0 1 0 1 0 0

我有一个数据框架,一个基因每列17列,一个患者每行34行

Patient EXO1 MLH1 MSH2 MSH3 MSH6 PCNA PMS1 PMS2 POLE POLE2 POLE3 POLH RFC2 
1651109    0    0    1    1    1    1    1    1    1     0     1    0    0      
1651648    0    1    1    1    1    0    1    0    1     0     0    1    1  
........
数据帧的名称是testdb。 然后我就跑

res=princomp(testdb);  
summary(res);
这说明

Importance of components:  
                          Comp.1    Comp.2    Comp.3     Comp.4     Comp.5  
Standard deviation     0.6577676 0.4757815 0.4138278 0.39002636 0.37679135  
Proportion of Variance 0.2822533 0.1476757 0.1117206 0.09923892 0.09261812  
Cumulative Proportion  0.2822533 0.4299290 0.5416497 0.64088859 0.73350672  
....
名字是comp.1 comp.2 comp.3是愚蠢的。。。。 如何将名称映射回基因名称? 我知道biplotres会在输出图上打印一些基因,但这显然不是获得基因名称的正确方法。

虽然大部分内容已经在评论中陈述过,但我将其转化为一个答案

主成分分析的成分是原始变量的线性组合。因此,在成分和基因之间没有一对一的映射。除特殊情况外,每个成分都描述了多个基因。其中一些是积极的,一些是消极的。有些具有较大的绝对值,有些具有较小的绝对值。您可以从加载矩阵中看到这些贡献:输入LoadingRes,您将看到每个组件的组成

您可以在载荷矩阵的特定组件列中找到绝对值最大的基因。这样,您就可以确定每个组件的“主要贡献者”之类的内容。但除非这一贡献非常接近,否则将该成分视为该基因的同义词充其量只是误导。如果你想从单个基因的角度进行分析,PCA不是正确的工具

尽管有上述警告,如果您确实希望使用“主要参与者”,则以下代码将执行此操作:

l <- loadings(res)
rownames(l)[apply(l, 2, function(x) which.max(abs(x)))]
虽然大部分的评论都已经提到了,但我将把它变成一个答案

主成分分析的成分是原始变量的线性组合。因此,在成分和基因之间没有一对一的映射。除特殊情况外,每个成分都描述了多个基因。其中一些是积极的,一些是消极的。有些具有较大的绝对值,有些具有较小的绝对值。您可以从加载矩阵中看到这些贡献:输入LoadingRes,您将看到每个组件的组成

您可以在载荷矩阵的特定组件列中找到绝对值最大的基因。这样,您就可以确定每个组件的“主要贡献者”之类的内容。但除非这一贡献非常接近,否则将该成分视为该基因的同义词充其量只是误导。如果你想从单个基因的角度进行分析,PCA不是正确的工具

尽管有上述警告,如果您确实希望使用“主要参与者”,则以下代码将执行此操作:

l <- loadings(res)
rownames(l)[apply(l, 2, function(x) which.max(abs(x)))]

主成分是所有变量的组合,将它们映射回原始变量没有意义。你期望从PCA分析中得到什么?不是。PCA应该让我知道哪些变量是主要的影响因素。如果不是,我不知道PCA为什么会被发明。向后/向前变量选择足以告诉主要贡献者,但受进入模型的变量顺序的影响。PCA对顺序不敏感。@user1143669 PCA让您知道哪些变量是数据中最大差异的主要因素。沿着这些方差的正交向量是主分量。变量对每个PC的贡献由加载矩阵表示?装载量@马吕斯是绝对正确的:除非你的加载矩阵不是一个单位矩阵,否则将特定变量映射回某些PC根本没有意义。顺便说一句:看起来你的变量不是正态分布的,而是二进制性质的。您应该重新考虑PCA是否适合您的数据。二元判别分析可能更合适。主成分是所有变量的组合,把它们映射回原始变量是没有意义的。你期望从PCA分析中得到什么?不是。PCA应该让我知道哪些变量是主要的影响因素。如果不是,我不知道PCA为什么会被发明。向后/向前变量选择足以告诉主要贡献者,但受进入模型的变量顺序的影响。PCA对顺序不敏感。@user1143669 PCA让您知道哪些变量是数据中最大差异的主要因素。沿着这些方差的正交向量是主分量。变量对每个PC的贡献由加载矩阵表示?装载量@马吕斯是绝对正确的:除非你的加载矩阵不是一个单位矩阵,否则将特定变量映射回某些PC根本没有意义。顺便说一句:看起来你的变量不是正态分布的,而是二进制性质的。您应该重新考虑PCA是否适合您的数据。二元判别分析可能是m
更合适。是一个很好的入门读物。如果是这样,R的双批次如何为加载向量生成标签?它能做到上述吗?例如,在这里,以下标签来自哪里@汤米:afaics双标将简单地投影矢量。即,取加载矩阵中的前两列,并使用相应的两个元素行向量作为向量与行标签关联。@MvG对不起,您能澄清一下吗?标签从何而来?如果是这样,R的双批次如何为加载向量生成标签?它能做到上述吗?例如,在这里,以下标签来自哪里@汤米:afaics双标将简单地投影矢量。即,取加载矩阵中的前两列,并使用相应的两个元素行向量作为向量与行标签关联。@MvG对不起,您能澄清一下吗?标签来自哪里?