r之PCA 使用行而不是列作为变量

lonelyxmas 阅读:64 2024-12-31 21:38:35 评论:0

我在尝试对我的数据运行主成分分析时遇到了一个棘手的问题。我尝试使用 prcomp(base) 和 rda(vegan),但分析将列视为样本单位而不是行,这会导致各种问题分析。

以下代码是对我的数据的简化。实际数据集由近 2000 列和大约 350 行组成。但是,当我运行下面的脚本时,问题是一样的:

rn <- rnorm(8000) 
dt <- matrix(rn, nrow=80, ncol=1000) 
 
result <- rda(dt, scale=T) 
summary(result) 

起初我以为这是一个常见的错误,但是我找不到任何类似的问题或解决方案。

有没有办法明确指定使用哪个维度作为样本单位?

请您参考如下方法:

虽然您可以使用 SVD 方法对变量 p 多于观察值 n 的数据集执行 PCA,但最多 n 个主成分,如果数据居中,则 n -1。

如果您深入研究您拟合的 PCA 的结果,您会发现它考虑了所有变量并且它们仍然作为变量:

> r2 <- rda(dt, scale=T) 
> dim(scores(r2, display = 'species')) 
[1] 1000    2 

'species'vegan 指代变量加载的方式;有 1000 个变量。

与同样使用 SVD 的 prcomp() 比较:

> r1 <- prcomp(dt, scale = TRUE) 
> dim(scores(r1, display = 'species')) 
[1] 1000   80 

同样是 1000 个变量,80 个主成分(这里是 80 个的原因,而之前的 2 个只是 choices 的默认值,即提取分数的轴。)


标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号