******************************************************************************** * RDDENSITY STATA PACKAGE -- rdbwdensity * Authors: Matias D. Cattaneo, Michael Jansson, Xinwei Ma ******************************************************************************** *!version 2.3 2021-02-28 capture program drop rdbwdensity program define rdbwdensity, eclass syntax varlist(max=1) [if] [in] [, /// C(real 0) /// P(integer 2) /// KERnel(string) /// FITselect(string) /// VCE(string) /// noREGularize /// NLOCalmin (integer -1) /// NUNIquemin (integer -1) /// noMASSpoints /// ] marksample touse if ("`kernel'"=="") local kernel = "triangular" local kernel = lower("`kernel'") if ("`fitselect'"=="") local fitselect = "unrestricted" local fitselect = lower("`fitselect'") if ("`vce'"=="") local vce = "jackknife" local vce = lower("`vce'") preserve qui keep if `touse' local x "`varlist'" qui drop if `x'==. qui su `x' local x_min = r(min) local x_max = r(max) local N = r(N) qui su `x' if `x'<`c' local xl_min = r(min) local xl_max = r(max) local Nl = r(N) qui su `x' if `x'>=`c' local xr_min = r(min) local xr_max = r(max) local Nr = r(N) **************************************************************************** *** BEGIN ERROR HANDLING *************************************************** if (`c'<=`x_min' | `c'>=`x_max'){ di "{err}{cmd:c()} should be set within the range of `x'." exit 125 } if (`Nl'<10 | `Nr'<10){ di "{err}Not enough observations to perform calculations." exit 2001 } if (`p'!=1 & `p'!=2 & `p'!=3 & `p'!=4 & `p'!=5 & `p'!=6 & `p'!=7){ di "{err}{cmd:p()} should be an integer value less or equal than 7." exit 125 } if ("`kernel'"!="uniform" & "`kernel'"!="triangular" & "`kernel'"!="epanechnikov"){ di "{err}{cmd:kernel()} incorrectly specified." exit 7 } if ("`fitselect'"!="restricted" & "`fitselect'"!="unrestricted"){ di "{err}{cmd:fitselect()} incorrectly specified." exit 7 } if ("`vce'"!="jackknife" & "`vce'"!="plugin"){ di "{err}{cmd:vce()} incorrectly specified." exit 7 } if ("`regularize'" == "") { local regularize = 1 } else { local regularize = 0 } if ("`masspoints'" == "") { local masspoints = 1 } else { local masspoints = 0 } if (`nlocalmin' < 0) { local nlocalmin = 20 + `p' + 1 } if (`nuniquemin' < 0) { local nuniquemin = 20 + `p' + 1 } *** END ERROR HANDLING ***************************************************** **************************************************************************** qui replace `x' = `x'-`c' qui sort `x' **************************************************************************** *** BEGIN MATA ESTIMATION ************************************************** mata{ *display("got here!") X = st_data(.,("`x'"), 0); XUnique = rddensity_unique(X) freqUnique = XUnique[., 2] indexUnique = XUnique[., 4] XUnique = XUnique[., 1] NUnique = length(XUnique) NlUnique = sum(XUnique :< 0) NrUnique = sum(XUnique :>= 0) masspoints_flag = sum(freqUnique :!= 1) > 0 & `masspoints' st_numscalar("masspoints_flag", masspoints_flag) **************************************************************************** ** Kernel Constants **************************************************************************** if ("`fitselect'"=="unrestricted") { if ("`kernel'"=="uniform") { Bsq_p=(0.24999999999999966693,0.01000000000000004878,0.00014172335600917503246,0.00000098418997230168060921,0.0000000039855627124297920874,0.000000000010481435883708594505,0.000000000000019251413808407223054,0.000000000000000026041096146069883723) } else if ("`kernel'"=="triangular") { Bsq_p=(0.15999999999999992006,0.0051020408163267062795,0.00006298815822632821272,0.00000039855626977185269366,0.0000000015093255191922687787,0.0000000000037733140674455142929,0.0000000000000066614606382066531783,0.00000000000000000871923521295076001) } else if ("`kernel'"=="epanechnikov") { Bsq_p=(0.17728531855955703689,0.0059878117913833833058,0.000076742107318398123782,0.00000049855793475223530487,0.0000000019253854002580922299,0.0000000000048868584327480008077,0.0000000000000087317551910484345913,0.000000000000000011557177676615075784) } } else if ("`fitselect'"=="restricted") { if ("`kernel'"=="uniform") { Splus=(0,0,0,0,0,0,0,0,0,0,0,0\0,0.1666666667,0.25,0.125,0.1,0.08333333333,0.07142857143,0.0625,0.05555555556,0.05,0.04545454545,0.04166666667\0,0.25,0.5,0.1666666667,0.125,0.1,0.08333333333,0.07142857143,0.0625,0.05555555556,0.05,0.04545454545\0,0.125,0.1666666667,0.1,0.08333333333,0.07142857143,0.0625,0.05555555556,0.05,0.04545454545,0.04166666667,0.03846153846\0,0.1,0.125,0.08333333333,0.07142857143,0.0625,0.05555555556,0.05,0.04545454545,0.04166666667,0.03846153846,0.03571428571\0,0.08333333333,0.1,0.07142857143,0.0625,0.05555555556,0.05,0.04545454545,0.04166666667,0.03846153846,0.03571428571,0.03333333333\0,0.07142857143,0.08333333333,0.0625,0.05555555556,0.05,0.04545454545,0.04166666667,0.03846153846,0.03571428571,0.03333333333,0.03125\0,0.0625,0.07142857143,0.05555555556,0.05,0.04545454545,0.04166666667,0.03846153846,0.03571428571,0.03333333333,0.03125,0.02941176471\0,0.05555555556,0.0625,0.05,0.04545454545,0.04166666667,0.03846153846,0.03571428571,0.03333333333,0.03125,0.02941176471,0.02777777778\0,0.05,0.05555555556,0.04545454545,0.04166666667,0.03846153846,0.03571428571,0.03333333333,0.03125,0.02941176471,0.02777777778,0.02631578947\0,0.04545454545,0.05,0.04166666667,0.03846153846,0.03571428571,0.03333333333,0.03125,0.02941176471,0.02777777778,0.02631578947,0.025\0,0.04166666667,0.04545454545,0.03846153846,0.03571428571,0.03333333333,0.03125,0.02941176471,0.02777777778,0.02631578947,0.025,0.02380952381) Gplus=(0,0,0,0,0,0,0,0,0,0,0,0\0,0.03333333333,0.05208333333,0.02430555556,0.01904761905,0.015625,0.01322751323,0.01145833333,0.0101010101,0.009027777778,0.008158508159,0.00744047619\0,0.05208333333,0.08333333333,0.0375,0.02916666667,0.02380952381,0.02008928571,0.01736111111,0.01527777778,0.01363636364,0.01231060606,0.01121794872\0,0.02430555556,0.0375,0.01785714286,0.0140625,0.01157407407,0.009821428571,0.008522727273,0.007523148148,0.006730769231,0.006087662338,0.005555555556\0,0.01904761905,0.02916666667,0.0140625,0.01111111111,0.009166666667,0.007792207792,0.006770833333,0.005982905983,0.005357142857,0.004848484848,0.004427083333\0,0.015625,0.02380952381,0.01157407407,0.009166666667,0.007575757576,0.006448412698,0.005608974359,0.00496031746,0.004444444444,0.004024621212,0.003676470588\0,0.01322751323,0.02008928571,0.009821428571,0.007792207792,0.006448412698,0.005494505495,0.004783163265,0.004232804233,0.003794642857,0.003437738732,0.003141534392\0,0.01145833333,0.01736111111,0.008522727273,0.006770833333,0.005608974359,0.004783163265,0.004166666667,0.003689236111,0.003308823529,0.002998737374,0.00274122807\0,0.0101010101,0.01527777778,0.007523148148,0.005982905983,0.00496031746,0.004232804233,0.003689236111,0.003267973856,0.002932098765,0.002658160553,0.002430555556\0,0.009027777778,0.01363636364,0.006730769231,0.005357142857,0.004444444444,0.003794642857,0.003308823529,0.002932098765,0.002631578947,0.002386363636,0.002182539683\0,0.008158508159,0.01231060606,0.006087662338,0.004848484848,0.004024621212,0.003437738732,0.002998737374,0.002658160553,0.002386363636,0.002164502165,0.001980027548\0,0.00744047619,0.01121794872,0.005555555556,0.004427083333,0.003676470588,0.003141534392,0.00274122807,0.002430555556,0.002182539683,0.001980027548,0.001811594203) } else if ("`kernel'"=="triangular") { Splus=(0,0,0,0,0,0,0,0,0,0,0,0\0,0.08333333333,0.1666666667,0.05,0.03333333333,0.02380952381,0.01785714286,0.01388888889,0.01111111111,0.009090909091,0.007575757576,0.00641025641\0,0.1666666667,0.5,0.08333333333,0.05,0.03333333333,0.02380952381,0.01785714286,0.01388888889,0.01111111111,0.009090909091,0.007575757576\0,0.05,0.08333333333,0.03333333333,0.02380952381,0.01785714286,0.01388888889,0.01111111111,0.009090909091,0.007575757576,0.00641025641,0.005494505495\0,0.03333333333,0.05,0.02380952381,0.01785714286,0.01388888889,0.01111111111,0.009090909091,0.007575757576,0.00641025641,0.005494505495,0.004761904762\0,0.02380952381,0.03333333333,0.01785714286,0.01388888889,0.01111111111,0.009090909091,0.007575757576,0.00641025641,0.005494505495,0.004761904762,0.004166666667\0,0.01785714286,0.02380952381,0.01388888889,0.01111111111,0.009090909091,0.007575757576,0.00641025641,0.005494505495,0.004761904762,0.004166666667,0.003676470588\0,0.01388888889,0.01785714286,0.01111111111,0.009090909091,0.007575757576,0.00641025641,0.005494505495,0.004761904762,0.004166666667,0.003676470588,0.003267973856\0,0.01111111111,0.01388888889,0.009090909091,0.007575757576,0.00641025641,0.005494505495,0.004761904762,0.004166666667,0.003676470588,0.003267973856,0.002923976608\0,0.009090909091,0.01111111111,0.007575757576,0.00641025641,0.005494505495,0.004761904762,0.004166666667,0.003676470588,0.003267973856,0.002923976608,0.002631578947\0,0.007575757576,0.009090909091,0.00641025641,0.005494505495,0.004761904762,0.004166666667,0.003676470588,0.003267973856,0.002923976608,0.002631578947,0.002380952381\0,0.00641025641,0.007575757576,0.005494505495,0.004761904762,0.004166666667,0.003676470588,0.003267973856,0.002923976608,0.002631578947,0.002380952381,0.002164502165) Gplus=(0,0,0,0,0,0,0,0,0,0,0,0\0,0.01031746032,0.02222222222,0.005853174603,0.003736772487,0.002579365079,0.001881914382,0.001430976431,0.001123413623,0.0009046509047,0.0007437007437,0.0006219474969\0,0.02222222222,0.05,0.0123015873,0.007738095238,0.005291005291,0.003835978836,0.002904040404,0.002272727273,0.001825951826,0.001498501499,0.001251526252\0,0.005853174603,0.0123015873,0.003373015873,0.002175925926,0.001512746513,0.001109307359,0.0008466070966,0.0006664631665,0.0005377955378,0.0004428210678,0.0003707893414\0,0.003736772487,0.007738095238,0.002175925926,0.001414141414,0.0009884559885,0.0007277444777,0.0005570818071,0.0004395604396,0.0003553391053,0.0002930035651,0.000245621753\0,0.002579365079,0.005291005291,0.001512746513,0.0009884559885,0.0006937506938,0.000512384441,0.0003931914646,0.0003108465608,0.0002516764281,0.0002077851343,0.0001743612425\0,0.001881914382,0.003835978836,0.001109307359,0.0007277444777,0.000512384441,0.0003793825222,0.0002917139078,0.0002309951758,0.0001872718784,0.000154780147,0.0001299991432\0,0.001430976431,0.002904040404,0.0008466070966,0.0005570818071,0.0003931914646,0.0002917139078,0.0002246732026,0.0001781499637,0.0001445917726,0.0001196172249,0.0001005451663\0,0.001123413623,0.002272727273,0.0006664631665,0.0004395604396,0.0003108465608,0.0002309951758,0.0001781499637,0.0001414210909,0.0001148916061,9.512417407e-05,8.001258001e-05\0,0.0009046509047,0.001825951826,0.0005377955378,0.0003553391053,0.0002516764281,0.0001872718784,0.0001445917726,0.0001148916061,9.341535657e-05,7.739735012e-05,6.514127067e-05\0,0.0007437007437,0.001498501499,0.0004428210678,0.0002930035651,0.0002077851343,0.000154780147,0.0001196172249,9.512417407e-05,7.739735012e-05,6.416508393e-05,5.403303328e-05\0,0.0006219474969,0.001251526252,0.0003707893414,0.000245621753,0.0001743612425,0.0001299991432,0.0001005451663,8.001258001e-05,6.514127067e-05,5.403303328e-05,4.552211074e-05) } else if ("`kernel'"=="epanechnikov") { Splus=(0,0,0,0,0,0,0,0,0,0,0,0\0,0.1,0.1875,0.0625,0.04285714286,0.03125,0.02380952381,0.01875,0.01515151515,0.0125,0.01048951049,0.008928571429\0,0.1875,0.5,0.1,0.0625,0.04285714286,0.03125,0.02380952381,0.01875,0.01515151515,0.0125,0.01048951049\0,0.0625,0.1,0.04285714286,0.03125,0.02380952381,0.01875,0.01515151515,0.0125,0.01048951049,0.008928571429,0.007692307692\0,0.04285714286,0.0625,0.03125,0.02380952381,0.01875,0.01515151515,0.0125,0.01048951049,0.008928571429,0.007692307692,0.006696428571\0,0.03125,0.04285714286,0.02380952381,0.01875,0.01515151515,0.0125,0.01048951049,0.008928571429,0.007692307692,0.006696428571,0.005882352941\0,0.02380952381,0.03125,0.01875,0.01515151515,0.0125,0.01048951049,0.008928571429,0.007692307692,0.006696428571,0.005882352941,0.005208333333\0,0.01875,0.02380952381,0.01515151515,0.0125,0.01048951049,0.008928571429,0.007692307692,0.006696428571,0.005882352941,0.005208333333,0.004643962848\0,0.01515151515,0.01875,0.0125,0.01048951049,0.008928571429,0.007692307692,0.006696428571,0.005882352941,0.005208333333,0.004643962848,0.004166666667\0,0.0125,0.01515151515,0.01048951049,0.008928571429,0.007692307692,0.006696428571,0.005882352941,0.005208333333,0.004643962848,0.004166666667,0.003759398496\0,0.01048951049,0.0125,0.008928571429,0.007692307692,0.006696428571,0.005882352941,0.005208333333,0.004643962848,0.004166666667,0.003759398496,0.003409090909\0,0.008928571429,0.01048951049,0.007692307692,0.006696428571,0.005882352941,0.005208333333,0.004643962848,0.004166666667,0.003759398496,0.003409090909,0.003105590062) Gplus=(0,0,0,0,0,0,0,0,0,0,0,0\0,0.01428571429,0.028515625,0.008515625,0.005627705628,0.003984375,0.002963702964,0.002287946429,0.001818181818,0.001478794643,0.001225832991,0.001032366071\0,0.028515625,0.05892857143,0.01666666667,0.01088169643,0.007643398268,0.005654761905,0.004348776224,0.00344629329,0.002797202797,0.002315067745,0.001947317388\0,0.008515625,0.01666666667,0.005140692641,0.003426339286,0.002440268065,0.001822916667,0.001411713287,0.001124526515,0.0009162895928,0.0007606325966,0.0006413091552\0,0.005627705628,0.01088169643,0.003426339286,0.002297702298,0.001643813776,0.001232101232,0.0009566326531,0.0007635501753,0.000623139881,0.0005179340783,0.0004371279762\0,0.003984375,0.007643398268,0.002440268065,0.001643813776,0.00118006993,0.0008868781888,0.0006900452489,0.0005516943994,0.0004508513932,0.0003751456876,0.000316903077\0,0.002963702964,0.005654761905,0.001822916667,0.001232101232,0.0008868781888,0.0006679594915,0.0005206118906,0.0004168174447,0.0003410218254,0.0002840296958,0.0002401244589\0,0.002287946429,0.004348776224,0.001411713287,0.0009566326531,0.0006900452489,0.0005206118906,0.0004063467492,0.0003257181187,0.0002667514374,0.0002223557692,0.0001881158642\0,0.001818181818,0.00344629329,0.001124526515,0.0007635501753,0.0005516943994,0.0004168174447,0.0003257181187,0.0002613485586,0.0002142160239,0.0001786923984,0.0001512691854\0,0.001478794643,0.002797202797,0.0009162895928,0.000623139881,0.0004508513932,0.0003410218254,0.0002667514374,0.0002142160239,0.0001757110167,0.0001466644151,0.0001242236025\0,0.001225832991,0.002315067745,0.0007606325966,0.0005179340783,0.0003751456876,0.0002840296958,0.0002223557692,0.0001786923984,0.0001466644151,0.0001224862094,0.0001037942608\0,0.001032366071,0.001947317388,0.0006413091552,0.0004371279762,0.000316903077,0.0002401244589,0.0001881158642,0.0001512691854,0.0001242236025,0.0001037942608,8.799171843e-05) } } Psi=(0,-1,0,0,0,0,0,0,0,0,0,0\-1,0,0,0,0,0,0,0,0,0,0,0\0,0,1,0,0,0,0,0,0,0,0,0\0,0,0,1,0,0,0,0,0,0,0,0\0,0,0,0,-1,0,0,0,0,0,0,0\0,0,0,0,0,1,0,0,0,0,0,0\0,0,0,0,0,0,-1,0,0,0,0,0\0,0,0,0,0,0,0,1,0,0,0,0\0,0,0,0,0,0,0,0,-1,0,0,0\0,0,0,0,0,0,0,0,0,1,0,0\0,0,0,0,0,0,0,0,0,0,-1,0\0,0,0,0,0,0,0,0,0,0,0,1) **************************************************************************** ** Select preliminary bandwidths. **************************************************************************** mu = mean(X); sd = (variance(X))^(1/2) fhatb = sd^(2*`p'+5) * normalden(-mu/sd) / (rddensity_h(-mu/sd,`p'+2) * normalden(-mu/sd))^2 C_b = (25884.444444494150957,3430865.4551236177795,845007948.04262602329,330631733667.03808594,187774809656037.3125,145729502641999264,146013502974449876992) b = ((2*`p'+1)/4 * fhatb * C_b[`p']/`N')^(1/(2*`p'+5)) fhatc = sd^(2*`p'+1) * normalden(-mu/sd) / (rddensity_h(-mu/sd,`p') * normalden(-mu/sd))^2 C_c = (4.8000000000000246914,548.57142857155463389,100800.00000020420703,29558225.458100609481,12896196859.612621307,7890871468221.609375,6467911284037581) c = (1/(2*`p') * fhatc * C_c[`p']/`N')^(1/(2*`p'+1)) // b is for higher-order derivative estimation // c is for density estimation if (`regularize') { // bandwidth should not exceed the range of data b = min( (b, max(abs(XUnique))) ) c = min( (c, max(abs(XUnique))) ) // nlocalmin check if (`nlocalmin' > 0) { b = max((b, sort(abs(X[selectindex(X :< 0)]), 1)[min((20+`p'+2+1, `Nl'))], (X[selectindex(X :>= 0)])[min((20+`p'+2+1, `Nr'))])) c = max((c, sort(abs(X[selectindex(X :< 0)]), 1)[min((20+`p'+ 1, `Nl'))], (X[selectindex(X :>= 0)])[min((20+`p' +1, `Nr'))])) } // nuniquemin check if (`nuniquemin' > 0) { b = max((b, sort(abs(XUnique[selectindex(XUnique :< 0)]), 1)[min((20+`p'+2+1, NlUnique))], (XUnique[selectindex(XUnique :>= 0)])[min((20+`p'+2+1, NrUnique))])) c = max((c, sort(abs(XUnique[selectindex(XUnique :< 0)]), 1)[min((20+`p' +1, NlUnique))], (XUnique[selectindex(XUnique :>= 0)])[min((20+`p' +1, NrUnique))])) } } st_numscalar("BW_b", b) st_numscalar("BW_c", c) **************************************************************************** ** Estimate main bandwidths. **************************************************************************** Xb = select(X, -b:<=X :& X:<=b) Nlb = sum(-b:<=X :& X:<0) Nrb = rows(Xb) - Nlb Xc = select(X, -c:<=X :& X:<=c) Nlc = sum(-c:<=X :& X:<0) Nrc = rows(Xc) - Nlc Ytemp = (0..(`N'-1))' :/ (`N'-1) if (`masspoints') { Ytemp = rddensity_rep(Ytemp[indexUnique], freqUnique) } Yb = select(Ytemp, -b:<=X :& X:<=b) Yc = select(Ytemp, -c:<=X :& X:<=c) h = J(4,3,0) fV_b = rddensity_fv(Yb, Xb, `Nl', `Nr', Nlb, Nrb, b, b, `p'+2 , `p'+1, "`kernel'", "`fitselect'", "`vce'", `masspoints') fV_c = rddensity_fv(Yc, Xc, `Nl', `Nr', Nlc, Nrc, c, c, `p' , 1 , "`kernel'", "`fitselect'", "`vce'", `masspoints') h[.,2] = `N'*c*fV_c[.,2] if ("`fitselect'"=="unrestricted") { h[1,3] = fV_b[1,3] * Bsq_p[`p']^(1/2) * (-1)^`p' * factorial(`p'+1) h[2,3] = fV_b[2,3] * Bsq_p[`p']^(1/2) * factorial(`p'+1) } else if ("`fitselect'"=="restricted") { Psi = Psi[1..`p'+2,1..`p'+2]; Gplus = Gplus[1..`p'+2,1..`p'+2]; Gminus = Psi*Gplus*Psi; vplus = Splus[1..`p'+2,`p'+3]; vminus = Psi*vplus; Splus = Splus[1..`p'+2,1..`p'+2]; Sminus = Psi*Splus*Psi; S = invsym(fV_c[2,1] * Splus + fV_c[1,1] * Sminus); B = fV_b[1,3] * S[1..2,] * (fV_c[1,1] * (-1)^(`p'+1) * vminus + fV_c[2,1] * vplus) h[1,3] = B[1,1] h[2,3] = B[2,1] } h[3,3] = h[2,3] - h[1,3]; h[4,3] = h[2,3] + h[1,3]; h[.,3] = h[.,3]:^2; h[.,1] = ((1/(2*`p')) * (h[.,2]:/h[.,3]) * (1/`N')):^(1/(2*`p'+1)); if (`regularize') { for (i=1; i<=4; i++) { if (h[i, 2] < 0) { h[i, 1] = 0 h[i, 2] = . } if (h[i, 1] == .) { h[i, 1] = 0 } } // bandwidth should not exceed the range of data h[1,1] = min((h[1,1], abs(XUnique[1]))) h[2,1] = min((h[2,1], XUnique[NUnique])) h[3,1] = min((h[3,1], max((abs(XUnique[1]), XUnique[NUnique])))) h[4,1] = min((h[4,1], max((abs(XUnique[1]), XUnique[NUnique])))) // nlocalmin check if (`nlocalmin' > 0) { hlMin = sort(abs(X[selectindex(X :< 0)]), 1)[min((`Nl', `nlocalmin'))] hrMin = (X[selectindex(X :>= 0)])[min((`Nr', `nlocalmin'))] h[1,1] = max((h[1,1], hlMin)) h[2,1] = max((h[2,1], hrMin)) h[3,1] = max((h[3,1], hlMin, hrMin)) h[4,1] = max((h[4,1], hlMin, hrMin)) } // nuniquemin check if (`nuniquemin' > 0) { hlMin = sort(abs(XUnique[selectindex(XUnique :< 0)]),1)[min((NlUnique, `nuniquemin'))] hrMin = (XUnique[selectindex(XUnique :>= 0)])[min((NrUnique, `nuniquemin'))] h[1,1] = max((h[1,1], hlMin)) h[2,1] = max((h[2,1], hrMin)) h[3,1] = max((h[3,1], hlMin, hrMin)) h[4,1] = max((h[4,1], hlMin, hrMin)) } } st_matrix("h", h); *display("Estimation completed."); } *** END MATA ESTIMATION **************************************************** **************************************************************************** **************************************************************************** *** BEGIN OUTPUT TABLE ***************************************************** if (masspoints_flag == 1) { disp "" disp "Point estimates and standard errors have been adjusted for repeated observations." disp "(Use option {it:nomasspoints} to suppress this adjustment.)" } disp "" disp "Bandwidth selection for manipulation testing." disp "" disp in smcl in gr "Cutoff " in ye "c = " %10.3f `c' _col(22) " {c |} " _col(23) in gr "Left of " in ye "c" _col(36) in gr "Right of " in y "c" _col(58) in gr "Number of obs = " in ye %12.0f `N' disp in smcl in gr "{hline 22}{c +}{hline 22}" _col(58) in gr "Model = " in ye "{ralign 12:`fitselect'}" disp in smcl in gr "{ralign 21:Number of obs}" _col(22) " {c |} " _col(23) as result %9.0f `Nl' _col(37) as result %9.0f `Nr' _col(58) in gr "Kernel = " in ye "{ralign 12:`kernel'}" disp in smcl in gr "{ralign 21:Min Running var.}" _col(22) " {c |} " _col(23) as result %9.3f `xl_min' _col(37) as result %9.3f `xr_min' _col(58) in gr "VCE method = " in ye "{ralign 12:`vce'}" disp in smcl in gr "{ralign 21:Max Running var.}" _col(22) " {c |} " _col(23) as result %9.3f `xl_max' _col(37) as result %9.3f `xr_max' disp in smcl in gr "{ralign 21:Order loc. poly. (p)}" _col(22) " {c |} " _col(23) as result %9.0f `p' _col(37) as result %9.0f `p' disp "" disp "Running variable: `x'." disp in smcl in gr "{hline 22}{c TT}{hline 34}" disp in smcl in gr "{ralign 21:Target}" _col(22) " {c |} " _col(23) in gr "Bandwidth" _col(37) " Variance" _col(49) " Bias^2" disp in smcl in gr "{hline 22}{c +}{hline 34}" disp in smcl in gr "{ralign 21:left density}" _col(22) " {c |} " _col(23) as result %9.3f h[1,1] _col(37) as result %9.3f h[1,2] _col(49) as result %9.3f h[1,3] disp in smcl in gr "{ralign 21:right density}" _col(22) " {c |} " _col(23) as result %9.3f h[2,1] _col(37) as result %9.3f h[2,2] _col(49) as result %9.3f h[2,3] disp in smcl in gr "{ralign 21:difference densities}" _col(22) " {c |} " _col(23) as result %9.3f h[3,1] _col(37) as result %9.3f h[3,2] _col(49) as result %9.3f h[3,3] disp in smcl in gr "{ralign 21:sum densities}" _col(22) " {c |} " _col(23) as result %9.3f h[4,1] _col(37) as result %9.3f h[4,2] _col(49) as result %9.3f h[4,3] disp in smcl in gr "{hline 22}{c BT}{hline 34}" disp "" *** END OUTPUT TABLE ******************************************************* **************************************************************************** restore ereturn clear ereturn scalar c = `c' ereturn scalar p = `p' ereturn scalar N_l = `Nl' ereturn scalar N_r = `Nr' mat rown h = f_left f_right f_diff f_sum mat coln h = bandwidth var bias2 ereturn matrix h = h ereturn scalar BW_b = BW_b ereturn scalar BW_c = BW_c ereturn local runningvar "`x'" ereturn local kernel = "`kernel'" ereturn local fitmethod = "`fitselect'" ereturn local vce = "`vce'" mata: mata clear end