概率密度、分布和逆概率分布函数值的计算
MATLAB统计工具箱中有这样一系列函数,函数名以pdf三个字符结尾的函数用来计算常见连续分布的密度函数值或离散分布的概率函数值,函数名以cdf三个字符结尾的函数用来计算常见分布的分布函数值,函数名以inv三个字符结尾的函数用来计算常见分布的逆概率分布函数值,函数名以rnd三个字符结尾的函数用来生成常见分布的随机数,函数名以fit三个字符结尾的函数用来求常见分布的参数的最大似然估计和置信区间,函数名以stat四个字符结尾的函数用来计算常见分布的期望和方差,函数名以like四个字符结尾的函数用来计算常见分布的负对数似然函数值。
【例】求均值为1.2345,标准差(方差的算术平方根)为6的正态分布在处的密度函数值与分布函数值。
>> x = 0:10; %产生一个向量
>> Y = normpdf(x, 1.2345, 6) %求密度函数值
>> P = normcdf(x, 1.2345, 6) %求分布函数值
>> x=0:10;
>> Y=normpdf(x,1.2345,6)
Y =
Columns 1 through 7
0.0651 0.0664 0.0660 0.0637 0.0598 0.0546 0.0485
Columns 8 through 11
0.0419 0.0352 0.0288 0.0229
>> P=normcdf(x,1.234,6)
P =
Columns 1 through 7
0.4185 0.4844 0.5508 0.6157 0.6776 0.7349 0.7865
Columns 8 through 11
0.8317 0.8703 0.9022 0.9280
【例】
(1) 标准正态分布的上侧0.05分位数u0.05;
(2) 自由度为50的t分布的上侧0.05分位数t0.05(50);
(3) 自由度为8的2χ分布的上侧0.025分位数χ方0.025(8); (4) 第一自由度为7,第二自由度为13的F分布的上侧0.01分位数F0.01(7, 13);
(5) 第一自由度为13,第二自由度为7的F分布的上侧0.99分位数F0.99(13, 7).
>> u=norminv(1-0.005,0,1)
u =
2.5758
>> t=tinv(1-0.05,50)
t =
1.6759
>> chi2=chi2inv(1-0.025,8)
chi2 =
17.5345
>> f1=finv(1-0.01,7,13)
f1 =
4.4410
>> f2=finv(1-0.99,13,7)
f2 =
0.2252
生成一元分布随机数
一、均匀分布随机数和标准正态分布随机数
1. rand函数
调用格式:
Y = rand
Y = rand(n)
Y = rand(m,n)
Y = rand([m n])
Y = rand(m,n,p, …)
Y = rand([m n p …])
Y = rand(size(A))
2. randn函数
【例】调用rand函数生成10×10的随机数矩阵,并将矩阵按列拉长,然后调用hist函数画出频数直方图。
>> x = rand(10)
>> y = x(:);
>> hist(y)
>> xlabel('[0,1]上均匀分布随机数');
>> ylabel('频数');
常见一元分布随机数
MATLAB统计工具箱中函数名以rnd三个字符结尾的函数用来生成常见分布的随机数。例如:
betarnd Beta分布
exprnd 指数分布
gamrnd Gamma分布
lognrnd 对数正态分布
normrnd 正态分布
poissrnd 泊松分布
randsample 从有限总体中随机抽样
random 指定分布
【例】调用normrnd函数生成1000×3的正态分布随机数矩阵,其中均值为75,标准差为8 ,并作出各列的频数直方图
% 调用normrnd函数生成1000行3列的随机数矩阵x,其元素服从均值为75,标准差为8的正态分布
>> x = normrnd(75, 8, 1000, 3);
>> hist(x) % 绘制矩阵x每列的频数直方图
>> xlabel('正态分布随机数(\mu = 75, \sigma = 8)'); % 为X轴加标签
>> ylabel('频数'); % 为Y轴加标签
>> legend('第一列', '第二列', '第三列') % 为图形加标注框
【例】调用normrnd函数生成1000×3的正态分布随机数矩阵,其中第各列均值分别为0,15,40,标准差分别为1,2,3,并作出各列的频数直方图
>> x = normrnd(repmat([0 15 40], 1000, 1), repmat([1 2 3], 1000, 1), 1000, 3);
>> hist(x, 50) % 绘制矩阵x每列的频数直方图
>> xlabel('正态分布随机数'); % 为X轴加标签
>> ylabel('频数'); % 为Y轴加标签
% 为图形加标注框
>> legend('\mu = 0, \sigma = 1','\mu = 15, \sigma = 2','\mu = 40, \sigma = 3')
【例】调用random函数生成10000×1的二项分布随机数向量,然后作出频率直方图。其中二项分布的参数为n=10,p=0.3
% 调用random函数生成10000行1列的随机数向量x,其元素服从二项分布B(10,0.3)
>> x = random('bino', 10, 0.3, 10000, 1);
>> [fp, xp] = ecdf(x); % 计算经验累积概率分布函数值
>> ecdfhist(fp, xp, 50); % 绘制频率直方图
>> xlabel('二项分布(n = 10, p = 0.3)随机数'); % 为X轴加标签
>> ylabel('f(x)'); % 为Y轴加标签
【例】调用random函数生成10000×1的卡方分布随机数向量,然后作出频率直方图,并与自由度为10的卡方分布的密度函数曲线作比较。其中卡方分布的参数(自由度)为10
>> x = random('chi2', 10, 10000, 1);
>> [fp, xp] = ecdf(x); % 计算经验累积概率分布函数值
>> ecdfhist(fp, xp, 50); % 绘制频率直方图
>> hold on
>> t = linspace(0, max(x), 100);
>> y = chi2pdf(t, 10);
>> plot(t, y, 'r', 'linewidth', 3)
>> xlabel('x ( \chi^2(10) )'); % 为X轴加标签
>> ylabel('f(x)'); % 为Y轴加标签
>> legend('频率直方图', '密度函数曲线') % 为图形加标注框