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

📄 scatter_og.class

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 CLASS
字号:
/*                                 scatter

	Base class for data views that have an x and y variable
*/
*! version 1.0.0  30jul2002

version 8

class {
	type	= .yxtype.new, style(scatter)
	style	= .seriesstyle.new

	draw_view       = .yesno.new, style(yes)
	fill_if_undrawn = .yesno.new, style(no)

	add_plotregion	= .yesno.new, style(no)
	conf_interval	= .yesno.new, style(no)
	ci_of_expected	= .yesno.new, style(yes)
	addview		= .xyaddviews.new, style(none)

	/* class serset serset			-- declared dynamically */
	double xvar				/* x variable id	*/
	double yvar				/* y variable id	*/
	double yvar2				/* second y var id	*/
	double wvar				/* weight variable id	*/

	/* class plotregion plotregion		-- may be declared */

} , inherit(subview)


/* -------------------------------------------------------------------------*/
program define new

	syntax varlist(min=2 max=2 numeric) [if] [in] [aw fw pw] 	/*
		*/ [ , SORT(varlist) * ]
							/* matched below */
	.addview.setstyle , style(none)

	tokenize `varlist'
	.set , yvar(`1') xvar(`2') `options'
end


program define set

	syntax [,  Serset(string) Xvariable(string) 			/*
		*/ Yvariable(string) Wvariable(string)			/*
		*/ STyle(string) Type(string) PLOTRegion(string) ]

	if "`serset'"  != "" { 
		if "`.Local.serset.isa'" == "" {
			.Declare serset = .`serset'.ref
		}
		else {
			.serset.ref = .`serset'.ref 
		}
	}
	if "`plotregion'"  != "" { 
		if "`.Local.plotregion.isa'" == "" {
			.Declare plotregion = .`plotregion'.ref
		}
		else {
			.plotregion.ref = .`plotregion'.ref 
		}
	}

	foreach v in xvariable yvariable wvariable {
		if "``v''" != "" {
			local att = substr("`v'", 1, 4)
			capture confirm integer number ``v''
			if _rc {
				local varid = `.serset.seriesof ``v'''
				if 0`varid' {
					.`att' = `varid'
				}
				else {
				    di in white `"``v'' not found in serset""'
				}
			}
			else	.`att' = ``v''
		}
	}

	if `"`style'"' != `""' {
		.style.setstyle , style(`style')
	}

	if "`type'" != "" { 
		.type.setstyle, style(`type')
	}
end


/* -------------------------------------------------------------------------*/
/*	Pre parsing for creating sersets
*/

program preparse , sclass

	syntax varlist(min=2 max=2 numeric) [if] [in] [aw fw pw] 	/*
		*/ [ , PLotregion(string) SERset(string) SORT(varlist) ]

	sreturn local varlist `varlist'
	sreturn local if `if'
	sreturn local in `in'
	sreturn local plotregion `plotregion'
	sreturn local serset `serset'
	sreturn local sort `sort'

end


/* -------------------------------------------------------------------------*/
/*
	Returns minimum and maximum sizes
*/

program ranges , rclass

	capture return scalar xmin = `.serset.sers[`.xvar'].min'
	capture return scalar xmax = `.serset.sers[`.xvar'].max'
	capture return scalar ymin = `.serset.sers[`.yvar'].min'
	capture return scalar ymax = `.serset.sers[`.yvar'].max'
	if 0`.serset.sers[`.yvar2'].min' < 0`.serset.sers[`.yvar'].min' {
		class exit = `.serset.sers[`.yvar2'].min'
	}
	if 0`.serset.sers[`.yvar2'].max' < 0`.serset.sers[`.yvar'].max' {
		class exit = `.serset.sers[`.yvar2'].max'
	}
end


/* -------------------------------------------------------------------------*/
/*
	Assumes an appropriate scale has already been set.
*/
program define draw

	if ! `.draw_view.istrue' { 
		exit						/* EXIT */
	}

	if substr("`.type.stylename'",1,5) == "range" {
		._draw_range
		exit
	}

	if "`.type.stylename'" == "bar" {	/* handle x-y bars	*/
		._draw_bar
		exit
	}

						/* draw lines if requested */
	if "`.type.stylename'" == "connected" | "`.type.stylename'" == "line" {
		.style.line.setgdifull
		gdi scatterline `.serset.id' `.xvar' `.yvar'
		gdi update
	}

	if "`.type.stylename'" == "line" { 
		exit 
	}

						/* draw points if requested */
	if "`.style.marker.backsymbol.setting'" != "none" {
		.style.marker.setgdifull,  backing
		gdi scatter `.serset.id' `.xvar' `.yvar'
	}

	if "`.style.marker.symbol.setting'" != "none" {
		.style.marker.setgdifull
		gdi scatter `.serset.id' `.xvar' `.yvar'
	}
end


/* -------------------------------------------------------------------------*/
program define _draw_range

	.style.area.setgdifull

	.serset.set					/* set the id */

	forvalues j = 1/`:serset N' {
		local x = serset(`.xvar', `j')
		gdi line `x' `=serset(`.yvar',`j')' `x' `=serset(`.yvar2',`j')'
	}

	if "`.type.stylename'" == "range" { 
		exit						/* EXIT */
	}

	local delta = (`.style.marker.size.gmval'/2) * `gdi(gbeta)'	///
		      / `gdi(xbeta)'

	forvalues j = 1/`:serset N' {
		local x  = serset(`.xvar', `j')
		local x1 = `x' - `delta'
		local x2 = `x' + `delta'

		local y = serset(`.yvar',`j')
		gdi line `x1' `y' `x2' `y'

		local y = serset(`.yvar2',`j')
		gdi line `x1' `y' `x2' `y'
	}
	
end

/* -------------------------------------------------------------------------*/
program define _draw_bar
	di in green "I don't know how to draw bars yet"
end


/* -------------------------------------------------------------------------*/
/* add an xyview based on the current setting of .addview.
   Relies on T_Name containing the full name of the xyview
*/

program _set_addview
	gettoken xytype options : 0 , parse(" ,")

	if "`xytype'" == "none" {
		exit
	}

	.addview.setstyle , style(none)			/* always none */

	if "`.plotregion.graphs[1].isa'" == "" {
		._last_xyandplotreg graph plotregion : $T_Name 	/* get names */
		if "`plotregion'" != "" & "`graph'" != "" {
			.set , plotregion(`plotregion') 
			.`plotregion'.set , graph(`graph')
		}
		else {
			di in white "graph or plotregion not defined for view"
			exit 198
		}
	}

	if 0`.add_plotregion.istrue' {
		local plotregion new
	}

	if "`.Local.serset.isa'" == "" {
	     di in white "cannot add view, view does not reference its serset"
	     exit
	}

	if "`xytype'" == "median_bands" | "`xytype'" == "splined_medians" {
		._run_derived `xytype' `options'
		exit						/* EXIT */
	}

	preserve					/* use the serset */
	.Local.serset.set
	drop _all
	serset use
							/* add view */
	._run_`xytype' `.serset.sers[`.xvar'].name' 			/*
		*/     `.serset.sers[`.yvar'].name' `options'
end


/* -------------------------------------------------------------------------*/
program define _last_xyandplotreg
	args xymac plregmac colon rest

	if "`0'" != "nogscope" {
		local name gscope
	}

	gettoken tok rest : rest , parse(" .") 
	while "`rest'" != "" {
		if 0`.`name'.isofclass xy_graph_g' {
			local graph `name'
		}
		if 0`.`name'.isofclass plotregion' {
			local plotregion `name'
		}
		if "`tok'" != "." {
			local name `name'.`tok'
		}
		gettoken tok rest : rest , parse(" .") 
	}
	local last `tok'			/* assumes no trailing .'s */

	c_local `xymac' `graph'
	c_local `plregmac' `plotregion'

end

/* -------------------------------------------------------------------------*/
program _run_derived
	gettoken xytype options : 0 , parse(" ,")

	if "`xytype'" == "median_bands" {
		local type median_bands
	}
	else	local type spline

	tempname derived
	.`derived' = .derived_serset.new , base(`.serset.objkey')	/*
		*/ type(`type')  x(`.xvar') y(`.yvar') `options'
	.`derived'.set
	.`derived'.sort 2

	.`.plotregion.graphs[1]'.addview ignored , c(l) s(i) 		   /*
		*/ name(median_bands) plotregion(`.plotregion.objkey')  /*
		*/ serset(`.`derived'.objkey') nolog
end

/* -------------------------------------------------------------------------*/
/* member programs to create new views
*/

program _run_regression_line
	gettoken x 0 : 0 , parse(" ,")
	gettoken y 0 : 0 , parse(" ,")

	syntax [ , POINTs(integer 300) ]

	qui regress `y' `x'

	summarize `x' , meanonly
	drop _all
	qui set obs `points'
	qui gen `x' = r(min) + (_n-1)*(r(max) - r(min)) / (`points' -1)

	._add_regression `x' `y'

end

program _run_quadratic_regression
	gettoken x 0 : 0 , parse(" ,")
	gettoken y 0 : 0 , parse(" ,")

	syntax [ , POINTs(integer 300) ]

	tempname x2
	gen double `x2' = `x'*`x'
	qui regress `y' `x' `x2'

	summarize `x' , meanonly
	drop _all
	qui set obs `points'
	qui gen `x' = r(min) + (_n-1)*(r(max) - r(min)) / (`points' - 1)
	qui gen double `x2' = `x'*`x'

	._add_regression `x' `y'
end

program _run_fractional_polynomial
	gettoken x options : 0       , parse(" ,")
	gettoken y options : options , parse(" ,")

	qui fracpoly regress `y' `x' `options'

	_add_regression `x' `y' fracpred
end

program define _add_regression
	args x y predict


	if "`predict'" == "" {
		local predict predict
	}

	tempname yhat
	qui `predict' `yhat'

	if `.conf_interval.isfalse' {
		.`.plotregion.graphs[1]'.addview `yhat' `x' , c(l) s(i)	/*
			*/ name(regression) sort(`x')			/*
			*/ plotregion(`.plotregion.objkey') nolog
		exit
	}

	if `.ci_of_expected.istrue' | "`predict'" == "fracpred" {
		local se_method stdp
	}
	else	local se_method stdf

	tempname se min max
	qui `predict' `se' , `se_method'
	qui gen `min' = `yhat' - invttail(e(df_r), ((100-c(level))/200)) * `se'
	qui gen `max' = `yhat' + invttail(e(df_r), ((100-c(level))/200)) * `se'

	local stynum = `.`.plotregion.graphs[1]'.next_default_series'
	local cistyle p`=`stynum'+1'
	.`.plotregion.graphs[1]'.addview `yhat' `min' `max' `x', 	/*
		*/ c(lll) s(iii) sort(`x') name(regress_ci) 		/*
		*/ plotregion(`.plotregion.objkey')  		/*
		*/ style(p`stynum' `cistyle' `cistyle') nolog
end


program _run_ksm_mean
	gettoken x options : 0       , parse(" ,")
	gettoken y options : options , parse(" ,")

	tempname yhat
	ksm `y' `x' , gen(`yhat') nograph , `options'

	.`.plotregion.graphs[1]'.addview `yhat' `x' , c(l) s(i) sort(`x')   /*
		*/ name(mean_smooth) plotregion(`.plotregion.objkey') nolog
end

program _run_ksm_line
	gettoken x options : 0       , parse(" ,")
	gettoken y options : options , parse(" ,")

	tempname yhat
	ksm `y' `x' , gen(`yhat') line nograph , `options'

	.`.plotregion.graphs[1]'.addview `yhat' `x' , c(l) s(i) sort(`x')   /*
		*/ name(line_smooth) plotregion(`.plotregion.objkey') nolog
end

program _run_ksm_lowess
	gettoken x options : 0       , parse(" ,")
	gettoken y options : options , parse(" ,")

	tempname yhat
	ksm `y' `x' , gen(`yhat') lowess nograph , `options'

	.`.plotregion.graphs[1]'.addview `yhat' `x' , c(l) s(i) sort(`x')   /*
		*/ name(lowess) plotregion(`.plotregion.objkey') nolog
end

/*  now uses _run_derived
program _run_median_bands
	args x y

	.`.plotregion.graphs[1]'.addview `y' `x' , c(m) s(i) sort(`x') 	/*
		*/ name(median_bands) plotregion(`.plotregion.objkey') nolog
end

program _run_splined_medians
	args x y

	.`.plotregion.graphs[1]'.addview `y' `x' , c(s) s(i) sort(`x') 	/*
		*/ name(splined_medians) plotregion(`plotregion') nolog
end
*/

⌨️ 快捷键说明

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