如何利用plm()模型的回归拟合对象标记参与回归的观测值?
当然可以!其实用plm()拟合出来的回归对象本身就带着这些信息,不用费劲去原始数据里手动筛选~ 我给你用最小可行示例一步步演示怎么操作:
1. 准备环境和模拟数据
首先加载plm包,然后构造一个带缺失值的面板数据(模拟实际分析中可能存在的无效观测值):
library(plm) # 构造带缺失值的面板数据 set.seed(123) # 固定随机种子保证结果可复现 data <- data.frame( firm = rep(1:3, each = 5), # 3家公司,各5年数据 year = rep(2018:2022, 3), inv = c(rnorm(14), NA), # 故意把最后一个观测值设为缺失 value = rnorm(15), capital = rnorm(15) )
2. 拟合plm回归模型
这里我们拟合一个固定效应面板模型:
# 拟合固定效应模型 reg_model <- plm(inv ~ value + capital, data = data, model = "within")
3. 从回归对象中提取参与建模的观测值
plm对象和基础的lm对象类似,自带了model.frame()方法,能返回实际用于回归的完整数据集。我们可以通过它的行名来匹配回原始数据的位置:
# 方法1:获取参与回归的观测值的行索引 used_row_names <- rownames(model.frame(reg_model)) used_indices <- as.numeric(used_row_names) # 转换为数值型索引 # 方法2:在原始数据中添加标记列,直观区分 data$used_in_regression <- FALSE data$used_in_regression[used_indices] <- TRUE
4. 验证结果
现在可以查看哪些观测值没参与回归:
# 筛选出未参与回归的观测值 data[!data$used_in_regression, ]
你会看到最后一行(inv为NA的那个观测)被标记为FALSE,也就是被回归模型自动剔除了。
补充说明
这个方法比直接在原始数据中筛选完整观测值更可靠:因为plm在拟合时可能会做额外的处理(比如平衡面板转换、或者你指定了时间范围筛选),而model.frame(reg_model)返回的是真正进入模型计算的数据集,完全对应实际参与回归的样本,不会出错。
内容的提问来源于stack exchange,提问作者Eric Fail
相关产品推荐
相关产品推荐

