regre_p2.ado

来自「是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到」· ADO 代码 · 共 167 行

ADO
167
字号
*! version 1.0.5  16jul2001
*! (subroutine to regres_p, tobit_p, heckma_p)
program define regre_p2 
	version 6
	args       vtyp         /* variable type for prediction
		*/ varn		/* new variable name
		*/ touse        /* touse variable
		*/ offset       /* "noffset" or "" 
		*/ p 		/* Pr() option contents
		*/ e 		/* e()  option contents
		*/ ystar	/* ystar() option contents
		*/ rmse 	/* RMSE or sigma for equation 
		*/ newcons	/* "constant(varname)" or "" */

	if (`"`p'"'!="") + (`"`e'"'!="") + (`"`ystar'"'!="") > 1 { 
		error 198
	}

	local 0 `"`p'`e'`ystar'"'
	gettoken lb 0    : 0, parse(",")
	gettoken comma 0 : 0, parse(",")
	gettoken ub 0    : 0, parse(",")

	if trim(`"`0'"') != "" | trim(`"`comma'"')!="," { 
		error 198
	}

	Fix `lb'
	local lb `s(res)'
	local lbc `s(class)'

	Fix `ub'
	local ub `s(res)'
	local ubc `s(class)'

	sret clear

	/*
		class contains "missing" or <nothing>.
		The title we want to set is 

				ub class
		lb class	"missing"	<nothing>
		-----------------------------------------
		"missing"	""		"y<ub"
		<nothing>	"y>lb"		"lb<y<ub"
	*/

	DepName depname
	if "`lbc'"=="missing" & "`ubc'"=="" {
		local ttl "`depname'<`ub'"
	}
	else if "`lbc'"=="" & "`ubc'"=="missing" {
		local ttl "`depname'>`lb'"
	}
	else if "`lbc'"=="" & "`ubc'"=="" {
		local ttl "`lb'<`depname'<`ub'"
	}

	tempvar yhat new
	qui _predict double `yhat' if `touse', xb `offset' `newcons' 

	if `"`p'"' != "" { 
		CalcP `new' `yhat' "`rmse'" `touse' `lb' `ub' "`ttl'"
	}
	else if `"`e'"' != "" {
		CalcE `new' `yhat' "`rmse'" `touse' `lb' `ub' "`ttl'"
	}
	else 	CalcY `new' `yhat' "`rmse'" `touse' `lb' `ub' "`ttl'"

	local ttl : var label `new'
	gen `vtyp' `varn' = `new' if `touse'
	label var `varn' `"`ttl'"'
end

	
program define CalcP
	args P yhat s touse lb ub ttl
	quietly {
		gen double `P' = 1 if `touse' & `lb'==. & `ub'==.
		replace `P' = normprob(-(`lb'-`yhat')/`s') /*
			*/ if `touse' & `lb'!=. & `ub'==.
		replace `P' = normprob((`ub'-`yhat')/`s') /*
			*/ if `touse' & `lb'==. & `ub'!=. 
		replace `P' = 1 - normprob(-(`ub'-`yhat')/`s') - /*
			*/ normprob((`lb'-`yhat')/`s') /*
			*/ if `touse' & `lb'!=. & `ub'!=. 
	}
	label var `P' `"Pr(`ttl')"'
end

program define CalcE
	args E yhat s touse lb ub ttl
	local L "((`lb'-`yhat')/`s')"
	local U "((`ub'-`yhat')/`s')"
	quietly {
		gen double `E' = `yhat' if `touse' & `lb'==. & `ub'==.
		replace `E' = `yhat' + `s'*normd(`L')/normprob(-`L') /*
			*/ if `touse' & `lb'!=. & `ub'==.

		replace `E' = `yhat' - `s'*normd(`U')/normprob(`U') /*
			*/ if `touse' & `lb'==. & `ub'!=.

		replace `E' = `yhat' - /*
			*/ `s'*(normd(`U')-normd(`L')) / /*
			*/		(normprob(`U')-normprob(`L')) /*
			*/ if `touse' & `lb'!=. & `ub'!=.
	}
	DepName depname
	if "`ttl'"=="" {
		label var `E' `"E(`depname')"'
	}
	else	label var `E' `"E(`depname'|`ttl')"'
end

program define CalcY
	args Y yhat s touse lb ub ttl

	tempvar E p p2
	CalcE `E'  `yhat' `s' `touse' `lb' `ub'  ""
	CalcP `p'  `yhat' `s' `touse' `lb' `ub'  ""
	CalcP `p2' `yhat' `s' `touse'   .  `lb'  ""

	quietly { 
		gen double `Y' = `E' if `touse' & `lb'==. & `ub'==. 
		replace `Y' = `p'*`E' + (1-`p')*`lb' /*
			*/ if `touse' & `lb'!=. & `ub'==.
		replace `Y' = `p'*`E' + (1-`p')*`ub' /*
			*/ if `touse' & `lb'==. & `ub'!=.
		replace `Y' = `p'*`E' + `p2'*`lb' + (1-`p'-`p2')*`ub' /*
			*/ if `touse' & `lb'!=. & `ub'!=. 
	}
	DepName depname
	if "`ttl'"=="" {
		label var `Y' `"E(`depname')"'
	}
	else	label var `Y' `"E(`depname'*|`ttl')"'
end
	
program define Fix, sclass
	sret clear
	capture confirm number `0'
	if _rc==0 { 
		sret local res `0'
		exit
	}
	if trim(`"`0'"')=="." {
		sret local res "."
		sret local class missing
		exit
	}
	syntax varname
	sret local res `varlist'
end

program define DepName
	args name          /* name is lmacname to store the depvar name */

	local depname `e(depvar)'
	gettoken depname : depname
	if "`e(cmd)'" == "intreg" { local depname "y" }
	if "`e(cmd)'" == "svyintreg" { local depname "y" }

	c_local `name' `depname'
end

⌨️ 快捷键说明

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