我想知道,用户编写的估算和/或预测程序必须满足哪些要求才能使标准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
答案 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内搜索。)