⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nl.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 2 页
字号:
				noi di in gr /*
				*/ "Iteration " `its' ":  " _c
				if "`trace'"!="" { 
					noi di 
				}
			}
			local j 1
			foreach parm of local params {
							* name is `parm'
							* value is ${`param'}
				local parmcol = colnumb(`parmvec', "`parm'")
				sca `old_pj' = `parmvec'[1,`parmcol']
				if "`trace'" != "" {
					noi di in gr _col(12) "`parm' = " /*
					*/ in ye %9.0g `old_pj'
				}
				scalar `incr' = `delta'*(abs(`old_pj')+`delta')
				matrix `parmvec'[1, `parmcol'] = `old_pj'+`incr'
				if `type' < 3 {
					capture replace `YHATi' = `expr'
					if _rc {
						local rc = _rc
						noi di in red "`funcerr'"
						capture noisily replace /*
							*/ `YHATi' = `expr'
					}
				}
				else {
					capture nl`expr' `YHATi' `t3rhs' /*
						*/ `wtexp' if `touse', /*
						*/ at(`parmvec') `options'
					if _rc {
						local rc = _rc
						noisily di as error /*
						*/ "nl`expr' returned " _rc
					}
				}
				cap assert `YHATi'<. if `touse'
				if _rc { 
					noi di in red /*
					*/ "cannot calculate derivatives"
					exit 481
				}
				if `logtsf' {
					* could use dln(f(x))/dx = 
					* (1/f(x)) df(x)/dx here
					replace `J`j''=ln( /*
					*/ (`YHATi'-`lnlsq')/(`YHAT'-`lnlsq') /*
					*/  ) / `incr' if `touse'
				}
				else replace `J`j''= (`YHATi'-`YHAT')/`incr' /*
					*/ if `touse'
				* replace param j with nonincremented value
				matrix `parmvec'[1,`parmcol'] = `old_pj'
				local j = `j' + 1
			}
/*
			Update parameter estimates and test for convergence
			by max proportional iterative change in each param.
			See Gallant p 29.
*/
			reg `RESID' `Jnames' `wtexp' if `touse', nocons
			scalar `ssr' = .
			scalar `f' = 1
			while (`ssr' > `old_ssr') {	/* backup loop */
				local cnvrge 1 	/* parameter convergence flag */
				if (`f'!=1) {
					local j 1
					foreach parm of local params {
						local parmcol = /*
						 */ colnumb(`parmvec', "`parm'")
						mat `parmvec'[1,`parmcol'] = /*
							*/ `op`j''
						local j=`j'+1 
					}
				}
				local j 1
				foreach parm of local params {
					local parmcol = /*
						*/ colnumb(`parmvec', "`parm'")
					scalar `op`j''=`parmvec'[1,`parmcol']
					matrix `parmvec'[1,`parmcol'] = /*
						*/ `op`j''+`f'*_coef[`J`j'']
					if `f'*abs(_coef[`J`j'']) > /* 
					*/ `eps'*(abs(`op`j'')+`tau') {
						local cnvrge 0
					}
					local j=`j'+1
				}
				cap _estimates hold `hest'
				if `type' < 3 {
					capture replace `YHAT' = `expr'
					if _rc {
						local rc = _rc
						noi di as error "`funcerr'"
						capture noisily replace /*
							*/ `YHAT' = `expr'
						cap _estimates unhold `hest'
					}
				}
				else {
					capture nl`expr' `YHAT' `t3rhs' /*
						*/ `wtexp' if `touse', /*
						*/ at(`parmvec') `options'
					if _rc {
						local rc = _rc
						noi di as error /*
						*/ "nl`func' returned " _rc
						cap _estimates unhold `hest'
					}
				}
				cap _estimates unhold `hest'
				cap assert `YHAT'<. if `touse'
				if _rc==0 {
					if `logtsf' {
						replace `RESID' = `YVAR' - /*
							*/ log(`YHAT'-`lnlsq')/*
							*/ if `touse'
					}
					else replace `RESID' = `YVAR'-`YHAT' /*
						*/ if `touse'
					_est hold `dbeta'
					reg `RESID' `Z' `wtexp' if `touse', nocons
					scalar `ssr' = e(rss)*`gm2'
					_est unhold `dbeta'
					if "`ssr'"=="" { 
						scalar `ssr' = .  /* bug fix */
					}
				}
				scalar `f'=`f'/2
			} /* backup loop */
			if "`log'"=="" {
				if "`trace'"!="" {
					local trcol "_col(42)"
					local trnl "_n"
				}
				noi di in gr `trcol' /* 
				*/ "`scaled'residual SS = " /* 
				*/ in ye %9.0g `old_ssr' `trnl'
			}


			if abs(`old_ssr'-`ssr') > /*
			*/ `eps'*(`old_ssr'+`tau') {
				local cnvrge 0
			}
			scalar `old_ssr' =  `ssr'
			local done `cnvrge'
			local its = `its'+1
			if `its' >= `iterate' { 
				local done 1 
			}
		}
/*
		End of main loop.
*/

/*
		Check if sd(any derivative vector) = 0, i.e. that
		that parameter is a 'regression constant'
		to reasonable accuracy.
*/
		if "`constant'" != "" {
			local const 0
		}
		else if "`hasconstant'" != "" {
			local const 1 /* Syntax parsing above ==> know true */
			local j 1
			while `j' <= `np' {
				if "`hasconstant'" == /*
					*/ "`:word `j' of `params''" {
					local consj `j'
				}
				loc j = `j'+1
			}
		}
		else {
			local const 0	/* Until we find one, assume no */
			local j 1
			local consj 0
			while `j' <= `np' {
				* name is ``j''
				* value is ${``j''}
				qui sum `J`j'' if `touse'
				if sqrt(r(Var)) < `eps'*(abs(r(mean))+`tau') {
					local const 1
					local consj `j'
				}
				local j = `j'+1
			}
		}
/*
		Total sum of squares
*/
		if `const' == 0 {
			tempvar yvarsq
			gen double `yvarsq' = `YVAR'^2
			summ `yvarsq' `wtexp' if `touse'
			scalar `sstot' = r(sum)
			if "`weight'" == "iweight" {
				local dftot = r(sum_w)
			}
			else {
				local dftot = r(N)
			}
		}
		else {
			summ `YVAR' `wtexp' if `touse'
			if "`weight'" == "iweight" {
				local dftot = r(sum_w) - 1
			}
			else {
				local dftot = r(N) - 1
			}
			scalar `sstot' = r(Var)*`dftot'
		}
		scalar `sstot' = `sstot'*`gm2'	/* Undo lnlsq() */
