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
换句话说,这是一个精度问题