当前位置:首页>python>平行趋势通不过,别再反复调控制变量:用 Python 重新定义 DID 对照组

平行趋势通不过,别再反复调控制变量:用 Python 重新定义 DID 对照组

  • 2026-08-18 23:11:08
平行趋势通不过,别再反复调控制变量:用 Python 重新定义 DID 对照组

在双重差分法(DID)实证分析中,平行趋势检验是判断政策效应是否可信的重要环节。

当事件研究图显示政策实施前的系数显著时,很多研究会尝试增加控制变量、更换变量定义、缩短事件窗口,甚至删除部分年份,希望让平行趋势检验“通过”。

但这些操作未必能够真正解决问题。

平行趋势不成立,往往意味着处理组与对照组在政策实施前就处于不同的发展轨迹。此时,更规范的处理方式应当是重新检查研究设计,尤其是:

当前选择的对照组,能否合理代表处理组未接受政策时的反事实变化?

本文使用 Python 演示如何重新定义 DID 对照组,将“从未接受处理的单位”替换为“未来会接受处理、但当前尚未接受处理的单位”,并比较两种研究设计下的平行趋势结果。

案例背景

DID的基本逻辑,是比较处理组和对照组在政策前后的变化差异。

假设结果变量为 (Y_{it}),基础模型可以写为:

[
Y_{it}

\alpha_i
+
\lambda_t
+
\beta DID_{it}
+
\gamma X_{it}
+
\varepsilon_{it}
]

其中:

  • • (\alpha_i)表示个体固定效应;
  • • (\lambda_t)表示时间固定效应;
  • • (DID_{it})表示政策处理状态;
  • • (X_{it})表示控制变量;
  • • (\beta)表示政策处理效应。

DID真正需要回答的问题是:

如果处理组没有接受政策,它的结果变量原本会怎样变化?

由于处理组未接受政策时的结果无法直接观察,因此需要通过对照组构造反事实。

这意味着,对照组不能只是“没有接受政策的单位”,还需要与处理组具有相近的潜在发展趋势。

以贫困县扶持政策为例。

部分县之所以较早被纳入政策,往往是因为这些地区具有以下特征:

  • • 经济发展水平较低;
  • • 财政能力相对较弱;
  • • 就业机会不足;
  • • 产业结构较为单一;
  • • 基础设施建设相对滞后。

这些特征不仅影响一个县是否会进入政策处理组,也可能直接影响当地收入、就业和产业结构的变化趋势。

如果将较早进入政策的贫困县作为处理组,将所有普通非贫困县作为对照组,那么两组在政策实施前就可能处于不同的发展轨迹。

此时,事件研究模型中的事前系数显著,未必是因为模型中少放了某个控制变量,更可能是因为:

原始对照组无法代表处理组的反事实变化。

分析思路

本文比较两种对照组定义。

第一种定义

使用从未接受政策的地区作为对照组:

  • • 处理组:2016年进入政策的县;
  • • 对照组:样本期内从未进入政策的县。

这种设定操作简单,但从未处理县可能与政策县存在明显的经济基础和发展趋势差异。

第二种定义

使用晚处理地区作为对照组:

  • • 处理组:2016年进入政策的县;
  • • 对照组:2020年才进入同一政策的县。

在2016—2019年期间,晚处理县尚未接受政策,因此可以暂时作为早处理县的对照组。

与从未处理县相比,晚处理县和早处理县通常更可能具有相近的:

  • • 政策资格条件;
  • • 初始经济水平;
  • • 地区发展阶段;
  • • 产业结构;
  • • 财政和人口特征;
  • • 政策进入概率。

因此,晚处理组更有可能代表早处理组未接受政策时的反事实结果。

这里需要注意:

晚处理组只能在正式接受政策之前作为对照组。

一旦晚处理县在2020年进入政策,就不能继续把它当作未处理单位。

事件研究模型

为检验平行趋势,可以估计以下动态DID模型:

[
Y_{it}

\alpha_i
+
\lambda_t
+
\sum_{k\neq-1}
\beta_k
\left(
Treat_i
\times
1{t-T_i=k}
\right)
+
\gamma X_{it}
+
\varepsilon_{it}
]

其中,(k=-1)通常作为基准期。

政策实施前的系数主要用于判断处理组与对照组是否存在提前趋势:

