主成分分析,成分标签?

时间:2013-02-05 21:11:17

标签: 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    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 ....这是愚蠢的.... 如何将名称映射回基因名称? 我知道biplot(res)会在输出图上打印一些基因,但这显然不是获得基因名称的正确方法。

1 个答案:

答案 0 :(得分:4)

虽然大部分内容已在评论中说明,但我将其转化为答案。

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

您可以在加载矩阵中的特定组件的列中找到具有最大绝对值的基因。这样你就可以识别出每个组件的“主要贡献者”。但除非该贡献非常接近1,否则将该组分视为该基因的同义词最多会产生误导。如果您想根据个体基因进行分析,PCA不是正确的工具。

如果你确定你想要“主要贡献者”,尽管有上述警告,下面的代码就是这样做的:

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