/*
		Perform reg using final residuals (last ssr is still valid),
		calc ANOVA table and display results.
*/
		qui reg `RESID' `Jnames' `wtexp' if `touse',	/*
			*/ `robust' cluster(`cluster') `hc2' `hc3' nocons
		local dfm = e(df_m)-`const'
		tempname bvec VCE
		matrix `bvec' = get(_b)
		matrix `VCE' = get(VCE)
* matrix `VCE' = (e(df_r) / (e(df_r)+1)) * `VCE'

		matrix rownames `VCE' = `params'
		matrix colnames `VCE' = `params'
		matrix colnames `bvec' = `params'
		tempname Fstat
		if "`robust'`cluster'`hc2'`hc3'" != "" {
			/* Do a robust Wald test.  The prev. reg gave us
			   the cov matrix, and the estimated betas from
			   that reg are (virtually) zero.  Thus, we can
			   test if those reg coeffs. equal the NL betas */
			local j 1
			while `j' <= `np' {   
				if `j' != `consj' {
					loc jn : word `j' of `Jnames'
					local parn : word `j' of `params'
					local parmcol = /*
						*/ colnumb(`parmvec',"`parn'")
					qui test `jn' = /*
						*/ `=`parmvec'[1, `parmcol']',/*
						*/ not accum
				}
				local j = `j'+1
			}
			test
			sca `Fstat' = r(F)
		}
		else {
			sca `Fstat' = ( (`sstot'-`ssr') / `dfm' ) / /*
				*/    ( `ssr' / (`dftot' - `dfm') )
		}
		
		local k 1
		foreach parm of local params {
			local parmcol = colnumb(`parmvec', "`parm'")
			matrix `bvec'[1,`k'] = `parmvec'[1,`parmcol']
			local k=`k'+1
		}
		tempname msr
		local tdf = `dftot' - `dfm'
		scalar `msr' = `ssr' / `tdf'
		if "`cluster'" != "" {	
			local tdf = e(N_clust) - 1
			local dftot = e(N_clust)
		}
		ereturn post `bvec' `VCE', /*
			*/ obs(`nobs') dof(`tdf') dep(`yname') esamp(`touse')
		

		ereturn scalar df_m = `dfm'
		ereturn scalar df_r = `tdf'
		ereturn scalar df_t = `dftot'
		ereturn scalar mss  = `sstot'-`ssr'
		ereturn scalar mms  = e(mss)/e(df_m)
		ereturn scalar msr  = `msr'
		ereturn scalar rmse = sqrt(e(msr))
		ereturn scalar F    = `Fstat'
		ereturn scalar r2   = 1-`ssr'/`sstot'
		ereturn scalar r2_a = 1-(1-e(r2))*`dftot'/e(df_r)
/*
		calc -2(log likelihood) allowing for possible transformation
		(formula may need rechecking, esp when weights present)
*/
		ereturn scalar dev = `nobs'*(1+log(2*_pi*`ssr'/`nobs')-`mnlnwt')
	} 	/* capture */
	if _rc { 
		local rc=_rc
		capture _est unhold `dbeta'
		error `rc'
	} 
	if "`leave'"~="" {
		tokenize `params'
		local j 1
		while "``j''"~="" {
			rename `J`j'' ``j''
			local j = `j' + 1
		}
	}
	ereturn matrix init   = `initvec'
	ereturn scalar converge = `cnvrge'
	ereturn scalar N      =  `nobs'
	ereturn scalar rss    =   `ssr'
	ereturn scalar df_t   = `dftot'
	ereturn scalar tss    = `sstot'
	ereturn local  depvar   "`yname'"
	if "`consj'" != "" {
		ereturn scalar cj = `consj'
	}
	else {
		ereturn scalar cj = 0
	}
	ereturn local  params   "`params'"
	ereturn local  sexp "`origexp'"
	ereturn scalar gm_2   = `gm2'
	ereturn scalar k      = `np'
	ereturn local  options  "`options'"
	ereturn local  title    "`title'"
	ereturn local  title_2   "`title2'"
	ereturn scalar ic = `its'
	ereturn local type `type'
	if "`type'" == "3" {
		ereturn local rhs "`t3rhs'"
		ereturn local funcprog "nl`expr'"
	}
	if `"`robust'`cluster'"' != "" {
		ereturn local vcetype "Robust"
	}
	if `"`hc2'"' != "" {
		ereturn local vcetype "Robust HC2"
	}
	if `"`hc3'"' != "" {
		ereturn local vcetype "Robust HC3"
	}
	if `"`cluster'"' != "" {
		ereturn local clustvar "`cluster'"
		ereturn scalar N_clust = `dftot'
	}
	ereturn scalar log_t = `logtsf'
	if `logtsf' == 1 {
		ereturn scalar lnlsq  = `lnlsq'
	}
	if "`weight'`exp'" != "" {
		ereturn local wtype "`weight'"
		ereturn local wexp  "`exp'"
	}
	ereturn local predict nl_p
	ereturn local cmd "nl"		/* must be last	*/

	NLout `level'
end

program define NLout

	args level

	local robust
	local cluster
	if substr("`e(vcetype)'", 1, 6) == "Robust" {
		local robust "robust"
	}
	if "`e(clustvar)'" != "" {
		local cluster "cluster"
	}
	#delimit ;
	di ;
	if `"`robust'"' != "" | `"`cluster'"' != "" {;
		di in gr "Nonlinear regression with robust standard errors" _c;
	};
	else {;
		di in gr "      Source {c |}       SS       df       MS" _c;
	};
	di in gr _col(54) "Number of obs = " in ye %9.0f e(N) ;
	if `"`robust'"' == "" & `"`cluster'"' == "" {;
		di in gr "{hline 13}{c +}{hline 30}" _c;
	};
	di in gr _col(54) "F(" %3.0f e(df_m) "," %6.0f e(df_r) 
		") = " in ye %9.2f e(F) ;
	if `"`robust'"' == "" & `"`cluster'"' == "" {;
		di in gr "       Model {c |} " in ye %11.0g e(mss) 
			" " %5.0f e(df_m) " " %11.0g e(mms) _c;
	};
	di in gr _col(54) "Prob > F      = " 
		in ye %9.4f Ftail(e(df_m),e(df_r),e(F)) ;
	if `"`robust'"' == "" & `"`cluster'"' == "" {;
		di in gr "    Residual {c |} " in ye %11.0g e(rss) " " 
			%5.0f e(df_r) " " %11.0g e(msr) _c;
	};
	di in gr _col(54) "R-squared     = " in ye %9.4f e(r2)    ;
	if `"`robust'"' == "" & `"`cluster'"' == "" {;
		di in gr "{hline 13}{c +}{hline 30}" _c;
		di in gr _col(54) "Adj R-squared = " in ye %9.4f e(r2_a) ;
	};
	if `"`robust'"' == "" & `"`cluster'"' == "" {;
		di in gr "       Total {c |} " in ye %11.0g e(tss) 
			" " %5.0f e(df_t) " " %11.0g e(tss)/e(df_t) _c;
	};
	di in gr _col(54) "Root MSE      = " in ye %9.0g e(rmse) ;
	di in gr _col(54) "Res. dev.     = " in ye %9.0g e(dev) ;
		#delimit cr
/*
	Display coefficients, standard errors and ci's
*/
	tempname invt
	scalar `invt' = invttail(e(df_r), (1-`level'/100)/2) 

	di in gr "`e(title)'" 
	if "`e(title_2)'" != "" { 
		di "`e(title_2)'"
	}
	ereturn di, level(`level')

	if e(cj) ~= 0 {
		local word : word `e(cj)' of `e(params)'
		di in gr /*
	*/ "* Parameter `word' taken as constant term in model & ANOVA table"
		}
	di in gr /*
*/ " (SEs, P values, CIs, and correlations are asymptotic approximations)"
	if e(converge) ~= 1 {
		error 430
	}
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -