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

使用marginaleffects与fixest处理大数据集时出现NaN估计值求助

解决思路与方案

针对百万级数据集+交互固定效应的2SLS IV模型在marginaleffects中返回NaN/NA的问题,可按以下步骤排查解决:

1. 优化模型拟合的内存与数值稳定性

  • 拟合模型时启用compress参数,减少交互固定效应生成的稀疏矩阵内存占用:
    m1 = feols(y ~ x1 | fe1^fe2 |x2_end*x3_end ~ x2_iv*x3_end, data, compress = TRUE)
    
  • 先检查模型本身的拟合结果:运行summary(m1)确认系数、残差无异常NA值,排除模型拟合阶段的数值问题。

2. 调整marginaleffects计算参数

  • 跳过标准误计算:先尝试不计算标准误,验证预测值本身是否正常(标准误计算涉及大矩阵运算,易引发数值问题):
    avg_predictions(m1, vcov = FALSE)
    predictions(m1, newdata = datagrid(x2_end=unique, x3_end=unique), vcov = FALSE)
    
  • 明确保留固定效应变量:在datagrid中指定保留交互固定效应的组成变量,确保模型能正确匹配固定效应组:
    predictions(m1, newdata = datagrid(x2_end=unique, x3_end=unique, keep = c("fe1", "fe2")))
    
  • 指定响应类型:调用函数时添加type = "response",避免内部类型转换的潜在问题:
    summary(marginaleffects(m1, variables = "x1", type = "response"))
    

3. 分块计算降低内存压力

如果内存不足是核心问题,可按固定效应组块计算后合并结果:

# 按fe1分组计算边际效应
library(dplyr)
results = data %>%
  group_by(fe1) %>%
  do({
    mod_sub = feols(y ~ x1 | fe1^fe2 |x2_end*x3_end ~ x2_iv*x3_end, data = ., compress = TRUE)
    as_tibble(marginaleffects(mod_sub, variables = "x1"))
  })

4. 版本更新与bug排查

  • 确保fixest和marginaleffects为最新版本,旧版本可能存在大模型处理的bug:
    update.packages(c("fixest", "marginaleffects"), ask = FALSE)
    
  • 若以上方法均无效,可构造最小可复现示例(用模拟数据生成百万级观测+交互固定效应的2SLS模型),在marginaleffects的代码仓库提交问题,开发者针对这类场景的bug修复效率较高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:16:26