统计:将单个数据集中多个回归的系数/标准误差结合起来(变量的数量可能不同)



我已经问了一个关于在单个数据集中存储多个回归的系数和标准误差的问题。

让我重申一下我最初问题的目的:

我想运行几个回归和存储他们的结果在DTA文件,我可以稍后用于分析。我的约束条件是:

  1. 我不能安装模块(我正在为其他人编写代码,而不是确定他们安装了什么模块)
  2. 一些回归因子是因子变量。
  3. 每次回归的不同之处仅在于被依赖性变量,所以我想把它存储在最终的数据集中系数/方差对应的回归轨迹。

Roberto Ferrer建议的解决方案在我的测试数据上工作得很好,但在其他类型的数据上工作得不太好。原因是我的样本从一个回归到下一个回归略有变化,并且一些因素变量在每次回归中不取相同数量的值。这导致固定效果(使用i.myvar作为回归量动态创建)不具有相同的基数。

假设我决定使用i.year来放置年份固定效应(如:特定年份的截距),但在一个回归中没有2006年的观测值。这意味着这个特定的回归将减少一个回归量(不创建与year==2006相对应的dummy),因此存储系数的矩阵更小。

当试图将矩阵堆叠在一起时,这会导致一致性错误。

我想知道是否有一种方法可以使初始解决方案对不同数量的回归量具有鲁棒性。(也许将每个回归保存为数据,然后合并?)

我仍然受制于不能依赖外部包的约束。

您可以遵循append数据集的策略,对您引用的问题中的代码进行小更改:

clear
set more off
save test.dta, emptyok replace
foreach depvar in marriage divorce {
    // test data
    sysuse census, clear 
    generate constant = 1
    replace marriage = . if region == 4 
    // regression
    reg `depvar' popurban i.region constant, robust noconstant  // regressions
    matrix result_matrix = e(b)vecdiag(e(V))                   // grab coeffs and their variances in a 2xK matrix
    matrix rownames result_matrix = `depvar'_b `depvar'_v       // add rownames to the two extra rows
    // get original column names of matrix
    local names : colfullnames result_matrix
    // get original row names of matrix (and row count)
    local rownames : rowfullnames result_matrix
    local c : word count `rownames'
    // make original names legal variable names
    local newnames
    foreach name of local names {
        local newnames `newnames' `=strtoname("`name'")'
    }
    // rename columns of matrix
    matrix colnames result_matrix = `newnames'
    // from matrix to dataset
    clear
    svmat result_matrix, names(col)
    // add matrix row names to dataset
    gen rownames = ""
    forvalues i = 1/`c' {
        replace rownames = "`:word `i' of `rownames''" in `i'
    }
    // append
    append using "test.dta"
    save "test.dta", replace
}
// list
order rownames
list, noobs

结果就是你想要的。然而,问题是每次循环都要重新加载数据集;它加载数据的次数和你估计的回归次数一样多。

您可能需要查看post并检查您是否可以管理更有效的解决方案。statsby也可以工作,但您需要找到一种聪明的方法来重命名存储的变量。

相关内容

最新更新