繁体   English   中英

主成分分析,成分标签?

[英]principal component analysis, label of component?

我有一个数据框,其中有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)将在输出图上打印一些基因,但这显然不是获取基因名称的正确方法。

尽管大多数内容已在评论中说明,但我正在将其转化为答案。

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

您可以在上样矩阵的列中找到具有最大绝对值的基因。 这样,您就可以确定每个组件的“主要贡献者”。 但是除非这种贡献非常接近,否则将其作为基因的代名词充其量只会产生误导。 如果要根据单个基因进行分析,则PCA并不是正确的工具。

如果您确定尽管有上述警告,但仍希望“主要贡献者”,则可以使用以下代码进行操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM