cusum_7.ado

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

ADO
114
字号
*! version 2.1.7  17sep2004
program define cusum_7, rclass sort
	version 6, missing

	syntax varlist(min=2 max=2 numeric) [if] [in] [, /*
		*/ YFit(varname) noGraph noCAlc GENerate(string) /*
		*/ Symbol(string) Connect(string) * ]
	local gen `"`generat'"'
	if "`gen'"!="" { confirm new var `gen' }
	marksample touse
	markout `touse' `yfit'

	tokenize `varlist'
	tempvar y x cusum
	quietly {
		gen `y' = `1' if `touse'
		gen `x' = `2' if `touse' 
		sum `x' if `touse'
		local obs = r(N)
                if `obs'<3 { exit 2001 }
		local jx = .00001*(r(max)-r(min))
/*
	To avoid ties and ensure a unique sort order for x,
	randomly jitter x by .00001 times its range using a fixed seed
	Answer: No, setting the seed screws up Monte Carlo experiments.
*/
		replace `x' = `x'+uniform()*`jx'
		sort `x'
		sum `y'
		local mean = r(mean)
		if r(min)<0 | r(max)>1 {
			di in red "Yvar has values outside range [0,1]"
			exit 459
		}
		if "`yfit'"!="" {
			gen `cusum' = sum(`yfit'-`y')
		}
		else 	gen `cusum' = sum(`mean'-`y')
		local cl : variable label `1'
		if `"`cl'"'=="" { local cl "`1'" }
		label var `cusum' `"Cusum (`cl')"'
                _crcslbl `x' `2'
	}
	if "`graph'"==""  {
		local symbol = cond("`symbol'"=="", ".", "`symbol'")
		local connect = cond("`connect'"=="", "l", "`connect'")
		gr7 `cusum' `x', s(`symbol') c(`connect') `options'
	}
	ret scalar N = `obs'
	ret scalar prop1 = `mean'
	global S_1 `obs'    /* double save in S_# and r() */
	global S_2 `mean'
	if "`calc'"==""  {
		/*
			P value for linear and quadratic cusums.
			Note that in log(cusum)-X*log(n), X is about pi/6.
		*/
		quietly {
			sum `cusum'
			local mcusl = max(-r(min), r(max))
			local lp = -abs(ln(`mean'/(1-`mean')))
			local mcusm = -1.0605-((`lp')^2)*(0.12684+0.010437*`lp')
			local mcuss = 0.3130+0.004261*`lp'
			local zl = (ln(`mcusl')-0.5236*log(`obs')-`mcusm') /*
			 */ /`mcuss'
			replace `y' = `cusum'-`cusum'[`obs'-_n]
			sum `y'
			local mcusq = max(-r(min), r(max))
			local mcusm = -1.1196-((`lp')^2)*(0.12093+0.009744*`lp')
			local mcuss = 0.3269+0.006547*`lp'
			local zq = (log(`mcusq')-0.5236*log(`obs')-`mcusm') /*
			 */ /`mcuss'
		}
		#delimit ;
		di in smcl in gr _n "Variable {c |}   Obs"
		 "{col 21}Pr(1)"
		 "{col 29}CusumL"
		 "{col 39}zL"
		 "{col 45}Pr>zL"
		 "{col 53}CusumQ"
		 "{col 63}zQ"
		 "{col 69}Pr>zQ" _n
		 "{hline 9}{c +}{hline 63}"
		;
		di in smcl in gr %8s abbrev("`1'",8) " {c |}"
		in ye
		 %6.0f `obs'
		 %9.4f `mean'
		 %9.2f `mcusl'
		 %8.3f `zl'
		 %7.3f normprob(-`zl')
		 %9.2f `mcusq'
		 %8.3f `zq'
		 %7.3f  normprob(-`zq') ;
		#delimit cr
		ret scalar cusuml = `mcusl'
		ret scalar zl = `zl'
		ret scalar P_zl = normprob(-`zl')
		ret scalar cusumq = `mcusq'
		ret scalar zq = `zq'
		ret scalar P_zq = normprob(-`zq')
		global S_3 `mcusl'        /* double save in S_# and r() */
		global S_4 `zl'
		global S_5 `return(P_zl)'
		global S_6 `mcusq'
		global S_7 `zq'
		global S_8 `return(P_zq)'
	}
	if "`gen'"!="" { 
		qui replace `cusum' = . if !`touse'
		rename `cusum' `gen' 
	}
end

⌨️ 快捷键说明

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