[
\beta_{-5},\beta_{-4},\beta_{-3},\beta_{-2}
]

如果这些系数整体接近零且不显著,说明平行趋势假设相对合理。

政策实施后的系数:

[
\beta_0,\beta_1,\beta_2,\beta_3
]

则反映政策效应的动态变化。

Python中可以使用PyFixest估计包含个体固定效应、时间固定效应和聚类标准误的模型。该工具支持类似fixest的公式写法,也支持通过i()构造事件时间与处理组的交互项。

核心代码

1. 安装环境

pip install pandas numpy pyfixest matplotlib openpyxl

导入需要使用的库:

import re
import
 numpy as np
import
 pandas as pd
import
 matplotlib.pyplot as plt
import
 pyfixest as pf

数据至少需要包含以下字段:

字段
含义
county_id
县级地区编号
year
年份
outcome
结果变量
policy
当年是否已经接受政策
control1
控制变量1
control2
控制变量2
control3
控制变量3

读取数据:

df = pd.read_excel("did_data.xlsx")

required_columns = [
    "county_id"
,
    "year"
,
    "outcome"
,
    "policy"
,
    "control1"
,
    "control2"
,
    "control3"
,
]

missing_columns = [
    column for column in required_columns
    if
 column not in df.columns
]

if
 missing_columns:
    raise
 ValueError(
        f"数据缺少以下字段:{missing_columns}"

    )

df = df.sort_values(
    ["county_id", "year"]
).reset_index(drop=True)

2. 确定首次处理年份

首先计算每个县第一次接受政策的年份。

first_treat = (
    df.loc[df["policy"].eq(1)]
      .groupby("county_id")["year"]
      .min()
      .rename("first_treat")
)

df = df.merge(
    first_treat,
    on="county_id",
    how="left",
)

检查首次处理年份:

treatment_timing = (
    df[["county_id", "first_treat"]]
    .drop_duplicates()
    .sort_values("first_treat")
)

print
(treatment_timing.head(20))

对于样本期内从未接受政策的地区,first_treat为空值。

构造是否曾经接受政策的变量:

df["ever_treated"] = (
    df["first_treat"].notna().astype(int)
)

df["never_treated"] = (
    df["first_treat"].isna().astype(int)
)

3. 设置处理批次

假设:

  • • 2016年进入政策的县为早处理组;
  • • 2020年进入政策的县为晚处理组。
EARLY_YEAR = 2016
LATE_YEAR = 2020

PRE_WINDOW = 5
POST_WINDOW = 3

构造早处理组变量:

df["early_group"] = (
    df["first_treat"].eq(EARLY_YEAR)
).astype(int)

事件时间以早处理组的政策年份为基准:

df["event_time"] = df["year"] - EARLY_YEAR

保留政策实施前5年至实施后3年:

window_condition = df["event_time"].between(
    -PRE_WINDOW,
    POST_WINDOW,
)

同时,为了保证晚处理组尚未受到政策影响,分析期必须早于晚处理年份:

pre_late_treatment = df["year"] < LATE_YEAR

4. 原始对照组

第一种设定使用从未接受政策的地区作为对照组。

original_sample = df.loc[
    window_condition
    & pre_late_treatment
    & (
        df["first_treat"].eq(EARLY_YEAR)
        | df["first_treat"].isna()
    )
].copy()

检查处理组和对照组数量:

original_group_count = (
    original_sample[
        ["county_id", "early_group"]
    ]
    .drop_duplicates()
    ["early_group"]
    .value_counts()
)

print
("原始对照组设定:")
print
(original_group_count)

其中:

  • • early_group=1表示早处理县;
  • • early_group=0表示从未处理县。

估计事件研究模型:

formula = """
outcome
~ i(event_time, early_group, ref=-1)
+ control1
+ control2
+ control3
| county_id
+ year
"""


fit_never = pf.feols(
    formula,
    data=original_sample,
    vcov={"CRV1": "county_id"},
)

print
(fit_never.summary())

模型控制了:

  • • 县固定效应;
  • • 年份固定效应;
  • • 三个控制变量;
  • • 县级聚类标准误。

PyFixestfeols()可以通过公式中| county_id + year吸收县固定效应和年份固定效应,并通过vcov={"CRV1": "county_id"}计算县级聚类标准误。

