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

无需重估模型,如何基于fixest对样本外固定效应做加权预测?

用fixest对样本外固定效应水平的观测值做预测(加权均值替代)

解决方案思路

要实现无需重新拟合模型、用训练数据中固定效应的加权均值(按观测数加权)替代样本外FE水平的预测,核心逻辑是:

  • 从训练好的fixest模型中提取固定效应估计值及对应观测数
  • 计算加权平均FE
  • 将样本外观测的预测值替换为「线性预测部分 + 加权平均FE」

具体实现代码

1. 基础实现

library(tidyverse)
library(fixest)

# 拟合FE模型
data(trade)
mod <- feols(log(Euros) ~ log(dist_km) | Product, trade)

# 定义包含样本外FE的新数据
df <- tribble(
  ~dist_km, ~Product,
  140, 20, # 样本内Product
  140, 21  # 样本外Product
)

# 提取固定效应及每个FE水平的观测数
fe_product <- get_fe(mod)
# 计算加权平均固定效应(权重为观测数)
weighted_mean_fe <- weighted.mean(fe_product$fe, w = fe_product$nobs)

# 获取不含FE的线性预测值(仅Xβ部分)
lin_pred <- predict(mod, newdata = df, type = "linear.predictor")

# 生成最终预测:样本内用原结果,样本外替换为线性预测+加权平均FE
final_pred <- case_when(
  !is.na(predict(mod, newdata = df)) ~ predict(mod, newdata = df),
  TRUE ~ lin_pred + weighted_mean_fe
)

final_pred
#> [1] 20.14376 18.88489

2. 封装为函数(方便复用)

predict_fe_fill <- function(mod, newdata) {
  # 提取固定效应及观测数
  fe_vals <- get_fe(mod)
  # 计算加权平均FE
  weighted_mean_fe <- weighted.mean(fe_vals$fe, w = fe_vals$nobs)
  # 获取原预测和线性预测
  pred_orig <- predict(mod, newdata = newdata)
  lin_pred <- predict(mod, newdata = newdata, type = "linear.predictor")
  # 替换NA值
  ifelse(is.na(pred_orig), lin_pred + weighted_mean_fe, pred_orig)
}

# 调用函数
predict_fe_fill(mod, df)
#> [1] 20.14376 18.88489

原理说明

  • fixest的predict()默认对未知FE水平返回NA,因为无法匹配训练数据中的FE估计值
  • type = "linear.predictor"返回的是仅由自变量计算的线性部分(即回归系数乘以自变量值),不包含固定效应
  • 加权平均FE是训练数据中所有Product固定效应的加权平均(按每个Product的观测数加权),用它替代样本外FE,等价于无FE模型的预测逻辑,但无需重新拟合模型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:22:47