PCA 使用行而不是列作为变量
PCA using rows as variables instead of columns
我在尝试 运行 对我的数据进行主成分分析时遇到了一个棘手的问题。我尝试使用 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 的数据集执行 PCA,而不是观察 n,最多有 n 个主成分,或者 n-1 如果数据居中。
如果你深入研究你拟合的 PCA 的结果,你会发现它考虑了所有变量并且它们仍然是变量:
> r2 <- rda(dt, scale=T)
> dim(scores(r2, display = 'species'))
[1] 1000 2
'species'
是 vegan 引用变量加载的方式;有 1000 个变量。
与prcomp()
比较,同样使用了SVD:
> r1 <- prcomp(dt, scale = TRUE)
> dim(scores(r1, display = 'species'))
[1] 1000 80
同样是 1000 个变量,80 个主成分(这里 80 的原因,而之前的 2 只是 choices
的默认值,即提取分数的轴。)
我在尝试 运行 对我的数据进行主成分分析时遇到了一个棘手的问题。我尝试使用 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 的数据集执行 PCA,而不是观察 n,最多有 n 个主成分,或者 n-1 如果数据居中。
如果你深入研究你拟合的 PCA 的结果,你会发现它考虑了所有变量并且它们仍然是变量:
> r2 <- rda(dt, scale=T)
> dim(scores(r2, display = 'species'))
[1] 1000 2
'species'
是 vegan 引用变量加载的方式;有 1000 个变量。
与prcomp()
比较,同样使用了SVD:
> r1 <- prcomp(dt, scale = TRUE)
> dim(scores(r1, display = 'species'))
[1] 1000 80
同样是 1000 个变量,80 个主成分(这里 80 的原因,而之前的 2 只是 choices
的默认值,即提取分数的轴。)