R中提取栅格逐像元线性回归y估计值计算相对变化
实现逐像元相对变化栅格
你可以通过修改原有的逐像元回归函数,利用线性模型预测周期起止点的y值,再代入公式计算目标指标。具体步骤如下:
- 先明确时间变量的起止值
time <- 1:nlayers(r1) start_time <- min(time) # 周期起始时间(即第1层) end_time <- max(time) # 周期结束时间(即最后一层)
- 定义计算相对变化的逐像元函数
relative_change <- function(y) { # 处理全NA的像元,直接返回NA if (all(is.na(y))) { return(NA) } # 拟合线性回归模型 m <- lm(y ~ time) # 预测起止时间对应的y估计值 start_pred <- predict(m, newdata = data.frame(time = start_time)) end_pred <- predict(m, newdata = data.frame(time = end_time)) # 计算两个端点的均值 mean_pred <- (start_pred + end_pred) / 2 # 避免除以0的情况,防止出现无效值 if (mean_pred == 0) { return(NA) } # 计算相对变化:(end - start)/mean (end_pred - start_pred) / mean_pred }
- 批量计算生成结果栅格
r_relative_change <- calc(r1, relative_change)
关键说明
- 利用
predict()函数从拟合好的线性模型中提取指定时间点的y预测值,这是获取start和end估计值的核心操作 - 加入了均值为0时的判断,避免计算过程中出现
Inf或NaN这类无效值 - 保留了原函数对全NA像元的处理逻辑,确保结果栅格的缺失值与原始数据一致
内容的提问来源于stack exchange,提问作者runrac
相关产品推荐
相关产品推荐

