如何使Stata边距适用于用户编写的模型

时间:2015-02-12 06:18:04

标签: stata margins

我想知道,用户编写的估算和/或预测程序必须满足哪些要求才能使标准Stata margins命令能够使用它?

我创建了一个带有预测模块的玩具“估算”程序,但是当我在margins, dydx(x)之后运行myreg y x时,Stata抛出r(103)(“太多指定”)并且什么也没产生。任何人都可以修改我的代码,以便margins可以使用它吗?

是的,我知道如果没有返回e(predict)margins会假设线性预测并且工作正常,但最终我需要编写一个非线性模型并估计它的边际效应。

program mypred
    version 13
    syntax name [if] [in] 
    marksample touse
    local newVar = "`1'"
    mat b = e(b)
    local columnNames: colfullnames b
    tokenize `columnNames'
    gen `newVar' = b[1,1] + b[1,2] * `2'
end

program myreg, eclass
    version 13
    syntax varlist(min=2 max=2) [if] [in] 
    marksample touse
    tempname b V
    matrix input b = (1.1, 2.3)
    matrix input V = (9, 1 \ 1, 4)
    matrix colnames b = _cons `2'
    matrix colnames V = _cons `2'
    matrix rownames V = _cons `2'
    ereturn post b V, esample(`touse')
    ereturn local predict "mypred"
    ereturn local cmd "myreg"
    ereturn display
end

1 个答案:

答案 0 :(得分:0)

我没有完整的答案。如果在Stata文档中有这样的一站式位置来回答您的问题,我就不知道了。

建议至少阅读整个条目:[R] margins。以下是应该考虑的条件列表:

  在不产生估计命令之后,不能使用

margins   完全方差矩阵,如exlogistic和expoisson(见[R]   exlogistic和[R] expoisson)。

     

margins是关于协变量和   在没有发布的估计命令之后不能使用   协变量,消除gmm(见[R] gmm)。

     

margins无法使用   在具有奇数数据组织的估计命令之后   不包括asclogit,asmprobit,asroprobit和nlogit(见[R]   asclogit,[R] asmprobit,[R] asroprobit和[R] nlogit)。

从另一小节:

  

...从Stata 11开始,你应该在e(marginsok)列表中设置   允许预测的选项可以与边距一起使用。

还要考虑检查(help viewsource)用户编写的命令,这些命令来自有经验的用户/程序员,他们在命令中允许这样做。 Maarten Buis就是其中之一。 (您可以运行search maarten buis, all在Stata内搜索。)