Stata 用户定义程序、Probit 和最大化选项
Stata user defined Program, Probit and Maximization Options
我在调用用户定义程序中的最大化选项时遇到问题。例如,以下完美运行:
sysuse nlsw88, clear
probit collgrad age grade, tech(bfgs)
但是,当我定义调用 Probit 的函数时,我收到 "option tech() not allowed" 的错误消息。这是
的代码
program probit_test, eclass
version 10.1
if replay() {
syntax [anything] [, Level(real 95) ]
eret di, level(`level')
}
else {
qui {
syntax [varlist] [if] [in], [Level(real 95) *]
tempvar touse e1
tempname beta var
mark `touse' `if' `in'
markout `touse'
gettoken depv vl:varlist
probit `depv' `vl' if `touse', tech(bfgs)
g `e1'=e(sample)
loc N=r(N)
matrix `beta'=e(b)
matrix `var'=e(V)
ereturn post `beta' `var', dep(`depv') e(`e1') obs(`N')
cap drop _d*
}
eret di, level(`level')
}
end
****
sysuse nlsw88, clear
probit_test collgrad age grade
编辑:我只是想补充一点,这不是我的实际程序 运行,而是一个显示问题的简单版本。
您的 probit_test
程序告诉 Stata 的行为就好像它是 10.1 版一样。在 10.1 中,Broyden–Fletcher–Goldfarb–Shanno 算法尚不可用,因此会出错。将版本更改为更新的版本(bfgs 是在 v11 中引入的),它应该 运行 没问题。
我在调用用户定义程序中的最大化选项时遇到问题。例如,以下完美运行:
sysuse nlsw88, clear
probit collgrad age grade, tech(bfgs)
但是,当我定义调用 Probit 的函数时,我收到 "option tech() not allowed" 的错误消息。这是
的代码 program probit_test, eclass
version 10.1
if replay() {
syntax [anything] [, Level(real 95) ]
eret di, level(`level')
}
else {
qui {
syntax [varlist] [if] [in], [Level(real 95) *]
tempvar touse e1
tempname beta var
mark `touse' `if' `in'
markout `touse'
gettoken depv vl:varlist
probit `depv' `vl' if `touse', tech(bfgs)
g `e1'=e(sample)
loc N=r(N)
matrix `beta'=e(b)
matrix `var'=e(V)
ereturn post `beta' `var', dep(`depv') e(`e1') obs(`N')
cap drop _d*
}
eret di, level(`level')
}
end
****
sysuse nlsw88, clear
probit_test collgrad age grade
编辑:我只是想补充一点,这不是我的实际程序 运行,而是一个显示问题的简单版本。
您的 probit_test
程序告诉 Stata 的行为就好像它是 10.1 版一样。在 10.1 中,Broyden–Fletcher–Goldfarb–Shanno 算法尚不可用,因此会出错。将版本更改为更新的版本(bfgs 是在 v11 中引入的),它应该 运行 没问题。