绘制平行趋势图:

fit_never.iplot(
    coord_flip=False,
    title="从未处理组作为对照组",
    yintercept=0,
)

5. 晚处理对照组

第二种设定仅保留早处理县和晚处理县。

late_control_sample = df.loc[
    window_condition
    & pre_late_treatment
    & df["first_treat"].isin(
        [EARLY_YEAR, LATE_YEAR]
    )
].copy()

检查样本数量:

late_group_count = (
    late_control_sample[
        ["county_id", "first_treat"]
    ]
    .drop_duplicates()
    ["first_treat"]
    .value_counts()
    .sort_index()
)

print
("晚处理对照组设定:")
print
(late_group_count)

在这个样本中:

  • • 2016年处理县为处理组;
  • • 2020年处理县为对照组;
  • • 所有观测年份均早于2020年;
  • • 晚处理县在对照期间尚未接受政策。

重新估计事件研究模型:

fit_late = pf.feols(
    formula,
    data=late_control_sample,
    vcov={"CRV1": "county_id"},
)

print
(fit_late.summary())

绘制重新定义对照组后的事件研究图:

fit_late.iplot(
    coord_flip=False,
    title="晚处理组作为对照组",
    yintercept=0,
)

6. 提取事件研究结果

为了统一输出结果,可以编写一个系数提取函数。

def extract_event_results(
    model,
    model_name: str,
) -> pd.DataFrame:
    """
    提取PyFixest事件研究系数。
    """


    result = model.tidy().reset_index()

    term_column = result.columns[0]

    result["event_time"] = (
        result[term_column]
        .astype(str)
        .str.extract(
            r"event_time::(-?\d+(?:\.\d+)?)"
,
            expand=False,
        )
    )

    result = result.loc[
        result["event_time"].notna()
    ].copy()

    result["event_time"] = (
        result["event_time"].astype(float)
    )

    result = result.rename(
        columns={
            "Estimate"
: "estimate",
            "Std. Error"
: "std_error",
            "Pr(>|t|)"
: "p_value",
            "2.5%"
: "ci_low",
            "97.5%"
: "ci_high",
        }
    )

    keep_columns = [
        "event_time"
,
        "estimate"
,
        "std_error"
,
        "p_value"
,
        "ci_low"
,
        "ci_high"
,
    ]

    result = result[keep_columns]
    result["model"] = model_name

    # 补回基准期

    base_period = pd.DataFrame(
        {
            "event_time"
: [-1.0],
            "estimate"
: [0.0],
            "std_error"
: [0.0],
            "p_value"
: [np.nan],
            "ci_low"
: [0.0],
            "ci_high"
: [0.0],
            "model"
: [model_name],
        }
    )

    result = pd.concat(
        [result, base_period],
        ignore_index=True,
    )

    return
 result.sort_values(
        "event_time"

    ).reset_index(drop=True)

提取两组模型结果:

result_never = extract_event_results(
    fit_never,
    "从未处理组"
,
)

result_late = extract_event_results(
    fit_late,
    "晚处理组"
,
)

event_results = pd.concat(
    [result_never, result_late],
    ignore_index=True,
)

event_results.to_excel(
    "event_study_results.xlsx"
,
    index=False,
)

print
(event_results)

7. 绘制左右对比图

下面将两种对照组的平行趋势图放在同一张图片中。

def plot_event_study(
    ax,
    result: pd.DataFrame,
    title: str,
) -> None:
    """
    绘制单个事件研究图。
    """


    ax.errorbar(
        result["event_time"],
        result["estimate"],
        yerr=[
            result["estimate"] - result["ci_low"],
            result["ci_high"] - result["estimate"],
        ],
        fmt="o-",
        capsize=4,
    )

    ax.axhline(
        y=0,
        linewidth=1,
    )

    ax.axvline(
        x=-0.5,
        linestyle="--",
        linewidth=1,
    )

    ax.set_title(title)
    ax.set_xlabel("相对政策实施时间")
    ax.set_ylabel("动态政策效应")
    ax.set_xticks(
        sorted
(result["event_time"].unique())
    )


fig, axes = plt.subplots(
    1
,
    2
,
    figsize=(13, 5),
    sharey=True,
)

plot_event_study(
    axes[0],
    result_never,
    "从未处理组作为对照组"
,
)

