Skip to content

Repository files navigation

sampleselection

R-CMD-check R version License: MIT

sampleselection 是一个面向计量经济学和研究方法教学的 R 包。它把回归模型、影响分数计算、样本删除/降权、结果比较和样本导出整合为一组可重复调用的函数。

包中不包含、也不引用任何真实数据。全部教程和测试都使用 simulate_sample_data() 现场生成的模拟面板数据。

Important

本包用于展示“查看结果后再调整样本”会如何改变系数和 P 值。正式研究应在查看回归结果前确定样本规则,不应把本包搜索出的方案用于论文、审稿回复或实证结论筛选。

功能

  • 直接接受 data.frame.dta.csv.rds 数据。
  • 支持普通回归、多维固定效应和聚类标准误。
  • 支持单目标和多目标系数条件。
  • 支持交互项和工具变量(IV)模型。
  • 支持删除样本和降低权重两种处理方式。
  • 支持缩尾、log 变换和 IHS 变换。
  • 返回可追溯的方案编号、带标记数据和可重新拟合的 fixest 模型。
  • 默认输出使用中文规则说明、普通小数 P 值和易读布局。

安装

从 GitHub 安装

if (!requireNamespace("remotes", quietly = TRUE)) {
  install.packages("remotes")
}

remotes::install_github("JINGYIYIYIYI/sampleselection")

安装后重启 R,再运行:

library(sampleselection)
getNamespaceVersion("sampleselection")

从 Release 安装

也可以在 Releases 下载 sampleselection_*.tar.gz,然后运行:

install.packages(
  "sampleselection_0.1.2.tar.gz",
  repos = NULL,
  type = "source"
)

5 分钟快速入门

1. 生成模拟数据

library(sampleselection)

dat <- simulate_sample_data(
  n_firms = 100,
  periods = 6,
  seed = 123
)

head(dat)

模拟数据中的主要变量:

变量 含义
firm 模拟企业 ID
year 年份
city 模拟城市/聚类变量
y 因变量
x 主要目标变量
x2 第二个候选目标变量
control1, control2 控制变量
group 0/1 分组变量
z1, z2 模拟工具变量

2. 运行单目标示例

下面的设置表示:因变量是 y,目标系数是 x,希望查看“x 负向且在 10% 水平显著”的方案。

result <- auto_sample_search(
  data = dat,
  y = "y",
  target = "x",
  controls = c("control1", "control2"),
  fixed_effects = c("firm", "year"),
  cluster = "city",
  goal = "sig",
  direction = "negative",
  p_cut = 0.10,
  max_adjust = 10,
  step = 0.5,
  mode = "drop",
  singleton_id = "firm"
)

3. 查看结果

result

默认输出会按方案显示:

运行完成
初始可用样本:600 条
已比较方案:61 个
符合设定条件:...

方案 1:原始样本(未处理)
  处理比例:0%(设定 0%)|回归样本量:600
  x 系数:-0.225501|标准误:0.033329|P 值:<0.0001|符合条件:是

查看符合条件的方案:

result$successes

生成适合 View() 或导出的中文结果表:

readable_results <- format_search_results(result)
View(readable_results)

查看实际处理比例最小的成功方案:

best_case(result)

4. 提取案例数据并重新回归

marked_data <- extract_case_data(result)

# 被删除的观测
deleted_data <- subset(marked_data, deleted_sample == 1)

# 保留在回归中的观测
kept_data <- subset(marked_data, keep_sample == 1)

# 按选中方案重新拟合 fixest 模型
model <- refit_case(result)
summary(model)

5. 导出结果

export_search_result(
  result,
  directory = "sample_search_output",
  prefix = "simulated_example"
)

函数会显式导出所有尝试、成功方案、带标记全样本、保留样本和被处理样本。已有文件默认不会被覆盖。

使用自己的数据

直接传入 data.frame

result <- auto_sample_search(
  data = my_data,
  y = "outcome",
  target = "treatment",
  controls = c("control_a", "control_b"),
  fixed_effects = c("firm_id", "year"),
  cluster = "city_id",
  sample = ~ year >= 2016 & year <= 2021,
  goal = "sig",
  direction = "positive",
  p_cut = 0.10,
  max_adjust = 10,
  step = 0.5
)

直接传入文件路径

result <- auto_sample_search(
  data = "/path/to/your/data.dta",
  y = "outcome",
  target = "treatment",
  controls = c("control_a", "control_b"),
  fixed_effects = c("firm_id", "year"),
  cluster = "city_id"
)

读取 .dta 时需要 haven

install.packages("haven")

核心参数

参数 含义 常用设置
data data.frame 或数据文件路径 dat, "data.dta"
y 因变量 "y"
target 目标系数对应的变量 "x"
controls 控制变量 c("c1", "c2")
fixed_effects 固定效应 c("firm", "year")
cluster 聚类变量 "city"
sample 初始样本条件 ~ year >= 2016
goal 显著性目标 "sig", "nonsig"
direction 系数方向 "positive", "negative", "any"
p_cut P 值阈值 0.10, 0.05
max_adjust 最大处理比例(%) 10
step 搜索步长(%) 0.5
mode 处理方式 "drop", "downweight"
singleton_id 用于显式删除单例个体的 ID "firm"

处理规则如何理解

输出规则 含义
原始样本(未处理) 不删除也不降权,作为比较基准
删除支持设定方向的观测 通常会削弱设定方向的系数
删除反对设定方向的观测 通常会强化设定方向的系数
删除总体影响最大的观测 按绝对影响分数处理

详细的计算流程见 完整教程

进阶用法

也可以查看可直接运行的代码:

结果对象

auto_sample_search() 返回 auto_sample_search_result 对象。主要元素:

元素 含义
result$trials 所有搜索方案
result$successes 满足全部设定条件的方案
result$data 完成预处理后的数据
result$base_keep 初始完整样本的逻辑向量
result$formula 实际使用的 fixest 公式
result$params 实际使用的参数

对象在控制台中会以中文易读方式显示;底层英文列名仍然保留,便于程序化处理。

开发与测试

本地检查:

devtools::test()
devtools::check(args = "--no-manual")

仓库使用 GitHub Actions 在 macOS、Windows 和 Ubuntu 的多个 R 版本上运行 R CMD check

License

MIT License

About

用于回归样本删除与降权敏感性教学演示的 R 包

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages