{smcl}
{hline}
help for {hi:kernel}{right:{browse "http://econ.chavezjuarez.com/vcheck.php?i=kernel&v=1.0":Version 1.0}}
{hline}

{title:Computation of different kernels}


{p 4 17 2}{cmd:kernel} {it:var} [if] [in] ,
	{cmdab:v:alue(}{it:real}{cmd:)}
	{cmdab:b:w(}{it:real}{cmd:)}
	[
	{cmdab:t:ype(}{it:str}{cmd:)}
	{cmdab:o:ut(}{it:str}{cmd:)}
		]

{title:Description}

{p 4 4 4} {cmd:kernel} computes the value of a kernel around a given point. The routine supports different kernel functions such as the epanechnikov ({it:default}), 
the normal or the Parzen kernel. The value of the kernel can be saved in a new variable and used for instance for non-parametric estimation.  A kernel is a function whose integral 
over the full range is equal to 1 and whose values are always greater or equal to zero. The kernel is generally used in non-parametric methods to give a certain weight to different observations. 
Let us define the variable of interest as {it:X} and further define {it:X0] to be the value around which we compute the kernel. We can then define Z = (X-X0)/BW, where BW is the bandwidth. 
The kernel is then defined as K(Z)>0 for all values of Z. 

{p 4 4 4} {it:var} is the variable for which the kernel should be computed. 

{title:Options}

{p 4 4 4} {cmdab:v:alue(}{it:real}{cmd:)} is a required option and refers to the value of the variable in {it:varlist} around which the kernel should be 
estimated. 

{p 4 4 4} {cmdab:b:w(}{it:real}{cmd:)} is also required and refers to the bandwidth you would like to use. Note that the same bandwidth has different meanings for different kernels. 

{p 4 4 4} {cmdab:t:ype(}{it:str}{cmd:)} allows you to change the kernel type. The options are as follows: 

{col 15} {it:default} {col 28} The default epanechnikov kernel
{col 15} normal {col 28} The normal density kernel
{col 15} triangle {col 28} The triangle kernel
{col 15} beta {col 28} The beta kernel
{col 15} logit {col 28} The logit density kernel
{col 15} uniform {col 28} The uniform kernel
{col 15} cosine {col 28} The cosine kernel
{col 15} parzen {col 28} The Parzen kernel

{p 4 4 4} {cmdab:o:ut(}{it:str}{cmd:)} allows you to specify the name of the variable to which the kernel values should be saved. By default the output variable 
is called {it:_kernel_type} where {it:type} changes in function of the chosen kernel.


{title:Output}
{p 4 4 15} {cmd:kernel} returns several values which can be accessed through {stata return list:return list}:

{col 10} r(bw): {col 25} the bandwidth
{col 10} r(max): {col 25} the maximum of the variable in {it:varlist} for which K(var)>0. In case of open end kernels a point is reported.
{col 10} r(diff): {col 25} the maximum of the variable in {it:varlist} for which K(var)>0. In case of open end kernels a point is reported.
{col 10} r(kernel): {col 25} the kernel function used in the computation



{title:Example}
{p 0 4 0}First, we load a sample database containing severl thousand individuals:{break}{stata sysuse nlsw88, clear} 

{p 0 4 0}Then we estimate two kernels (epanechnikov and normal) around the value of 40 with a bandwidth of 2{break}
{stata kernel tenure, value(10) bw(2) out(tenure_kernel_epan)}{break}
{stata kernel tenure, value(10) bw(2) out(tenure_kernel_norm) type(normal)}

{p 0 4 0}Finally, to illustrate the two kernels, we first sort the data and plot then the kernel function against the variable {it:age}{break}
{stata sort tenure}{break}{stata twoway (line tenure_kernel_epan tenure)(line tenure_kernel_norm tenure),legend(cols(1))}

{title:Author}
{p 4 4 4}	For suggestions and questions, please contact the author: {break} 
Florian Chávez Juárez: {browse "mailto:florian@chavezjuarez.com?subject=Stata kernel:":florian@chavezjuarez.com}

{title:Update}
{browse "http://econ.chavezjuarez.com/vcheck.php?i=kernel&v=1.0":Click here to check if you have the newest version}


