我正在尝试在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)
希望这更清楚!
答案 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。 没意识到要采取这样的步骤,但至少我认为已经解决了!