plot_event_study(
    axes[1],
    result_late,
    "晚处理组作为对照组"
,
)

plt.tight_layout()

plt.savefig(
    "parallel_trend_comparison.png"
,
    dpi=300,
    bbox_inches="tight",
)

plt.show()

左图展示使用从未处理地区作为对照组的结果,右图展示使用晚处理地区作为对照组的结果。

8. 计算事前系数指标

除了观察图形,还可以计算政策实施前系数的平均绝对值和最大绝对值。

def pretrend_metrics(
    result: pd.DataFrame,
) -> pd.Series:
    """
    计算事前趋势的简单诊断指标。
    """


    pre_result = result.loc[
        result["event_time"] <= -2
    ].copy()

    return
 pd.Series(
        {
            "事前平均绝对系数"
: (
                pre_result["estimate"]
                .abs()
                .mean()
            ),
            "事前最大绝对系数"
: (
                pre_result["estimate"]
                .abs()
                .max()
            ),
            "事前显著系数数量"
: (
                pre_result["p_value"] < 0.05
            ).sum(),
            "事前系数数量"
: len(pre_result),
        }
    )

比较两种对照组:

pretrend_comparison = pd.DataFrame(
    {
        "从未处理组"
: pretrend_metrics(
            result_never
        ),
        "晚处理组"
: pretrend_metrics(
            result_late
        ),
    }
).T

print
(pretrend_comparison)

pretrend_comparison.to_excel(
    "pretrend_comparison.xlsx"

)

需要注意,平均绝对系数和显著系数数量只是辅助诊断。

正式研究中还应当:

  • • 报告事前系数的联合显著性检验;
  • • 检查处理组与对照组的基期特征;
  • • 比较政策前结果变量的变化率;
  • • 检查是否存在政策预期效应;
  • • 进行不同事件窗口下的稳健性分析。

9. 分期DID扩展

如果样本中存在多个政策处理批次,并且不同批次的政策效应可能不同,可以进一步使用适合分期处理的事件研究估计。

PyFixestevent_study()支持传统双向固定效应模型和完全交互的饱和事件研究模型;其中saturated设定可以估计批次与事件时间相互作用的动态效应。

首先将从未处理单位的处理年份编码为零:

df["treat_cohort"] = (
    df["first_treat"]
    .fillna(0)
    .astype(int)
)

估计传统TWFE事件研究:

fit_twfe = pf.event_study(
    data=df,
    yname="outcome",
    idname="county_id",
    tname="year",
    gname="treat_cohort",
    estimator="twfe",
)

fit_twfe.iplot()

估计完全交互事件研究:

fit_saturated = pf.event_study(
    data=df,
    yname="outcome",
    idname="county_id",
    tname="year",
    gname="treat_cohort",
    estimator="saturated",
)

fit_saturated.iplot()

按事件时间汇总不同处理批次的估计结果:

dynamic_att = fit_saturated.aggregate(
    weighting="shares"
)

print
(dynamic_att)

绘制聚合后的动态政策效应:

fit_saturated.iplot_aggregate(
    weighting="shares"
)

官方文档还提供了did2s()lpdid()等分期DID估计接口,可用于处理分期实施与动态效应问题。

结果展示

以下结果用于展示推文中的输出形式,实际系数需要以具体数据运行结果为准。

原始对照组

首先使用从未接受政策的地区作为对照组。

相对时间
系数
标准误
p值
显著性
-5
-0.136
0.052
0.009
**
-4
-0.118
0.048
0.014
**
-3
-0.094
0.044
0.033
**
-2
-0.071
0.035
0.043
**
-1
0.000
基准期
0
0.058
0.031
0.061
*
1
0.102
0.039
0.009
***
2
0.147
0.045
0.001
***
3
0.176
0.051
0.001
***

政策实施前第5年至第2年的估计系数均显著为负。

这说明,在政策正式实施之前,早处理县与从未处理县之间已经存在系统性的趋势差异。

此时,政策后的正向系数可能同时包含:

  1. 1. 政策产生的真实影响;
  2. 2. 两类地区原本存在的发展趋势差异。

因此,从未处理地区可能不是一个理想的反事实对照组。

晚处理对照组

将对照组替换为2020年才进入政策的县后,得到以下结果。

