如何计算回归模型中新预测值的Leverage?
计算回归模型中新预测值的杠杆值(Leverage)
对于新观测的杠杆值,不需要将其加入原数据集重构帽子矩阵,正确做法是利用原模型的设计矩阵信息,通过公式直接计算:
单个新观测的杠杆值:( h_{new} = x_{new} \cdot (X^T X)^{-1} \cdot x_{new}^T )
其中( x_{new} )是新观测对应的含截距项的设计矩阵行向量,( X )是原模型的设计矩阵。
具体实现代码
基于你提供的示例,修改如下:
data("mtcars") mod = lm(mpg ~ wt + cyl, data = mtcars) X = model.matrix(mod) # 计算原模型的(X^T X)逆矩阵,crossprod是t(X)%*%X的高效写法 XTX_inv = solve(crossprod(X)) # 处理新数据,生成与原模型结构一致的设计矩阵(自动包含截距项) new_dt = data.table(wt = c(2.5, 3.456), cyl = c(4, 8)) X_new = model.matrix(mod$terms, new_dt) # 计算两个新观测的杠杆值 new_leverage = diag(X_new %*% XTX_inv %*% t(X_new))
代码说明
model.matrix(mod$terms, new_dt):确保新数据的设计矩阵和原模型完全匹配(自动添加截距项、变量顺序一致),避免手动构造时出错。diag(X_new %*% XTX_inv %*% t(X_new)):对每个新观测的行向量单独计算杠杆值,最终得到对应两个新预测值的杠杆值向量。
内容的提问来源于stack exchange,提问作者AshleyCrasto
相关产品推荐
相关产品推荐

