r - 从栅格堆栈 R 中删除线性趋势
问题描述
尝试从 1979 年至 2015 年期间美国的月降水栅格堆栈中移除线性趋势(去趋势)(https://www.northwestknowledge.net/metdata/data/monthly/pr_gridMET.nc)。这些数据足够大,以这些数据为例在这里会有点不守规矩,所以为了提高效率,我将使用栅格包中的数据。我目前的工作模型是在线性模型上使用 `raster"::calc` 并提取残差。我的理解是这些残差是去趋势系列,但我不能 100% 确定这是正确的。代码我正在使用如下:
library(raster)
fn <- raster(system.file("external/test.grd", package="raster"))
fn2 <- fn+1000
fn3 <- fn +500
fn4 <- fn +750
fn5 <- fn+100
fns <- stack(fn, fn2, fn3, fn4, fn5)
time <- 1:nlayers(fns)
# Get residuals to detrend the raw data
get_residuals <- function(x) {
if (is.na(x[1])){
rep(NA, length(x)) }
else {
m <- lm(x~time)
q <- residuals(m)
return(q)
}
}
detrended_fns <- calc(fns, get_residuals) # Create our residual (detrended) time series stack
我觉得我在这里遗漏了一些东西。任何人都可以确认我在正确的轨道上吗?如果我没有关于如何正确去除这些数据的任何建议会很有帮助!谢谢!
解决方案
残差消除了斜率和截距,你就会得到异常。也许您只想移除斜坡?在这种情况下,您可以将截距添加到残差中get_residuals
q <- residuals(m) + coefficients(m)[1]
或更好:
q <- residuals(m) + predict(m)[1]
这样您就可以使用第 1 年(而不是第 0 年)作为基础,如果时间是,它也可以工作,例如,2000:2004
您也可以将去年、年中或平均值作为基数。
推荐阅读
- java - 片段中的 findViewById 无法获取其视图(在空对象引用上)
- python - 正在打印两个列表
- elasticsearch - 如何在 Elasticsearch 中使用无痛脚本获取数组字段的匹配字段值?
- node.js - 将 unix 时间戳插入 postgres 时间戳列 (node-postgres)
- mongodb - 仅在 mongodb 中为动态字段名称项目嵌套对象
- postgresql - 如何将 Apollographql 连接到多个 Postgres 数据库
- javascript - 我的 javascript 代码不适用于工作 php 的结果
- android - RecyclerView 项目未按预期显示
- ios - 如何在自定义表格视图单元格填充和圆角内给出标签
- java - 我们可以在类中初始化 WebDriverWait