如何在R中进行降维
让我们假设 mat_pages[] 包含列中的页面(您想要集群)和行中的个人。您可以使用以下命令根据 Rby 中的单个数据对页面进行聚类:
pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)
载荷矩阵是数据的 SVD 分解的特征向量矩阵。它们在分数计算中给出了每个 PAGE 的相对权重。绝对值越大的载荷对确定相应主成分的得分影响越大。
但是,我还应该指出使用 PCA 来集群页面的缺点。这样做的原因是负载赋予具有更高变异性的 PAGES 更大的权重,无论这种变异实际上是由于 PAGE 内容还是其他原因(可能是技术或个人变异)。负载不一定反映组之间的真正差异,这(也许)是您的主要兴趣。但是,在所有页面具有相同方差的假设下,这种聚类确实反映了组中的差异(我不知道这是否是一个有效的假设)。
如果您拥有强大的计算设施(考虑到您的数据大小,这可能是可能的) - 使用分层模型可能是一个好主意。在 R 中,可以使用 lme4 包来完成。
拿到成绩后怎么办?
这是一个粗略的建议,分析很大程度上取决于数据的样子。另外,我猜想这个过程对你拥有的大量数据进行分组是非常不可行的。
pc.col <- paste("page", 1:27000, sep=".")
pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()
希望这可以让您了解数据是如何分组的。
警告:这不是我推荐的。
我的建议:
此类问题在基因组学中经常出现。在您的案例中,页面对应于基因,个体对应于患者(基本上个体与基因组学中的含义相同)
您希望根据数据对页面进行聚类。
您可以在 R 中使用很多集群包,并在其他答案中指出。包的一个基本问题就像 hclust 是如何确定集群的数量。我最喜欢的几个是:
- pvclust(为您提供集群并为每个集群提供一个 p 值。使用 p 值您可以确定具有统计意义的集群。问题:需要大量计算能力,我不确定它是否适用于您的数据尺寸)
- hopach(为您提供估计的集群数量和集群)
- Bioconductor 中还有其他可用的软件包,请在任务视图中查看它们。
您还可以使用 k-means 等聚类算法。我相信我在这个论坛上看到了一个关于聚类的帖子。答案非常详细。Tal Galili 问我是否记错了。
降维基本上是将聚类算法应用于属性(列)。由于数据集的维度相当大,您可能会尝试使用 SOM(自组织地图/Kohonen 网络)为个人或页面创建地图。然后,您可以查看这些模式是否有意义(可解释)。
如果您进行 PCA,我的建议是简要筛选除前两个之外的其他组件。获得prcomp
对象pc
后(请参阅 suncoolsu 的帖子),您可以plot(pc)
查看归因于不同主成分的方差量。您还可以使用pairs(pc$x[,1:3])
或 、lattice
轻松地可视化其中的几个(通常是三个或四个) splom(pc$x[,1:3])
。