Stata GMM程序计算器不喜欢我的临时变量
据我所知,下面代码中的两个程序是相同的。在第一个程序中,我只是将参数指定给标量。在第二个程序中,我将每个观测值的标量存储在一个临时变量中 从数学上讲,这应该是相同的,但第二个程序产生“数值导数是近似的”和“遇到平坦或不连续区域” 为什么在第二种方法中不能正确计算导数Stata GMM程序计算器不喜欢我的临时变量,stata,Stata,据我所知,下面代码中的两个程序是相同的。在第一个程序中,我只是将参数指定给标量。在第二个程序中,我将每个观测值的标量存储在一个临时变量中 从数学上讲,这应该是相同的,但第二个程序产生“数值导数是近似的”和“遇到平坦或不连续区域” 为什么在第二种方法中不能正确计算导数 clear set obs 10000 set seed 42 gen x = runiform() * 10 gen eps = rnormal() gen y = 2 + .3 * x + eps capture prog
clear
set obs 10000
set seed 42
gen x = runiform() * 10
gen eps = rnormal()
gen y = 2 + .3 * x + eps
capture program drop testScalar
program testScalar
syntax varlist [if], at(name)
scalar b0 = `at'[1,1]
scalar b1 = `at'[1,2]
replace `varlist' = y - b0 - b1* x
end
capture program drop testTempvar
program testTempvar
syntax varlist [if], at(name)
tempvar tmp
scalar b0 = `at'[1,1]
scalar b1 = `at'[1,2]
gen `tmp' = b1
replace `varlist' = y - b0 - `tmp'* x
end
gmm testScalar, nequations(1) nparameters(2) instr(x) winitial(identity) onestep
gmm testTempvar, nequations(1) nparameters(2) instr(x) winitial(identity) onestep
输出:
. gmm testScalar, nequations(1) nparameters(2) instr(x) winitial(identity) onestep
(10,000 real changes made)
Step 1
Iteration 0: GMM criterion Q(b) = 417.93313
Iteration 1: GMM criterion Q(b) = 1.690e-23
Iteration 2: GMM criterion Q(b) = 3.568e-30
note: model is exactly identified
GMM estimation
Number of parameters = 2
Number of moments = 2
Initial weight matrix: Identity Number of obs = 10,000
------------------------------------------------------------------------------
| Robust
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
/b1 | 2.022865 .0200156 101.06 0.000 1.983635 2.062095
/b2 | .2981147 .003465 86.04 0.000 .2913235 .3049059
------------------------------------------------------------------------------
Instruments for equation 1: x _cons
. gmm testTempvar, nequations(1) nparameters(2) instr(x) winitial(identity) onestep
(10,000 real changes made)
Step 1
Iteration 0: GMM criterion Q(b) = 417.93313
numerical derivatives are approximate
flat or discontinuous region encountered
Iteration 1: GMM criterion Q(b) = 8.073e-17
numerical derivatives are approximate
flat or discontinuous region encountered
Iteration 2: GMM criterion Q(b) = 8.073e-17 (backed up)
note: model is exactly identified
GMM estimation
Number of parameters = 2
Number of moments = 2
Initial weight matrix: Identity Number of obs = 10,000
------------------------------------------------------------------------------
| Robust
| Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
/b1 | 2.022865 .0201346 100.47 0.000 1.983402 2.062328
/b2 | .2981147 .0034933 85.34 0.000 .291268 .3049613
------------------------------------------------------------------------------
Instruments for equation 1: x _cons
.
在程序
testTempvar
中,需要将临时变量tmp
生成为double类型:
generate double `tmp' = b1
换句话说,这是一个精度问题。在程序
testTempvar
中,需要将临时变量tmp
生成为double类型:
generate double `tmp' = b1
换句话说,这是一个精度问题