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

R PCA使用行作为变量而不是列,r,pca,vegan,R,Pca,Vegan,我在尝试对数据进行主成分分析时遇到了一个棘手的问题。我曾尝试使用prcomp(base)和rda(vegan),但分析将列视为样本单位,而不是行,这导致了分析中的各种问题 以下代码简化了我的数据。实际数据集由近2000列和大约350行组成。但是,当我运行下面的脚本时,问题是相同的: rn <- rnorm(8000) dt <- matrix(rn, nrow=80, ncol=1000) result <- rda(dt, scale=T) summary(result)

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

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

rn <- rnorm(8000)
dt <- matrix(rn, nrow=80, ncol=1000)

result <- rda(dt, scale=T)
summary(result)

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

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

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

同样,1000个变量,80个主成分(这里80个,而前面2个是
选项的默认值,即提取分数的轴)。

您可以使用
t()
将数据转换为这些函数期望的格式。MrFlick是正确的。在R中,惯例总是将变量放在列中,观察值放在行中。这对用户来说很容易,因为我们知道大多数函数的工作方式都是一样的。没必要猜测那个作者喜欢什么,我明白了。但是数据的格式是正确的(即行作为观察值,列作为变量)。不知何故,R以另一种方式将矩阵凝聚起来,这导致了分析的失败nonsense@PedroRocha当变量多于观测值时,您确定可以执行PCA吗?。我不确定,但是当使用函数
princomp
运行您的示例时,我在princomp.default(dt)中得到了错误
error:“princomp”只能用于比变量更多的单位,这让我怀疑它是否可能,如果不可能,我认为
rda
prcomp
可能会转换数据来执行分析。我确信R不是“以相反的方式协调矩阵”,而是将列视为变量。也许你只是误解了结果。谢谢你的澄清。鉴于这是我第一次处理这么大的数据集,我误解了结果。你的回答很清楚!干杯
> r1 <- prcomp(dt, scale = TRUE)
> dim(scores(r1, display = 'species'))
[1] 1000   80