Comprehensive results analysis for empirical research: generate publication-quality descriptive statistics and balance tables, interpret regression coefficients with economic magnitude and effect sizes, assess identification assumption diagnostics, and produce structured results memos. Use when asked to create summary statistics, Table 1, balance tests, interpret results, assess economic significance, or write results narratives.
本 skill 是一体化结果分析工具,支持从原始数据探索(EDA)到回归结果解读的完整流程:
results-memo.md 和所有表格的 .tex/.csv 双格式输出/data Step 3 调用)/code Phase 6 执行完成后调用)本 skill 通常由 /data 或 /code 传入结构化上下文。
接收参数:
| 参数 | 说明 | 示例 |
|---|---|---|
clean_data_path |
| 清洗后数据路径 |
data/clean/china_trade_*.parquet |
identification_strategy | 识别策略 | DiD / RDD / IV / Panel FE |
Y_var | 结果变量 | log_gdp_growth |
D_var | 处理变量 | policy_dummy |
Z_var | 识别变量(如适用) | tariff_rate_1990 |
control_vars | 协变量列表 | ["log_gdp", "population"] |
id_var | 面板个体标识 | province_code |
time_var | 时间变量 | year |
treatment_timing | 政策实施时点(DiD 用) | 2003 |
cutoff_value | 断点阈值(RDD 用) | 50.0 |
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import os
os.makedirs("tables", exist_ok=True)
os.makedirs("figures", exist_ok=True)
mpl.rcParams.update({
"figure.dpi": 300,
"font.size": 11,
"axes.spines.top": False,
"axes.spines.right": False,
"axes.grid": True,
"grid.alpha": 0.3,
})
df = pd.read_parquet(clean_data_path)
print(f"样本:{len(df):,} 行 × {df.shape[1]} 列")
生成全样本描述性统计,双格式输出(.tex 用于论文,.csv 用于核查)。
# ─────────────────────────────────────────────
# Table 1 — 描述性统计
# ─────────────────────────────────────────────
analysis_vars = [Y_var, D_var] + ([Z_var] if Z_var else []) + control_vars
analysis_vars = [v for v in analysis_vars if v in df.columns]
stats_dict = {}
for v in analysis_vars:
s = df[v].dropna()
stats_dict[v] = {
"N": len(s),
"Mean": s.mean(),
"SD": s.std(),
"P25": s.quantile(0.25),
"Median": s.median(),
"P75": s.quantile(0.75),
"Min": s.min(),
"Max": s.max(),
}
table1 = pd.DataFrame(stats_dict).T.round(3)
table1.to_csv("tables/table1_descriptive.csv")
print("✅ Table 1 数据已保存(.csv)")
# LaTeX 格式化由 `table` skill 统一负责(在 /plot 阶段调用)
触发条件: 存在处理变量 D_var
关键原则:平衡性检验必须限定在预处理期样本上,不得使用全样本。
# ─────────────────────────────────────────────
# Table 2 — 处理组/控制组平衡性检验
# ─────────────────────────────────────────────
from scipy import stats as scipy_stats
# 筛选预处理期样本
if treatment_timing:
df_pre = df[df[time_var] < treatment_timing].copy()
print(f"预处理期样本:{len(df_pre):,} 行")