有没有办法在没有方差-协方差矩阵的情况下在 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.
我在 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.