matlab计算概率密度函数pdf,使用ksdensity histcounts区别

Matlab 专栏收录该内容
29 篇文章 1 订阅

刚好最近做了部分概率密度分布的工作,概率的知识早就还给了高数老师,只好一边复习(约等于学习)概率部分知识,一边扒matlab document。

万物从买买买开始,先推个书。这本数学指南简直太好用了,强烈推荐。手头也有其他版本的,天书一样看不懂。

我假设看到本文的人都跟我一样把知识换给老师,所以我们从头开始吧。

对于一个随机量  X = x1, x2,... xn

经验均值      u = mean(X) = (x1+x2+...xn)/n

经验标准差    (Δx)**2 = std(X) = [(x1-u)**2+(x2-u)**2+...+(xn-u)**2]/(n-1)

以下不好打字,就用百度百科的截图替代了

正态分布 (normal distribution) 

 Matlab中,用于计算概率和概率密度的相关函数有histcounts(histogram直方图),ksdensity

其中,histcounts与histogram是一类,可以计数,计算概率密度,概率密度函数,累积概率密度函数等,通过‘normalization'来选择。hist系列需要给出直方图的根数(nbin),或者直方图的宽度设置(edge,即每根的左右边界),得到的值与nbin一致,比edge少一个。

ksdensity只用于计算概率密度函数,默认nbin=100,也可给定所需的具体点位pts

为了对比,我把ksdensity给定的点位设置为hist每根的正中心。

hist 还可以给出类似discretize的功能,把一列数分类,并给出bin,其中bin的尺寸与x一致,对应位置是x值在哪一类,可以用ismember把属于同一类的数据挑出来。还可以把bin归类,用summary展示,

clear;clc;close all
x = randn(100000,1);
width = 0.2;
xi = -4:width:4;
edge = [xi-0.5*width,xi(end)+0.5*width];%   -4-0.5*width:width:4+0.5*width;
[dens,edge,bin] = histcounts(x,edge,'normalization','pdf');
[yi,xi]=ksdensity(x,xi);
figure
hold on 
histogram(x,edge,'normalization','pdf')
plot(xi,dens,'o-')
plot(xi,yi,'*-')
legend('histogram','histcounts','ksdensity')

id = ismember(bin,1);
x(id);
id = ismember(bin,20);
a = categorical(bin);
summary(a)

     0          4 
     1          3 
     2          7 
     3         13 
     4         16 
     5         50 
     6         92 
     7        152 
     8        262 
     9        488 
     10       719 
     11      1145 
     12      1562 
     13      2191 
     14      3038 
     15      3831 
     16      5018 
     17      5920 
     18      6372 
     19      7280 
     20      7712 
     21      7932 
     22      7975 
     23      7457 
     24      6532 
     25      5747 
     26      4847 
     27      3884 
     28      3022 
     29      2211 
     30      1634 
     31      1104 
     32       729 
     33       444 
     34       268 
     35       162 
     36        88 
     37        50 
     38        19 
     39        14 
     40         5 
     41         1 

 

 histcounts 根据设置的区间,根据概念来计算pdf,受数据影响,而ksdensity是给出类似理论概率函数,不太受区间设置影响,并给出对应点的pdf。hist获得的pdf图可能会根据直方图每根条带的宽度设置不同而出现较大的差异,但ksdensity不会,他的pdf是基本一致的。

我用另外一组实际数据,分别用0.05 0.1 0.2的bar宽度,就可以看到非常明显的区别。

 

 

  • 1
    点赞
  • 1
    评论
  • 8
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 1 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:技术工厂 设计师:CSDN官方博客 返回首页

打赏作者

东躲西藏的西城

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值