You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中使用sandwich包后,如何基于含稳健标准误的模型做预测?

问题解答:泊松模型预测与稳健标准误的使用

一、直接用predict()做点预测是否可行?

完全可行。原因是:

  • 稳健标准误(如sandwich估计器)仅修正系数的标准误,用于改进假设检验和系数置信区间的准确性,但不会改变模型的系数点估计(系数仍然是glm输出的MLE估计值)。
  • predict(model, newdata = ..., type = "response")的点预测值完全基于系数点估计计算,因此和使用普通标准误的模型结果一致,不需要做任何调整。

二、如何在预测中纳入稳健标准误?

稳健标准误的作用是量化预测的不确定性,即构建稳健的预测区间。具体步骤如下:

核心思路

预测的不确定性来自两部分:系数估计的方差(用稳健方差矩阵修正),以及模型的随机误差(泊松模型的离散性)。我们需要先计算线性预测尺度(log尺度)的稳健方差,再转换到响应尺度(相对风险尺度)。

具体代码实现

1. 准备新数据(示例)

set.seed(123)
# 模拟与原数据分布匹配的新数据starwars2
starwars2 <- data.frame(
  height = rnorm(10, mean = mean(data$height, na.rm = T), sd = sd(data$height, na.rm = T)),
  mass = rnorm(10, mean = mean(data$mass, na.rm = T), sd = sd(data$mass, na.rm = T)),
  birth_year = rnorm(10, mean = mean(data$birth_year, na.rm = T), sd = sd(data$birth_year, na.rm = T))
)

2. 计算稳健预测区间

library(sandwich)
library(lmtest)

# 获取新数据的模型矩阵(包含截距项,与原模型公式一致)
X_new <- model.matrix(formula(model), data = starwars2)

# 提取稳健系数方差-协方差矩阵(HC1是流行病学中常用的稳健类型,可替换为HC3等)
vcov_robust <- vcovHC(model, type = "HC1")

# 计算log尺度的线性预测值
lin_pred <- predict(model, newdata = starwars2, type = "link")

# 计算每个新观测的线性预测方差(基于稳健协方差矩阵)
lin_pred_var <- apply(X_new, 1, function(x) t(x) %*% vcov_robust %*% x)

# 转换为响应尺度的预测区间(95%置信水平)
# 注意:先在log尺度计算区间再指数转换,比直接在响应尺度计算更准确
lower_ci <- exp(lin_pred - 1.96 * sqrt(lin_pred_var))
upper_ci <- exp(lin_pred + 1.96 * sqrt(lin_pred_var))

# 整合点预测与稳健区间
pred_results <- data.frame(
  点预测值 = predict(model, newdata = starwars2, type = "response"),
  95%稳健区间下限 = lower_ci,
  95%稳健区间上限 = upper_ci
)

print(pred_results)

3. 考虑泊松离散性的完整预测区间

如果需要同时考虑系数估计不确定性和泊松模型的随机离散误差,可以在方差中加入泊松的均值方差项(泊松方差等于均值):

# 计算总方差:系数估计方差转换到响应尺度 + 泊松离散方差
response_var <- exp(2 * lin_pred) * lin_pred_var
total_var <- response_var + pred_results$点预测值

# 构建包含离散误差的95%预测区间(下界设为0避免负数)
lower_ci_full <- pmax(pred_results$点预测值 - 1.96 * sqrt(total_var), 0)
upper_ci_full <- pred_results$点预测值 + 1.96 * sqrt(total_var)

# 更新结果
pred_results$包含离散误差的95%下限 <- lower_ci_full
pred_results$包含离散误差的95%上限 <- upper_ci_full

print(pred_results)

补充说明

  • 对于你用泊松模型拟合二分类结局的场景,稳健标准误恰好能处理这类模型常见的过度离散问题(实际方差大于泊松假设的均值方差),因此使用稳健预测区间比普通区间更可靠。
  • 所有计算的核心是用sandwich包的稳健协方差矩阵替换普通的vcov(model),从而得到更准确的不确定性估计。

内容的提问来源于stack exchange,提问作者Koldo Lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:43:24