R中spdep包lagsarlm模型predict与fitted.value结果差异及预测原理咨询
空间杜宾模型(SDM)中
fitted.values与predict的差异及预测原理 模型基础
空间杜宾混合模型(即lagsarlm(type="mixed"))的核心形式为:
y = ρWy + Xβ + WXθ + ε
其中:
ρ:因变量空间自回归系数W:空间权重矩阵(对应输入的wlist)X:自变量矩阵β:自变量系数θ:自变量空间滞后项系数ε:随机误差项
m1$fitted.values的计算逻辑
fitted.values是模型估计过程中生成的拟合值,计算逻辑直接依赖原始观测数据:
将估计得到的ρ、β、θ代入模型右侧,使用**原始因变量的空间滞后项Wy**计算,即:
fitted.values = ρWy + Xβ + WXθ
它本质是用已知的y计算模型右侧的预测部分,最终通过y - residuals推导而来(其中residuals = y - fitted.values)。
predict.lagsarlm针对SDM的预测原理
predict()函数的核心是无约束预测——完全不依赖原始观测的y值,通过联立方程求解预测值ŷ,具体逻辑如下:
假设预测值ŷ满足模型结构,即:
ŷ = ρWŷ + Xβ + WXθ
将含ŷ的项移至左侧整理,得到:
ŷ = (I - ρW)⁻¹(Xβ + WXθ)
其中I为单位矩阵,(I - ρW)⁻¹是空间变换矩阵的逆矩阵。
对于内样本预测(即newdata为原始数据集),predict()基于上述公式计算,完全不使用原始y值——这正是它与fitted.values产生差异的核心原因:
fitted.values依赖原始y的空间滞后项Wypredict()通过矩阵逆运算,直接求解不依赖原始y的预测值
验证差异的代码示例
可以通过以下代码验证两者的计算逻辑:
# 提取模型估计参数 rho <- m1$rho beta_coef <- coef(m1)[names(coef(m1)) != "rho"] # 构造自变量矩阵与自变量空间滞后矩阵 X_mat <- model.matrix(m1, data = d)[, -1] # 移除截距项 WX_mat <- as.matrix(wlist %*% X_mat) # 计算fitted.values的等价结果 fitted_eq <- rho * (wlist %*% d$y) + X_mat %*% beta_coef[1:ncol(X_mat)] + WX_mat %*% beta_coef[(ncol(X_mat)+1):length(beta_coef)] # 计算predict的等价结果 I_mat <- diag(nrow(d)) W_mat <- as.matrix(wlist) predict_eq <- solve(I_mat - rho * W_mat) %*% (X_mat %*% beta_coef[1:ncol(X_mat)] + WX_mat %*% beta_coef[(ncol(X_mat)+1):length(beta_coef)]) # 对比结果 all.equal(m1$fitted.values, as.vector(fitted_eq)) # 应返回TRUE all.equal(pred, as.vector(predict_eq)) # 应返回TRUE
内容的提问来源于stack exchange,提问作者Chenghao Duan
相关产品推荐
相关产品推荐

