从栅格堆栈 R 中删除线性趋势
Remove linear trend from raster stack 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
,它也可以工作
也可以以去年、年中或平均值为基数。
尝试从 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
也可以以去年、年中或平均值为基数。