如何为线性模型添加未输入变量的系数以完成raster空间预测
线性模型补充缺省土地覆盖变量系数方案
核心原理
四类土地覆盖占比总和为1,原模型通过舍弃agro变量避免完全多重共线性,本质是将agro作为参照组,我们可以通过代数等价改写把截距项拆分到四个变量的系数中,得到包含所有变量的无截距预测表达式。
具体操作步骤
- 提取原线性模型的系数
从你已拟合的lm对象中获取截距和三个自变量的系数:# 替换为你自己的lm模型对象名 raw_coef <- coef(lm_model) - 计算四个土地覆盖变量的对应系数
# agro变量系数等于原模型截距 coef_agro <- raw_coef[["(Intercept)"]] # 其余变量系数=原截距+原变量对应系数 coef_open <- raw_coef[["(Intercept)"]] + raw_coef[["open"]] coef_tran <- raw_coef[["(Intercept)"]] + raw_coef[["tran"]] coef_urb <- raw_coef[["(Intercept)"]] + raw_coef[["urb"]] - 调用raster的predict方法执行空间预测
自定义预测函数传入即可直接使用包含四个变量的栅格堆栈计算:library(raster) # 自定义预测函数 lc_predict <- function(x) { x[,"agro"] * coef_agro + x[,"open"] * coef_open + x[,"tran"] * coef_tran + x[,"urb"] * coef_urb } # 替换为你自己的栅格堆栈对象名 pred_raster <- predict(raster_stack, fun = lc_predict)
该转换为纯代数等价操作,预测结果和原模型使用三个变量计算的结果完全一致,不会产生误差,也规避了共线性问题
注意:如果你的原模型拟合时未设置截距项,仅需将
agro变量的系数设为0即可,其余变量直接使用原模型系数。
内容的提问来源于stack exchange,提问作者noob_researcher
相关产品推荐
相关产品推荐

