8.2 概率密度计算
8.2.1 通用函数概率密度值
使用pdf函数可以轻松计算概率密度,其调用格式如下:
● y=pdf(name,X,A)。
● y=pdf(name,X,A,B)。
● y=pdf(name,X,A,B,C)。
● y=pdf(obj,X)。
其中,返回在x=X处,参数为A、B、C的概率密度值,对于不同的分布,参数个数不同;name为分布函数名,其取值如表8-2所示;obj为高斯联合分布对象。该函数的使用方式如例8-3所示。
表8-2 常见分布函数
name的取值 |
函数说明 |
‘beta’或‘Beta’ |
Beta分布 |
‘bino’或‘Binomial’ |
二项分布 |
‘chi2’或‘Chisquare’ |
卡方分布 |
‘exp’或‘Exponential’ |
指数分布 |
‘f’或‘F’ |
F分布 |
‘gam’或‘Gamma’ |
GAMMA分布 |
‘geo’或‘Geometric’ |
几何分布 |
‘hyge’或‘Hypergeometric’ |
超几何分布 |
‘logn’或‘Lognormal’ |
对数正态分布 |
‘nbin’或‘Negative Binomial’ |
负二项式分布 |
‘ncf’或‘Noncentral F’ |
非中心F分布 |
‘nct’或‘Noncentral t’ |
非中心t分布 |
‘ncx2’或‘Noncentral Chi-square’ |
非中心卡方分布 |
‘norm’或‘Normal’ |
正态分布 |
‘poiss’或‘Poisson’ |
泊松分布 |
‘rayl’或‘Rayleigh’ |
瑞利分布 |
‘t’或‘T’ |
t分布 |
‘unif’或‘Uniform’ |
均匀分布 |
‘unid’或‘Discrete Uniform’ |
离散均匀分布 |
‘weib’或‘Weibull’ |
Weibull分布 |
而且,通用函数计算概率密度的方法还可以推广到任意函数/数据的情况。在MATLAB中,可以使用ksdensity函数求取一般函数/数据的概率密度函数。该函数的调用格式如下:
● [f,xi]=ksdensity(x)。
● f=ksdensity(x,xi)。
● ksdensity(...)。
● ksdensity(ax,...)。
● [f,xi,u]=ksdensity(...)。
● [...]=ksdensity(...,'Name',value)。
其中,x为待统计的向量;xi计算概率密度的点;f为得到的概率密度;ax指定绘制位置坐标轴对象;Name和value为可选属性及其属性值。该函数的使用方式将结合例8-3进行说明。
例8-3:计算标准正态分布随机变量在[-2:1:2]处的概率密度值、泊松分布随机变量在点[0:1:4]的密度函数值、高斯联合分布的概率密度函数曲面和任意函数/数据的概率密度分布。
在命令行窗口中输入:
p1 = pdf('Normal', -2 : 2, 0, 1) p2 = pdf('Poisson', 0 : 4, 1 : 5) MU = [1 2; -3 -5]; SIGMA = cat(3, [2 0; 0 0.5], [1 0; 0 1]); p = ones(1, 2) / 2; obj = gmdistribution(MU, SIGMA, p) ezsurf(@(x, y) pdf(obj, [x y]), [-10 10], [-10 10]) RAND = randn(1000, 1); fx = sin((1 : 1000) * pi / 500); [f, xi] = ksdensity(RAND + 5 * fx'); figure; plot(xi, f); axis tight
输出结果:
p1 = 0.0540 0.2420 0.3989 0.2420 0.0540 p2 = 0.3679 0.2707 0.2240 0.1954 0.1755 obj = 在 2 个维中具有 2 个成分的高斯混合分布 成分 1: 混合比例: 0.500000 均值: 1 2 成分 2: 混合比例: 0.500000 均值: -3 -5
程序运行得到的图形如图8-1所示。
(a) 高斯联合分布概率密度
(b) 任何函数的概率密度分布示例
图8-1 概率密度示例
8.2.2 专用函数概率密度值
计算专用函数概率密度值的函数很多,如使用binopdf函数,其调用格式如下。
● Y=binopdf(X,N,P):X为计算点;N为试验总次数;P为每次试验中事件发生的概率;Y为概率密度值。
常见的专用函数概率密度值计算函数如表8-3所示。
表8-3 专用函数概率密度值计算函数续表
例8-4:计算正态分布函数概率密度示例。
在命令行窗口中输入:
mu = [0 : 0.1 : 2]; [y i] = max(normpdf(1.5, mu, 1)); MLE = mu(i)
在命令行窗口中输出:
MLE = 1.5000