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

如何在R语言中获取回归模型的估计样本?(含fixest包最新解决方案)

提取回归模型的估计样本:通用方案与fixest新特性

很高兴能帮你解决这个提取回归估计样本的问题!先给你划个关键更新:
fixest包现已新增obs()函数,可直接获取回归分析中所使用的观测值索引,无需手动筛选缺失值。

解决方法

针对你提到的「不依赖具体建模包的通用方法」,以及不同模型的专属方案,整理如下:

1. 通用方案:用insight包统一处理

insight是专门用于提取各类模型对象信息的工具包,其中get_data()函数可以直接返回模型拟合时使用的已剔除缺失值的完整数据集,不管是lm还是fixest都能完美适配:

# 处理lm模型
insight::get_data(mod_lm)

# 处理fixest模型
insight::get_data(mod_fe)

这种方法不需要手动处理行号或变量列表,代码简洁且兼容性极强,推荐作为首选方案。

2. fixest专属高效方案:obs()函数

现在fixest官方提供了obs()函数,一步就能拿到观测值的索引,再结合dplyr::slice()就能快速从原数据集中筛选出估计样本:

# 获取fixest模型的观测值索引
obs_indices <- obs(mod_fe)
# 提取估计样本
dat %>% slice(obs_indices)

3. 旧版fixest兼容方案:手动筛选

如果你还在使用未添加obs()的旧版fixest,可以通过变量筛选的方式实现,记得要包含因变量(因变量缺失也会被模型剔除):

# 获取模型用到的因变量和自变量
all_vars <- c(insight::find_response(mod_fe), insight::find_predictors(mod_fe, flatten = TRUE))
# 筛选所有变量无缺失值的行
dat %>% filter(if_all(all_of(all_vars), ~ !is.na(.x)))

4. lm模型的传统方法

对于lm模型,你原来使用的case.names()方法完全可行,当然也可以用上面的通用方案保持代码风格一致:

# 传统方法
obs_lm <- as.integer(case.names(mod_lm))
dat %>% filter(row_number() %in% obs_lm)

# 通用方法(更简洁)
insight::get_data(mod_lm)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:07:50