有没有办法在没有方差-协方差矩阵的情况下在 Stata 中报告 (bootstrap) 模型结果?

Is there a way to report (bootstrap) model results in Stata without a variance-covariance matrix?

我在 Stata 中编写了一个程序来执行聚类 bootstrap-t 过程来估计 t 统计量和参数置信区间。该程序的目标是使用 t 检验并创建对集群相关性具有鲁棒性的 CI,即使对于少量集群也是如此。出于好奇,这是建立在 Cameron、Gelbach 和 Miller (2008) 中描述的 "cluster bootstrap-t with asymptotic refinement" 程序之上的:"Bootstrap-Based Improvements for Inference with Clustered Errors."

问题是我想创建一个漂亮的回归 table 来为用户输出,类似于标准 Stata 回归报告。但是,我不能使用常用函数 "ereturn",因为我的程序会根据 bootstrapping t 统计量创建 t 统计量和置信区间。据我了解 "ereturn" 函数,它需要一个参数向量和一个方差-协方差矩阵作为输入,然后计算标准误差、t 统计量和 95% CI 本身。这意味着我不能简单地将我的 t 统计量 p 值和 95% 置信区间输入 "ereturn" 函数。即使我计算 bootstrapped 标准误差来填充 VCV 中的方差,t 统计量和 CI 也是错误的。

Stata 中是否有另一个函数 returns table 向用户提供并可用于报告我的程序的结果?我可以更改 "ereturn" 的代码并将其保存为另一个接受我的统计数据输出的程序吗?还是我坚持以简单的文本显示输出结果?

您的假设可以通过编写一些代码轻松验证。这里的滑稽例子

program whatever, eclass 
    ereturn scalar answer = 42 
end

表明可以创建一个 e-class 程序,returns e-class 一个人选择的结果。它只不过是 return 方差-协方差矩阵的通用约定(尽管它具有很大的统计意义)。这不是句法定义的重要部分。

. whatever

. eret li

scalars:
         e(answer) =  42

注意ereturn不是Stata函数,而是命令。如果事情不是这样的话,Stata 函数也不能帮助你。在 Stata 中,函数和命令是不相交的。自然地,术语在别处通常是不同的。

补充@Nick 的回答。

写程序应该已经很清楚了,是e-class还是r-class,给出了相似的结果。从他的代码中获取:

*----- example programs -----

capture program drop whatever
program whatever, eclass 
    ereturn post
    ereturn scalar answer = 42 
end

capture program drop whatever2
program whatever2, rclass 
    return scalar answer = 42 
end

*----- use programs -----

whatever
ereturn list

whatever2
return list

但请注意,这两种类型之间存在 差异,至少应该阅读 [U] 18.10 Saving results 来弄清楚它们。相应地选择您的程序类型。

现在还有一点。你说

The problem is that I want to create a nice-looking regression table to output for the user, similar to what standard Stata regressions report. However, I cannot use the usual function "ereturn",

没有理由认为程序 class 会阻碍这样的 tables:

*----- example programs -----

// first program
capture program drop whatever
program whatever, eclass 
    ereturn post
    local ans = 42
    ereturn scalar answer = `ans' 

    // table
    di as smcl as txt                ///
        _col( 7) "Whatever {c |}"    ///
        _col(22) "Value"              

    di as smcl as txt "  {hline 13}{c +}{hline 62}"

    di as smcl as txt              ///
        _col( 8) "        {c |}"   ///
        _col(23) `ans'     
end

// second program
capture program drop whatever2
program whatever2, rclass 
    local ans = 42
    return scalar answer = `ans' 

    // table
    di as smcl as txt                ///
        _col( 6) "Whatever2 {c |}"   ///
        _col(22) "Value"              

    di as smcl as txt "  {hline 13}{c +}{hline 62}"

    di as smcl as txt              ///
        _col( 8) "        {c |}"   ///
        _col(23) `ans'      
end

*----- use programs -----

whatever
ereturn list

whatever2
return list

如果您想要 table 作为结果,您只需在程序定义中使用 display(或 di)。那些 table 没有什么特别之处,但它们应该能说明问题。

您可以查看 StataCorp 程序员和其他 programmers/users 如何显示 table 看看他们编写的 .ado 文件。参见 help viewsource

我最终用来进行回归 table 输出的方法是 "estout" 命令。 "estout" 允许您在已经格式化的漂亮 table 中显示矩阵,并使用一些相对简单的选项来更改它的显示方式。我希望这对面临类似情况的任何人有所帮助。

estout matrix(final, fmt(%10.0g %10.0g %10.0g %12.4f %10.0g %10.0g)), ///
style(smcl) title("Model Results") mlabels("", none) modelwidth(10 10 10 6 10 10)

使用已经包含系数向量、标准误差、t 值、p 值和 95% 置信区间的已标记矩阵,此命令生成的 table 看起来非常类似于标准 Stata 回归 table.