相对时间
系数
标准误
p值
显著性
-5
-0.031
0.044
0.481
-4
-0.024
0.039
0.538
-3
-0.018
0.035
0.607
-2
-0.009
0.031
0.772
-1
0.000
基准期
0
0.046
0.026
0.077
*
1
0.087
0.033
0.008
***
2
0.126
0.038
0.001
***
3
0.151
0.044
0.001
***

重新定义对照组后,政策实施前的系数明显向零靠近,而且均不再显著。

这说明早处理县与晚处理县在政策实施前具有更加接近的发展趋势。

结果对比

检验内容
从未处理组
晚处理组
事前平均绝对系数
0.105
0.021
事前最大绝对系数
0.136
0.031
事前显著系数数量
4
0
事前联合检验p值
0.018
0.624
事后平均政策效应
0.121
0.103
对照组可比性
较弱
较强
平行趋势表现
未通过
明显改善

可以看到,更换对照组后,政策实施后的估计方向没有发生根本变化,但政策实施前的趋势差异明显缩小。

这表明原始平行趋势不成立,很可能不是因为控制变量不足,而是因为从未处理县与早处理县缺乏可比性。

结果解释

重新定义对照组的目的,并不是为了让平行趋势检验机械地“通过”。

真正需要回答的是:

哪些单位能够更加合理地代表处理组在没有接受政策时的发展轨迹?

如果政策进入具有明显的选择性,那么所有未处理地区并不一定都适合作为对照组。

晚处理县与早处理县都会在未来进入同一政策,说明它们通常满足相近的政策资格或筛选条件,只是接受政策的时间存在差异。

因此,在晚处理县正式接受政策之前,将其作为早处理县的对照组,往往能够提高处理组与对照组的可比性。

不过,这种方法仍然需要注意以下问题。

预期效应

如果晚处理地区提前知道自己即将进入政策,可能会在正式实施前调整投资、财政支出或就业安排。

此时,晚处理组在正式处理前就可能受到政策影响。

样本变化

从“所有从未处理县”改为“晚处理县”后,对照组规模通常会下降。

因此,需要同时报告:

  • • 样本量变化;
  • • 处理组数量;
  • • 对照组数量;
  • • 各处理批次分布;
  • • 样本筛选标准。

处理效应异质性

当政策分批实施,并且不同批次、不同年份的政策效果存在差异时,传统双向固定效应模型可能无法给出容易解释的平均处理效应。

此时应进一步使用:

  • • 完全交互事件研究;
  • • Sun-Abraham类型估计;
  • • DID2S;
  • • Local Projections DID;
  • • 其他适合分期处理的估计方法。

研究设计优先

合理的分析顺序应当是:

  1. 1. 分析政策进入机制;
  2. 2. 检查处理组与对照组的可比性;
  3. 3. 比较政策前的结果变量趋势;
  4. 4. 重新定义更合理的对照组;
  5. 5. 重新估计事件研究模型;
  6. 6. 再进行控制变量、窗口和样本稳健性检验。

平行趋势不通过时,不应首先通过反复调整参数寻找一张“更好看”的图。

DID实证分析的核心不是让平行趋势检验通过,而是构造一个可信的反事实。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-22 00:04:25 HTTP/2.0 GET : https://f.mffb.com.cn/a/506032.html
  2. 运行时间 : 1.319604s [ 吞吐率:0.76req/s ] 内存消耗:4,561.55kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=039a4dda9b135f9afaf04c45a6970809
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001159s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001716s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.148959s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.012526s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001380s ]
  6. SELECT * FROM `set` [ RunTime:0.074316s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001653s ]
  8. SELECT * FROM `article` WHERE `id` = 506032 LIMIT 1 [ RunTime:0.034206s ]
  9. UPDATE `article` SET `lasttime` = 1787328266 WHERE `id` = 506032 [ RunTime:0.111924s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.001416s ]
  11. SELECT * FROM `article` WHERE `id` < 506032 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.084044s ]
  12. SELECT * FROM `article` WHERE `id` > 506032 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.003229s ]
  13. SELECT * FROM `article` WHERE `id` < 506032 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.095746s ]
  14. SELECT * FROM `article` WHERE `id` < 506032 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.350028s ]
  15. SELECT * FROM `article` WHERE `id` < 506032 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.203092s ]
1.323744s