Statistics 简单Stata程序

Statistics 简单Stata程序,statistics,Statistics,我正试图编写一个简单的程序,结合一组回归拟合的系数和标准误差估计。例如,我运行5次回归,并将感兴趣的系数和标准误差存储到向量中(实际上是Stata矩阵对象)。然后,我需要执行以下操作: 求系数估计的平均值 根据“多重插补”结果合并建议的公式,合并标准误差估计值。该公式是第6页“T”公式的平方根,共页 我写过一次Stata代码,但我想把它写成一个函数(或“程序”,用Stata的话说),它以回归系数估计的向量(或矩阵,如果可能的话,一次组合多个估计)和相应标准误差估计的向量(或矩阵)作为参数,然后在

我正试图编写一个简单的程序,结合一组回归拟合的系数和标准误差估计。例如,我运行5次回归,并将感兴趣的系数和标准误差存储到向量中(实际上是Stata矩阵对象)。然后,我需要执行以下操作:

  • 求系数估计的平均值
  • 根据“多重插补”结果合并建议的公式,合并标准误差估计值。该公式是第6页“T”公式的平方根,共页
  • 我写过一次Stata代码,但我想把它写成一个函数(或“程序”,用Stata的话说),它以回归系数估计的向量(或矩阵,如果可能的话,一次组合多个估计)和相应标准误差估计的向量(或矩阵)作为参数,然后在上面生成1和2。以下是我编写的代码:

    (breg是回归系数估计的1x5向量,sereg是相关标准误差估计的1x5向量)

    这为单个实例提供了正确的答案。任何指针都会很棒

    更新:我完成了在系数/参数的kXm矩阵中合并估计值的代码(k是参数的数量,m是插补的数量)。代码可以找到

    感谢特里斯坦和加比的指点


    更新:我完成了合并系数/参数kXm矩阵的代码,其中k是系数/参数的数量,m是插补的数量。你可以找到它


    多亏了特里斯坦和加比的提示。

    我想你应该知道多重插补,包括这些类型的组合规则,都内置在Stata 11中。我没有用过,但如果可能的话,这可能是最好的选择

    您可以使用
    args
    命令轻松编写Stata程序来获取矩阵。遵循此模板:

    capture program drop mi_combine
    program define mi_combine 
        args coef se
        matlist `coef'
        matlist `se'
    end
    
    mat ones = (1,1,1)
    mat twos = (2, 2, 2)
    mi_combine ones twos
    

    这应该会有帮助。我是Stata的新手。我有v10,如果/当我得到v11,我将研究mi。我想使用Clarify的mi combine功能,但我使用的是Clarify不支持的模型;我也不确定mi是否会(例如,用户提供的删失分位数回归。ado)

    自从我发布了q之后,我想到了一些目前可以做这项工作的东西:

    capture program drop micombine
    program define micombine
        mat ones = (1,1,1,1,1)
        mat bmean = (1/5)*(ones*`1'')
        mat wtv = (1/5)*(`2'*`2'')
        scalar wtv_s = wtv[1,1]
        mat btv = (1/4)*(`1'  - bmean#ones)* (`1'  - bmean#ones)'
        scalar btv_s = btv[1,1]
        mat varregmi =  wtv_s + (1+(1/5))*btv
        scalar varregmi_s = varregmi[1,1]
        scalar seregmi = sqrt(varregmi_s)
        scalar bmean_s = bmean[1,1]
        scalar dfmi = (5-1)*(1+(5*wtv_s)/(6*btv_s))^2
        scalar moemi = seregmi*invttail(dfmi,.025)
        di as text "b_mi = " as result bmean_s
        di as text "se_mi = " as result seregmi
        di as text "df_mi =" as result dfmi
        di as text "95% moe_mi =" as result moemi
    end
    

    丑陋,并且只对一个系数进行估计。希望能够为所有COEF执行此操作,尽管这不是必需的。

    特里斯坦说得对,您可以使用“args”在Stata程序中调用矩阵作为参数。使用他的模板,这个黑客应该复制你在原始帖子中对任何breg,sreg向量对的计算:

    capture prog drop myMI
    program myMI
    
    args breg sereg
    local params=colsof(`breg') // store the number of parameters here
    
    mat ones=J(1,`params',1)
    mat bregmean = (1/`params')*(ones*breg')
    scalar bregmean_s = bregmean[1,1]
    mat seregmean = (1/`params')*(ones*sereg') 
    mat seregbtv = (1/(`params'-1))*(breg  - bregmean#ones)* (breg  - bregmean#ones)'
    mat varregmi = (1/`params')*(sereg*sereg') + (1+(1/`params'))* seregbtv
    scalar varregmi_s = varregmi[1,1]
    scalar seregmi = sqrt(varregmi_s)
    disp bregmean_s 
    disp seregmi
    
    end
    
    你把它叫做

    myMI breg sereg
    

    如果计算复杂,我建议使用mata

    如果要在数据中进行计算,可以使用
    parmest
    和/或
    postfile
    将回归系数导出到临时数据文件中

    myMI breg sereg