sampleselection 是一个面向计量经济学和研究方法教学的 R 包。它把回归模型、影响分数计算、样本删除/降权、结果比较和样本导出整合为一组可重复调用的函数。
包中不包含、也不引用任何真实数据。全部教程和测试都使用 simulate_sample_data() 现场生成的模拟面板数据。
Important
本包用于展示“查看结果后再调整样本”会如何改变系数和 P 值。正式研究应在查看回归结果前确定样本规则,不应把本包搜索出的方案用于论文、审稿回复或实证结论筛选。
- 直接接受
data.frame、.dta、.csv或.rds数据。 - 支持普通回归、多维固定效应和聚类标准误。
- 支持单目标和多目标系数条件。
- 支持交互项和工具变量(IV)模型。
- 支持删除样本和降低权重两种处理方式。
- 支持缩尾、log 变换和 IHS 变换。
- 返回可追溯的方案编号、带标记数据和可重新拟合的
fixest模型。 - 默认输出使用中文规则说明、普通小数 P 值和易读布局。
if (!requireNamespace("remotes", quietly = TRUE)) {
install.packages("remotes")
}
remotes::install_github("JINGYIYIYIYI/sampleselection")安装后重启 R,再运行:
library(sampleselection)
getNamespaceVersion("sampleselection")也可以在 Releases 下载 sampleselection_*.tar.gz,然后运行:
install.packages(
"sampleselection_0.1.2.tar.gz",
repos = NULL,
type = "source"
)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 |
模拟工具变量 |
下面的设置表示:因变量是 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"
)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)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)export_search_result(
result,
directory = "sample_search_output",
prefix = "simulated_example"
)函数会显式导出所有尝试、成功方案、带标记全样本、保留样本和被处理样本。已有文件默认不会被覆盖。
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。