如何在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
相关产品推荐
相关产品推荐

