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

📄 pltdens.m

📁 计量工具箱
💻 M
字号:
function [h,f,xx] = plotdens(x,h,positive,kernel)% PURPOSE: Draw a nonparametric density estimate. %---------------------------------------------------% USAGE: [h f y] = pltdens(x,h,p,kernel)%        or pltdens(x) which uses gaussian kernel default% where:%        x is a vector%        h is the kernel bandwidth %          default=1.06 * std(x) * n^(-1/5); Silverman page 45%        p is 1 if the density is 0 for negative values%        k is the kernel type:%          =1 Gaussian (default)%        =2 Epanechnikov %        =3 Biweight%        =4 Triangular%   A jittered plot of the %   observations is shown below the density.%---------------------------------------------------% RETURNS:%        h = the interval used%        f = the density%        y = the domain of support%        plot(y,f) will produce a plot of the density% --------------------------------------------------% SEE ALSO hist, histo%---------------------------------------------------%       Anders Holtsberg, 18-11-93%       Copyright (c) Anders Holtsbergx = x(:); n = length(x);if nargin < 4, kernel = 1; endif nargin < 3, positive = 0; endif nargin < 2, h = []; endif isempty(h)   h = 1.06 * std(x) * n^(-1/5);  % Silverman page 45endif positive & any(x < 0)   error('There is a negative element in X')endmn1 = min(x); mx1 = max(x);mn = mn1 - (mx1-mn1)/3;mx = mx1 + (mx1-mn1)/3;gridsize = 256;xx = linspace(mn,mx,gridsize)';d = xx(2) - xx(1);xh = zeros(size(xx));xa = (x-mn)/(mx-mn)*gridsize;for i=1:n   il = floor(xa(i));   a  = xa(i) - il;   xh(il+[1 2]) = xh(il+[1 2])+[1-a, a]';endxk = [-gridsize:gridsize-1]'*d;if kernel == 1   K = exp(-0.5*(xk/h).^2);elseif kernel == 2    K = max(0,1-(xk/h).^2/5);elseif kernel == 3   c = sqrt(1/7);   K = (1-(xk/h*c).^2).^2 .* ((1-abs(xk/h*c)) > 0);elseif kernel == 4    c = sqrt(1/6);   K = max(0,1-abs(xk/h*c));endK = K / (sum(K)*d*n);f = ifft(fft(fftshift(K)).*fft([xh ;zeros(size(xh))]));f = real(f(1:gridsize));if positive   m = sum(xx<0);   f(m+(1:m)) = f(m+(1:m)) + f(m:-1:1);   f(1:m) = zeros(size(f(1:m)));   xx(m+[0 1]) = [0 0];endif nargout == 0plot(xx,f) if ~ishold   hold on   d = diff(get(get(gcf,'CurrentAxes'),'Ylim'))/100;   plot(x,(-rand(size(x))*6-1)*d,'.')   plot([mn mx],[0 0])   axis([mn mx -0.2*max(f) max(f)*1.2])   hold off endend;

⌨️ 快捷键说明

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