有没有一种方法可以将PCA应用于两个栅格堆栈(具有相同的变量)

时间:2019-04-07 13:36:00

标签: r raster pca

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

问题在于prcomp只能使用一个栅格堆栈。我希望prcomp可以同时在两个栅格堆栈上工作。栅格堆栈,具有完全相同的变量集(名称和范围),但是单元格值不同。

我确实有一种环回方法可以解决此问题,该方法是将将来的栅格图层的范围转移,并将它们与当前的栅格图层合并为一组广泛的栅格图层。但这给我带来了很多其他问题的投影问题,我希望与此同时使用。

我知道这还不是很清楚,但基本上是: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

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

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

希望这更清楚!

1 个答案:

答案 0 :(得分:0)

致那些遇到类似问题的人。 我已经找到了解决这个问题的简单方法。

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。 没意识到要采取这样的步骤,但至少我认为已经解决了!