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

📄 k_pdf.m

📁 计量工具箱
💻 M
字号:
function gr=k_pdf(X,type,nb,range,bw)
% PURPOSE: Plots a univariate kernel density
% 
% USAGE:
%     gr=kpdf(X,nb,range,bw)
% 
% INPUTS:
%     X       : series to generate the data
%     type    : The type of kernel used, by numbers, default is epanechnikov
%             cosinus       :   0
%             uniform       :   1
%             normal        :   2
%             quartic       :   3   
%             triangular    :   4   
%             triweight     :   5
%             epanechnikov  :   6
%     nb      : Number of nodes to use ; default is min(lenght X,300) 
%     range   : Range to calculate the nodes over(2 by 1 vector)(can be omitted, 
%               in which case an expanded range is used)
%     bw      : The bandwidth to use. by default Silverman's BW is used
%
% OUTPUTS:
%     gr       : Graphics handle to plot
% 
% COMMENTS:
%
% Author: Fran鏾is Desmoulins-Lebeault
% fd-l@caramail.com
% Revision: 2    Date: 01/05/2003

[N,p]=size(X);
if p~=1
    X=X';
    N=p;
end

if nargin < 2
     type = 6;
end

if nargin < 3
    nb=min(N,300);
end

if nargin < 4
    rmin=min(X)-.5*std(X);
    rmax=max(X)+.5*std(X);
else
    rmin=range(1);
    rmax=range(2);
end

if nargin < 5
  switch type
    case 0
        k=2.2810;
    case 1
        k=1.7291;
    case 2
        k=0.9933;
    case 3
        k=2.6121;
    case 4
        k=2.4190;
    case 5
        k=2.9616;
    otherwise
        k=2.2074;
  end
  bw=0.99*k*N^(-1/5)*min(std(X),iqr(X)/1.34);
end
    
vals=zeros(nb,1);
x=linspace(rmin,rmax,nb);

for i=1:nb
    u=(repmat(x(i),N,1)-X)./bw;
    switch type
        case 0
            vals(i)=mean((pi/4)*cos((pi/2)*u).*(abs(u)<1))/bw;
        case 1
            vals(i)=mean(.5*(abs(u)<1))/bw;
        case 2
            vals(i)=mean((1/sqrt(2*pi))*exp(-.5*u.^2))/bw;
        case 3
            vals(i)=mean((15/16)*(ones(N,1)-u.^2).^2.*(abs(u)<1))/bw;
        case 4
            vals(i)=mean((ones(N,1)-abs(u)).*(abs(u)<1))/bw;
        case 5
            vals(i)=mean((35/32)*(ones(N,1)-u.^2).^3.*(abs(u)<1))/bw;
        otherwise
            vals(i)=mean((3/4)*(ones(N,1)-u.^2).*(abs(u)<1))/bw;
    end
end

gr=plot(x,vals);

⌨️ 快捷键说明

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