有没有办法在两个栅格堆栈上应用PCA(具有相同的变量)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法在两个栅格堆栈上应用PCA(具有相同的变量)相关的知识,希望对你有一定的参考价值。
我试图对R中的一些生物气候变量运行PCA,特别是来自worldclim.org的生物气候变量的当前和未来预测。
问题在于prcomp只能使用一个rasterstack。我想让prcomp同时在两个rasterstack上工作。 Rasterstacks,具有完全相同的变量集(名称和范围),但具有不同的单元格值。
我确实有一个迂回方法来解决这个问题,即改变未来栅格图层的范围,并将它们与当前栅格图层合并为一组广泛的栅格图层。但这给了我很多与其他数据的投影问题,我希望与此一起使用。
我理解这并不完全清楚,但基本上:PCA两个具有相同变量的rasterstacks,具有相同的坐标,而不必移位范围。
谢谢!
编辑:我无法弄清楚如何获取数据或创建示例数据,因此最初没有包含示例代码。将在这里尝试更清楚。
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)
希望这更清楚!
对于遇到类似问题的人来说。我找到了这个问题的简单答案。
prcomp
不直接在栅格本身上工作,而是使用栅格中的(通常是随机的)点矩阵。为了合并两个rasterstacks的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。没有意识到有这样一个步骤,但至少我认为它已经解决了!
以上是关于有没有办法在两个栅格堆栈上应用PCA(具有相同的变量)的主要内容,如果未能解决你的问题,请参考以下文章