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

如何利用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:08:01