首页 > 解决方案 > 有没有办法将 PCA 应用于两个栅格堆栈(w 相同的变量)

问题描述

我正在尝试对 R 中的一些生物气候变量运行 PCA,特别是来自 worldclim.org 的生物气候变量的当前和未来预测。

问题在于 prcomp 只能与一个 rasterstack 一起使用。我想让 prcomp 同时处理两个光栅堆栈。Rasterstacks,具有完全相同的变量集(名称和范围),但像元值不同。

我确实有一个迂回的方法来解决这个问题,即改变未来栅格图层的范围并将它们与当前栅格图层合并到一组广泛的栅格图层中。但这给我带来了很多与我希望与此一起使用的其他数据的投影问题。

我知道这并不完全清楚,但基本上:PCA 两个具有相同变量的栅格堆栈,具有相同的坐标,无需移动范围。

谢谢!

编辑:我不知道如何获取数据或创建示例数据,因此最初没有包含示例代码。将尝试在这里更清楚。

filesC # location of bioclimate files for current
[1] "bio01.asc" "bio02.asc" "bio03.asc" "bio04.asc" "bio05.asc"
filesF # location of bioclimate files for the future
[1] "bio01.asc" "bio02.asc" "bio03.asc" "bio04.asc" "bio05.asc"
# note they have the exact same variables.

rasC <- stack(filesC)
rasF <- stack(filesF)
rasC@extent
#class       : Extent 
#xmin        : 116.95 
#xmax        : 126.6 
#ymin        : 4.65 
#ymax        : 21.11667 
rasF@extent
#class       : Extent 
#xmin        : 116.95 
#xmax        : 126.6 
#ymin        : 4.65 
#ymax        : 21.11667 
# and exact same extent

所以目前我正在这样做。

pcaC <- prcomp(rasC, scale = T)
FutPCs <- predict(rasF, pcaC) 
# creating PCs of rasF based on the pca from rasC

但是,我想同时在两个 rasterstacks 上应用 PCA。基于当前和未来生物气候变量的变量构建“PCA 公式”。像这样...

pca <- prcomp(rasC, rasF, scale = T)
CurPCs <- predict(rasC, pca)
FutPCs <- predict(rasF, pca)

希望这更清楚!

标签: rrasterpca

解决方案


对于遇到类似问题的这篇文章的人。我找到了这个问题的简单答案。

prcomp

不直接对栅格本身起作用,而是使用栅格中的(通常是随机的)点矩阵。为了合并两个光栅堆栈的 PCA 分析,我只包括来自每个光栅堆栈的相等部分的点并将它们绑定在一起。

rasC <- stack(rasC)
rasF <- stack(rasF)

srC <- sampleRandom(rasC, 10000)
srF <- sampleRandom(rasF, 10000)

srCF <- rbind(srC,srF)
pcaCF <- prcomp(srCF,scale=T)

从那里,我可以根据两个数据集的组合 pca 来预测新的 PC。没有意识到有这样的一步要采取,但至少我认为它已经解决了!


推荐阅读