我已授权

注册

李洋:数据分布检查(尖峰肥尾等)

2013-06-07 17:46:31 和讯股票  李洋

  一个简易的检测数据正态分布的状况,给出峰度、偏度等等。图形出入结果仿照eviews样式:

  测试图像:

图

  函数源代码NormFitDemo:

  function Result = NormFitDemo(Data)

  % NormFitDemo

  % by liyang 2011/12/14

  % farutoliyang@gmail.com

  % 程序实现测试所使用的MATLAB版本:MATLAB R2011b(7.13)

  % 如果程序在您本机运行不了,请首先检查您MATLAB的版本号,推荐使用较新版本的MATLAB。

  

  %% 输入参数检查

  error(nargchk(1, 1, nargin));

  %%

  Result = struct;

  % 均值、标准差估计

  [muhat,sigmahat] = normfit(Data);

  Result.mu = muhat;

  Result.sigma = sigmahat;

  % 峰度kurtosis计算

  % 峰度为3表示与正态分布相同,峰度大于3表示比正态分布陡峭,小于3表示比正态分布平坦。

  k = kurtosis(Data);

  Result.kurtosis = k;

  % 偏度skewness计算

  % 正态分布的偏度为0,两侧尾部长度对称。

  % 偏度小于0称分布具有负偏离,也称左偏态,此时数据位于均值左边的比位于右边的少。

  % 直观表现为左边的尾部相对于与右边的尾部要长,因为有少数变量值很小,使曲线左侧尾部拖得很长。

  % 偏度大于0称分布具有正偏离,也称右偏态,此时数据位于均值右边的比位于左边的少。

  % 直观表现为右边的尾部相对于与左边的尾部要长,因为有少数变量值很大,使曲线右侧尾部拖得很长。

  s = skewness(Data);

  Result.skewness = s;

  %%

  if nargout == 0

  H = figure;

  histfit(Data);

  axis tight;

  haxes = get(H,'CurrentAxes');

  x = get(haxes,'Xtick');

  x = x(end-1);

  y = get(haxes,'Ytick');

  y = y(end-1);

  h = text(x,y,'分布展示');

  str = cell(4,1);

  str{1,1} = ['mu:',num2str(Result.mu)];

  str{2,1} = ['sigma:',num2str(Result.sigma)];

  if Result.kurtosis > 3

  str{3,1} = ['峰度:',num2str(Result.kurtosis),'>3(肥尾)'];

  end

  if Result.kurtosis < 3

  str{3,1} = ['峰度:',num2str(Result.kurtosis),'<3'];

  end

  if Result.kurtosis > 0

  str{4,1} = ['偏度:',num2str(Result.skewness),'>0(右偏态)'];

  end

  if Result.kurtosis < 0

  str{4,1} = ['偏度:',num2str(Result.skewness),'<0(左偏态)'];

  end

  set(h,'String',str,'HorizontalAlignment','center', 'BackgroundColor',[.7 .9 .7]);

  end(李洋 永安期货

  

(责任编辑:金明正 HF023)
看全文
写评论已有条评论跟帖用户自律公约
提 交还可输入500

最新评论

查看剩下100条评论

热门新闻排行榜

和讯热销金融证券产品

【免责声明】本文仅代表作者本人观点,与和讯网无关。和讯网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。