r - 有没有办法将 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)
希望这更清楚!
解决方案
对于遇到类似问题的这篇文章的人。我找到了这个问题的简单答案。
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。没有意识到有这样的一步要采取,但至少我认为它已经解决了!
推荐阅读
- json - 无法在 Slim 框架上的 PHPUnit 中提交 JSON 请求
- segmentation-fault - 我简化了项目的一部分以解决我遇到的这个特定问题(大小为 4 的无效写入/分段错误)
- rust - 通过示例了解绝对和相对路径的 Rust 组件迭代器
- reactjs - 找不到模块:错误:运行故事书时无法解析“@emotion/styled/base”
- c# - 在 Blazor 服务器应用程序中使用 IHttpCLientFactory 时 JavaScript 互操作调用错误
- c# - EFCore - 键值从 C.Link 更改为 B.Link 在作为 A.Link 的公共抽象基类中实现
- java - Spring:如何将调度程序锁定在应用程序的多个实例之一中
- mysql - [SELECT ERROR]: ER_PARSE_ERROR: 你的 SQL 语法有错误
- algorithm - 查找递归算法的运行时间
- django - 如何在 django rest 框架序列化程序中设置动态属性?