dynare/matlab/doc/kernel_density_estimate.html

108 lines
7.3 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>Description of kernel_density_estimate</title>
<meta name="keywords" content="kernel_density_estimate">
<meta name="description" content="% This function aims at estimating a continuous density. A kernel density">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="m2html &copy; 2003 Guillaume Flandin">
<meta name="robots" content="index, follow">
<link type="text/css" rel="stylesheet" href="../m2html.css">
</head>
<body>
<a name="_top"></a>
<div><a href="../index.html">Home</a> &gt; <a href="index.html">.</a> &gt; kernel_density_estimate.m</div>
<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
<td align="right"><a href="index.html">Index for .&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
<h1>kernel_density_estimate
</h1>
<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
<div class="box"><strong>% This function aims at estimating a continuous density. A kernel density</strong></div>
<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
<div class="box"><strong>function [abscissa,f] = kernel_density_estimate(data,number_of_grid_points,bandwidth,kernel_function) </strong></div>
<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
<div class="fragment"><pre class="comment">% This function aims at estimating a continuous density. A kernel density
% estimator is used (see Silverman [1986]).
%
% * Silverman [1986], &quot;Density estimation for statistics and data analysis&quot;.
%
% The code is adapted from Anders Holtsberg's matlab toolbox (stixbox).
%
% stephane.adjemian@cepremap.cnrs.fr [07/16/2004].</pre></div>
<!-- crossreference -->
<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
This function calls:
<ul style="list-style-image:url(../matlabicon.gif)">
</ul>
This function is called by:
<ul style="list-style-image:url(../matlabicon.gif)">
<li><a href="filt_mc_.html" class="code" title="function [rmse_MC, ixx] = filt_mc_(vvarvecm, loadSA, pfilt, alpha, alpha2, OutDir, istart, alphaPC)">filt_mc_</a> copyright Marco Ratto 2006</li><li><a href="posterior_distribution.html" class="code" title="function [borneinf,bornesup,x1,x2,f1,f2,top,nam,texnam] =posterior_distribution(indx,number_of_mh_files,first_mh_file,first_line,number_of_blocks,number_of_simulations,number_of_simulations_per_file,TeX);">posterior_distribution</a> stephane.adjemian@cepremap.cnrs.fr [07-15-2004]</li><li><a href="posterior_moments.html" class="code" title="function [post_mean, post_median, post_var, hpd_interval, post_deciles, density] = posterior_moments(xx,info)">posterior_moments</a> stephane.adjemian@ens.fr [09-09-2005]</li><li><a href="stab_map_marginal.html" class="code" title="function stab_map_marginal(lpmat, ibehaviour, inonbehaviour, aname, ipar, dirname)">stab_map_marginal</a> function stab_map_1(lpmat, ibehaviour, inonbehaviour, aname, ipar, dirname)</li></ul>
<!-- crossreference -->
<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [abscissa,f] = kernel_density_estimate(data,number_of_grid_points,bandwidth,kernel_function) </a>
0002 <span class="comment">%% This function aims at estimating a continuous density. A kernel density</span>
0003 <span class="comment">%% estimator is used (see Silverman [1986]).</span>
0004 <span class="comment">%%</span>
0005 <span class="comment">%% * Silverman [1986], &quot;Density estimation for statistics and data analysis&quot;.</span>
0006 <span class="comment">%%</span>
0007 <span class="comment">%% The code is adapted from Anders Holtsberg's matlab toolbox (stixbox).</span>
0008 <span class="comment">%%</span>
0009 <span class="comment">%% stephane.adjemian@cepremap.cnrs.fr [07/16/2004].</span>
0010 <span class="keyword">if</span> size(data,2) &gt; 1 &amp; size(data,1) == 1
0011 data = transpose(data);
0012 <span class="keyword">elseif</span> size(data,2)&gt;1 &amp; size(data,1)&gt;1
0013 error(<span class="string">'kernel_density_estimate :: data must be a one dimensional array.'</span>);
0014 <span class="keyword">end</span>
0015 test = log(number_of_grid_points)/log(2);
0016 <span class="keyword">if</span> (abs(test-round(test)) &gt; 10^(-12))
0017 error(<span class="string">'kernel_density_estimate :: The number of grid points must be a power of 2.'</span>);
0018 <span class="keyword">end</span>
0019
0020 n = size(data,1);
0021
0022 <span class="comment">%% KERNEL SPECIFICATION...</span>
0023 <span class="keyword">if</span> strcmpi(kernel_function,<span class="string">'gaussian'</span>)
0024 k = inline(<span class="string">'inv(sqrt(2*pi))*exp(-0.5*x.^2)'</span>);
0025 <span class="keyword">elseif</span> strcmpi(kernel_function,<span class="string">'uniform'</span>)
0026 k = inline(<span class="string">'0.5*(abs(x) &lt;= 1)'</span>);
0027 <span class="keyword">elseif</span> strcmpi(kernel_function,<span class="string">'triangle'</span>)
0028 k = inline(<span class="string">'(1-abs(x)).*(abs(x) &lt;= 1)'</span>);
0029 <span class="keyword">elseif</span> strcmpi(kernel_function,<span class="string">'epanechnikov'</span>)
0030 k = inline(<span class="string">'0.75*(1-x.^2).*(abs(x) &lt;= 1)'</span>);
0031 <span class="keyword">elseif</span> strcmpi(kernel_function,<span class="string">'quartic'</span>)
0032 k = inline(<span class="string">'0.9375*((1-x.^2).^2).*(abs(x) &lt;= 1)'</span>);
0033 <span class="keyword">elseif</span> strcmpi(kernel_function,<span class="string">'triweight'</span>)
0034 k = inline(<span class="string">'1.09375*((1-x.^2).^3).*(abs(x) &lt;= 1)'</span>);
0035 <span class="keyword">elseif</span> strcmpi(kernel_function,<span class="string">'cosinus'</span>)
0036 k = inline(<span class="string">'(pi/4)*cos((pi/2)*x).*(abs(x) &lt;= 1)'</span>);
0037 <span class="keyword">end</span>
0038
0039 <span class="comment">%% COMPUTE DENSITY ESTIMATE... Gaussian kernel should be used (FFT).</span>
0040 a = min(data) - (max(data)-min(data))/3;
0041 b = max(data) + (max(data)-min(data))/3;
0042 abscissa = linspace(a,b,number_of_grid_points)';
0043 d = abscissa(2)-abscissa(1);
0044 xi = zeros(number_of_grid_points,1);
0045 xa = (data-a)/(b-a)*number_of_grid_points;
0046 <span class="keyword">for</span> i = 1:n;
0047 indx = floor(xa(i));
0048 temp = xa(i)-indx;
0049 xi(indx+[1 2]) = xi(indx+[1 2]) + [1-temp,temp]';
0050 <span class="keyword">end</span>;
0051 xk = [-number_of_grid_points:number_of_grid_points-1]'*d;
0052 kk = k(xk/bandwidth);
0053 kk = kk / (sum(kk)*d*n);
0054 f = ifft(fft(fftshift(kk)).*fft([xi ;zeros(size(xi))]));
0055 f = real(f(1:number_of_grid_points));</pre></div>
<hr><address>Generated on Fri 16-Jun-2006 09:09:06 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address>
</body>
</html>