matlab语言与应用 09 概率论与数理统计

现代科学运算-matlab语言与应用

东北大学 http://www.icourses.cn/home/ (薛定宇)
《高等应用数学问题的MATLAB求解(第四版)》
代码可在matlab r2016b 运行。

09 概率论与数理统计问题的计算机求解

09.01 常用概率分布

概率与概率密度函数
什么是概率?
随机事件发生的可能性
如果随机变量 ξ 落入任意(a, b)区间的概率
F ( a ξ b ) = a b p ( x ) d x
则称 p ( x ) 为概率密度函数, 满足
p ( x ) 0 , p ( x ) d x = 1

概率分布函数
由概率密度可以定义概率分布函数
F ( x ) = x p ( t ) d t
物理意义: F ( x ) ξ ξ x
分布函数性质:
函数F(x)单调非减函数
0 F ( x ) 1 , F ( ) = 0 , F ( ) = 1

常见分布的概率密度函数与分布函数
Possion分布
征态分布
F分布
T分布
χ 2 分布
Gamma分布
Rayleigh分布

后缀: pdf, cdf, inv, rnd, stat, fit
例如:batapdf(), gamcdf(), raylrnd()
pdf(‘beta’, …), cdf(‘gam’, …), random(‘rayl’, …)
inv->icdf, rnd->random, fit->fittest
b e t a B e t a a , b b i n o n , p c h i 2 χ 2 k e v μ , σ e x p λ f F p , q g a m G a m m a a , λ g e o p h y g e m , p , n l o g n μ , σ m v n μ , σ n b i n v 1 , v 2 , δ n c f F k , δ n c t T k , δ n c x 2 χ 2 k , δ n o r m μ , σ p o i s s P o i s s o n λ r a y 1 R a y l e i g h b t T k u n i f a , b w b l W e b u l l a , b

Poisson分布
Poisson分布的概率密度为:
p ( x ) = λ x x ! e λ x , x = 0 , 1 , 2 , 3 ,
其中, λ 为正整数
Poisson分布的概率密度函数:
y = poisspdf(x, λ ), y = pdf(‘poiss’, x, λ )
F = poisscdf(x, λ ), F = cdf(‘poiss’, x, λ )
x = poissinv(F, λ ), x = icdf(‘poiss’, F, λ )

例9-1 Poisson分布
Poisson分布的概率密度函数与分布函数曲线
Poisson分布的参数 λ = 1 , 2 , 5 , 10

x = [0:15]';
y1 = [];
y2 = [];
lam1 = [1, 2, 5, 10];
for i = 1:length(lam1)
    y1 = [y1, poisspdf(x, lam1(i))];
    y2 = [y2, poisscdf(x, lam1(i))];
end;
stem(x, y1);
line(x, y1);
figure;
stem(x, y2);
line(x, y2);

也可以使用pdf()、cdf()、icdf()

征态分布
征态分布的概率密度函数为:
p ( x ) = 1 2 π σ e ( x μ ) 2 2 σ 2
其中, μ σ 2 分别为征态分布的均值和方差
征态分布的概率密度函数调用格式:
y = n o r m p d f ( x , μ , σ ) y = p d f ( n o r m , x , μ , σ )
F = n o r m c d f ( x , μ , σ ) F = c d f ( n o r m , x , μ , σ )
x = n o r m i n v ( F , μ , σ ) x = i c d f ( n o r m , F , μ , σ )

例9-2 征态分布
征态分布的概率密度函数与分布函数曲线
( μ , σ 2 ) ( 1 , 1 ) , ( 0 , 0.1 ) , ( 0 , 1 ) , ( 0 , 10 ) , ( 1 , 1 )

x = [-5: 0.02: 5]';
y1 = [];
y2 = [];
mu1 = [-1, 0, 0, 0, 1];
sig = sqrt([1, 0.1, 1, 10, 1]);
for i = 1: length(mu1)
    y1 = [y1, normpdf(x, mu1(i), sig(i))];
    y2 = [y2, normcdf(x, mu1(i), sig(i))];
end;
plot(x, y1);
figure;
plot(x, y2);

Rayleigh分布
Rayleigh分布的概率密度为:
p ( x ) = { x b 2 e x 2 2 b 2 x 0 0 x < 0
该函数是b的函数
y = raylpdf(x, k), y = pdf(‘rayl’, x, k)
F = raylcdf(x, k), F = cdf(‘rayl’, x, k)
x = raylinv(F, k), x = icdf(‘rayl’, F, k)

例9-7 Rayleigh分布
Rayleigh分布的概率密度函数与分布函数曲线
参数b = 0.5, 1, 3, 5

x = [-eps: -0.02: -0.05, 0: 0.02: 5];
y2 = [];
x = sort(x');
b1 = [.5, 1, 3, 5];
y1 = [];
for i = 1: length(b1)
    y1 = [y1, raylpdf(x, b1(i))];
    y2 = [y2, raylcdf(x, b1(i))];
end;
plot(x, y1);
figure;
plot(x, y2);

随机数与伪随机数生成
为随机数–数学方式生成的,rand(), randn()
生成不同种类分布的随机数的函数调用格式
生成n x m 的 gamma 分布的伪随机数矩阵
A= gamrnd(a, λ , n, m)
A = random(‘gam’, a, λ , n, m)
生成 χ 2 分布的伪随机数矩阵
A = chi2rnd(k, n, m)
A = random(‘chi2’, k, n, m)

09.02 概率计算

离散数据的直方图与饼图表示
一组离散的检测数据 x 1 , x 2 , , x n
数据区间(a, b), m等分, b 1 = a , b m + 1 = b
( b i , b i + 1 ) f i , f i / n
matlab求解:
k = hist(x, b);
f = k/n;
p = f/( b 2 b 1 )
直方图: bar(b, f);
饼图:pie(f)

例9-10 Rayleigh分布的直方图
生成30000个伪随机数,满足 Rayleight 分布
参数 b = 1

b = 1;
p = raylrnd(1, 30000, 1);
x = 0: .1: 4;
x1 = x+ 0.05;
yy = hist(p, x1);
yy = yy/(30000*0.1);
bar(x1, yy),
y = raylpdf(x, 1);
line(x, y);
figure;
pie(yy)

例9-11 离散数据的概率表示
随机测得200只荧光灯流明数据,文件c9dlamp.dat,绘图

% A = load('c9dlamp.dat');
A = load('E:\\Work\\201806\\math_4th\\c9dlamp.dat');
bins = [500: 100: 1500] + 50;
f = hist(A, bins)/length(A);
bar(bins, f)
figure;
pie(f)

连续概率问题求解
三个求取概率的公式:
ξ x 的概率:
P [ ξ x ] = F ( x )
x 1 ξ 2 的概率:
P [ x 1 ξ x 2 ] = F ( x 2 ) F ( x 1 )
ξ x 的概率: P [ ξ x ] = 1 F ( x )

例9-12 Rayleigh分布概率计算
已知随机变量x为Rayleigh分布,且b = 1
求出随机变量x值落入区间[0.2, 2]及区间[1, )的概率

% 落入区间[0.2, 2] P = F(2) - F(0.2)
b = 1;
p1 = raylcdf(0.2, b);
p2 = raylcdf(2, b);
P1 = p2 - p1

落入区间[1, )

p1 = raylcdf(1, b);
P2 = 1 - p1

例9-13 联合概率计算
二维随机变量( ξ , η )的联合概率密度为:
p ( x , y ) = { x 2 + x y 3 , 0 x 1 , 0 y 2 0 , o t h e r s
求出 P ( ξ < 1 / 2 , η < 1 / 2 ) P = a b p ( x , y ) d y d x

syms x y;
f = x^2 + x*y/3;
P = int(int(f, x, 0, 1/2), y, 0, 1/2)

例9-14 概率计算
假设某两地A、B间有6个交通岗
在各个交通岗遇到红灯的概率均相同,为p=1/3
中途遇到红灯次数满足二项式分布B(6, p)
试求出从A出发到达B至少遇到一次红灯的概率

x = 0: 6;
y = binopdf(x, 6, 1/3);
P = 1 - y(1) % or P = sum(y(2:end))
p0 = 0.05: 0.05: 0.95;
y = [];
for p = p0
    y = [y 1-binopdf(0, 6, p)];
end;
plot(p0, y, 1/3, P, 'o');

例9-15 利用Monte Carlo 方法计算 π
试用 Monte Carlo 方法近似求出 π 的值 π 4 N 1 / N
数学求解公式: N 1 / N π / 4

N = 100000;
x = rand(1, N);
y = rand(1, N);
i = (x.^2 + y.^2) <= 1;
N1 = sum(i);
p = N1/N*4

例9-16 定积分近似
试用 Monte Carlo 法计算积分
1 3 [ 1 + e 0.2 x sin ( x + 0.5 ) ] d x
假设 f ( t ) 0
N 1 N 1 M ( b a ) a b f ( x ) d x
a b f ( x ) d x M ( b a ) N 1 N
计算公式: a b f ( x ) d x M ( b a ) N 1 N

f = @(x)1 + exp(-0.2*x).*sin(x+0.5);
a = 1;
b = 3;
M = 2;
N = 1000000;
x = a+(b-a)*rand(N, 1);
y = M*rand(N, 1);
i = y <= f(x);
N1 = sum(i);
p = M*N1*(b-a)/N,
% 解析解
syms x;
I = vpa(int(1 + exp(-0.2*x)*sin(x+0.5), x, a, b))

例9-17 Brown运动仿真
单个粒子的Brown运动仿真
粒子位置的递推公式
x i + 1 = x i + σ Δ x i , y i + 1 = y i + σ Δ y i
运动步距满足标准征态分布
选择比例因子 \sigma = 1

n = 1000;
x = zeros(2, n);
y = zeros(2, n);
s = 1;
r1 = randn(2, n);
for i = 2:n
    x(1, i) = x(1, i-1) + s*r1(1, i);
    y(1, i) = y(1, i-1) +s*r1(2, i);
end;
plot(x(1, :), y(1, :), '-o')

09.03 统计量计算与分析

随机变量的均值与方差
连续随机变量x的概率密度为p(x)
数学期望E[x]:
E [ x ] = x p ( x ) d x
数学方差D[x] : D [ x ] = ( x E [ x ] ) 2 p ( x ) d x

例9-18 统计量计算
用积分方法求Gamma分布(a > 0, λ > 0)的均值与方差
Gamma分布的概率密度 p ( x ) = { λ a x a 1 Γ ( a ) e λ x , x 0 0 , x < 0

syms x;
syms a lam positive;
p = lam^a*x^(a-1)/gamma(a)*exp(-lam*x);
m = int(x*p, x, 0, inf);
s = simplify(int((x-1/lam*a)^2*p, x, 0, inf));
p, m, s
% s需要在早期版本计算,matlab2008a

结果: m = a λ , s = a λ 2

统计量数值计算
在实际中测出一组样本数据 x = [ x 1 , x 2 , x 3 , , x n ] T
它们的均值和方差分别为 – 样本均值方差
x ¯ = 1 n i = 1 n x i , s ^ x 2 = 1 n i = 1 n ( x i x ¯ ) 2
m = mean(x)
s2 = var(x)
无偏方差: s x 2 = 1 n 1 i = 1 n ( x i x ¯ ) 2
s = std(x)
s x 0 为 “标准差”

例9-22 伪随机数的统计量
生成一组30000个征态分布随机数
均值为 0.5, 标准差为1.5
分析数据实际的均值,方差和标准差
减小随机变量个数有何影响

p = normrnd(0.5, 1.5, 30000, 1);
mean(p), var(p), std(p)

使用300个随机数:

p = normrnd(0.5, 1.5, 300, 1);
mean(p), var(p), std(p)

随机变量的矩
假设x为连续随机变量, 且p(x)为其概率密度函数
该变量的r阶原点矩
v r = x r p ( x ) d x
r阶中心矩
μ r = ( x μ ) r p ( x ) d x
可见, v 1 = E [ x ] , μ 2 = D [ x ]

例9-21 Gamma分布的矩量计算
考虑Gamma分布(a > 0, \lambda > 0)的原点矩和中心矩

syms x;
syms a lam positive;
p = lam^a*x^(a-1)/gamma(a)*exp(-lam*x);
for n=1:5
    m = int(x^n*p, x, 0, inf)
end;

原点矩通项表达式: v k = 1 λ k i = 0 k 1 ( a + i )

% 直接求出任意阶次的原点矩
syms k;
m = simplify(int((x)^k*p, x, 0, inf))
% 计算中心矩,要用早期版本
for n = 1:7
    s = simplify(int((x-1/lam*a)^n*p, x, 0, inf)),
end;

中心矩没有显而易见的通项公式

矩的数值计算
给定的随机数为一些样本点 x 1 , x 2 , , x n
该随机变量的r阶原点矩
A r = 1 n i = 1 n x i r
matlab: A r = sum(x.^r)/length(x)

该随机变量的r阶中心矩
B r = 1 n i = 1 n ( x i x ¯ ) r
matlab: B r = moment(x, r)

例9-22 矩量的数值计算
给定一组30000个征态分布随机数
均值为 0.5, 标准差为 1.5, 试求出随机数的各阶矩

A = [];
B = [];
n = 1: 5;
p = normrnd(0.5, 1.5, 30000, 1);
for r = n
    A = [A, sum(p.^r)/length(p)];
    B = [B, moment(p, r)];
end;
A, B
syms x;
A1 = [];
B1 = [];
a = -inf;
b = inf;
p = 1/(sqrt(2*sym(pi))*3/2)*exp(-(x-1/2)^2/(2*(3/2)^2));
for i = 1:5
    A1 = [A1, int(x^i*p, x, a, b)];
    B1 = [B1, int((x-1/2)^i*p, x, a, b)];
end;
A1, B1

09.04 协方差计算

多变量随机数的协方差分析
随机数 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) , , ( x n , y n )
为二维随机变量对(x,y)的样本
二维样本的协方差
s x y = 1 n 1 i = 1 n ( x i x ¯ ) ( y i y ¯ )
二维样本的相关系数
η = s x y s x s y

协方差矩阵计算
协方差矩阵
C = [ c x x c x y c y x c y y ]
其中, c x x = σ x 2 , c x y = c y x = s x y , c y y = σ y 2
计算协方差矩阵的函数调用格式
C = cov(X)
其中,X的各列均表示不同的随机变量的样本值

例9-23 征态分布的协方差矩阵
使用matlab产生4各满足标准征态分布的随机变量
并求出其协方差矩阵
四列信号相互独立

p = randn(30000, 4);
R = cov(p)

多变量正态分布的联合概率密度及分布函数
给定n组正态分布随机变量 ξ 1 , ξ 2 , , ξ n , 它们的均值分别为 μ 1 , μ 2 , μ 3 , , μ n , 可以构成一个均值向量 μ , 这些变量的协方差矩阵为 Σ 2 , 这些随机变量的联合概率密度为:
p ( x 1 , x 2 , , x n ) = 1 2 π Σ 1 e 1 2 x T Σ 2 x
其中, x = [ x 1 , x 2 , , x n ] T , μ = [ μ 1 , μ 2 , , μ n ] T

求随机变量的联合概率密度的函数调用格式
p = mvnpdf(X, μ , Σ 2 )
p = pdf(‘mvn’, X, μ , Σ 2 )
其中, X 为n列矩阵
每一列表示一个随机变量

例9-24 协方差矩阵与随机数分布
给定 μ = [ 1 , 2 ] T , Σ 2 = [ 1 , 1 ; 1 , 3 ] , 联合概率密度函数

mu1 = [-1, 2];
Sigma2 = [1 1; 1 3];
[X, Y] = meshgrid(-3:0.1:1, -2:0.1:4);
xy = [X(:), Y(:)];
p = mvnpdf(xy, mu1, Sigma2);
P = reshape(p, size(X));
surf(X, Y, P)

若协方差矩阵为对角线矩阵,新概率密度函数

Sigma2 = diag(diag(Sigma2));
p = mvnpdf(xy, mu1, Sigma2);
P = reshape(p, size(X));
surf(X, Y, P)

多变量正态分布随机数生成
产生多变量正态分布随机数的函数调用格式
R = mvnrnd( μ , Σ 2 , m)
R = random(‘mvn’, μ , Σ 2 , m)
该函数可以生成m组满足多变量正态分布的随机变量,返回的R为m x n 矩阵,每一列表示一个随机变量

例9-24 协方差矩阵与随机数分布
给定 μ = [ 1 , 2 ] T , Σ 2 = [ 1 , 1 ; 1 , 3 ] ,
二维正态分布的伪随机数的分布情况

mu1 = [-1, 2];
Sigma2 = [1 1; 1 3];
R1 = mvnrnd(mu1, Sigma2, 2000);
plot(R1(:, 1), R1(:, 2), 'o');
figure;
Sigma2 = diag(diag(Sigma2));
R2 = mvnrnd(mu1, Sigma2, 2000);
plot(R2(:, 1), R2(:, 2), 'o');

09.05 离群值检测

离群值、四分位数与盒子图
均值的意义与局限性
例:姚明给一群小朋友讲NBA经历
均值(平均身高)没有意义
中位数(median, 仲数)的定义 x 1 x 2 x n
n为奇数: x ( n + 1 ) / 2
n为偶数: ( x n / 2 1 + x n / 2 + 1 ) / 2
matlab求解: median(x)
离群值(outliers):
由中位数将向量x分成两部分
这两部分的中位数称为四分位数(quantile)
第一分位数: q 1
第二分位数: q 2 , 中位数(仲数)
第三分位数: q 3
四分位数向量: q = [ q 1 , q 2 , q 3 ]
matlab求解: q = quantile(x, 3)

四分位距(interquartile range, IQR)的定义
第3四分位数与第1四分位数的差: IQR = q 3 q 1
离群值:
正常值的区间: ( q 1 1.5 I Q R , q 3 + 1.5 I Q R )
正常值区间之外的都是离群值

盒子图绘制:boxplot(x)
上边界与下边界: ( q 1 1.5 I Q R , q 3 + 1.5 I Q R )

例9-26 盒子图绘制
一组数据,存于c9dlamp.dat文件
四分位数求值及盒子图绘制

% A = load('c9dlamp.dat');
A = load('E:\\Work\\201806\\math_4th\\c9dlamp.dat');
q = quantile(A, 3)
boxplot(A)
sort(A')

离群值检测
单变量数据
Rutgers大学 Niccolo Battistini编写的 outliers()函数
[ v 1 , v 2 ] = outliers(v, opts, α )
选项’grubbs’, quartile’
显著性水平: α

function [Y out]=outliers(X,method,alpha)

% Reports vector of observations Y which are not outliers and vector of
% observations out which are outliers according to either Grubbs' test or
% the Quartile method applied to initial vector of observations X
% 
% USAGE:    [Y out]=outliers(X,method,alpha)
% 
% INPUT:
% X         Nx1 vector of observations
% method    string (either 'grubbs' or 'quartile')
% alpha     significance level of Grubbs' test (alpha in [0,1]) or
%           range looseness parameter of Quartile method
% 
% OUTPUT:
% Y         (N-k)x1 vector of observations in X which are not outliers
% out       kx1 vector of observations in X which are outliers

% Author: Niccolo Battistini (Rutgers University)

if nargin~=3;
    error('Wrong # of arguments')
end

switch method

    % Grubbs' test

    case 'grubbs'
        z=1;
        test=false;
        while test==false;
            N=length(X);
            Xmean=repmat(mean(X),N,1); % N by 1 vector of mean of X
            Xstd=std(X); % standard deviation of X
            tcv=tinv((1-alpha)/(2*N),N-2); % t-stat critical value
            Gcv=((N-1)/sqrt(N))*sqrt(tcv^2/(N-2+tcv^2)); % G-stat CV
            [maxdev ind]=max(abs(X-Xmean));
            G=maxdev/Xstd; % G-stat
            if G>Gcv;
                out(z,1)=X(ind);
                X=X([1:N]~=ind);
                z=z+1;
                test=false;
            else
                test=true;
            end
        end
        if z==1;
            out=[];
        end
        Y=X;

    % Quartile method

    case 'quartile'
        Q1=prctile(X,25);
        Q3=prctile(X,76);
        rangedown=Q1-alpha*(Q3-Q1);
        rangeup=Q3+alpha*(Q3-Q1);
        Y=X(X>rangedown & X<rangeup);
        out=X(X<=rangedown | X>=rangeup);
end
end

多变量数据
Antonio Trujillo-Ortiz编写的函数 moutlier1()
moutlier1(X, α )

function x = ACR(p,n,alpha);
if nargin < 3,
   alpha = 0.05; %(default)
end; 
if (alpha <= 0 | alpha >= 1)
   fprintf('Warning: significance level must be between 0 and 1\n');
   return;
end;
if nargin < 2, 
   error('Requires at least two input arguments.');
   return;
end;
a = alpha;
Fc = finv(1-a/n,p,n-p-1); %F distribution critical value with p and n-p-1 degrees of freedom using the Bonferroni correction. 
ACR = (p*(n-1)^2*Fc)/(n*(n-p-1)+(n*p*Fc)); % = ((-1*((1/(1+(Fc*p/(n-p-1))))-1))*((n-1)^2))/n;
x = ACR;
return,
function moutlier1(X,alpha)
if nargin < 2, 
   alpha = 0.05;  %(default)
end 

if nargin < 1, 
   error('Requires at least one input arguments.');
end

mX = mean(X); %Means vector from data matrix X.
[n,p] = size(X);
difT = [];

for j = 1:p;
   eval(['difT=[difT,(X(:,j)-mean(X(:,j)))];']); %squared Mahalanobis distances.
end

S = cov(X);
D2T = difT*inv(S)*difT'; 
[D2,cc] = sort(diag(D2T));  %Ascending squared Mahalanobis distances.

D2C = ACR(p,n,alpha);

idx = find(D2 >= D2C);
o = cc(idx);
io = D2(idx);

if isempty(o);
    disp(' ')
    fprintf('With a given significance level of: %.2f\n', alpha);
    disp('Non observation(s) resulting as multivariate outlier(s).');
else
    disp(' ')
    disp('Table of observation(s) resulting as multivariate outlier(s).')
    fprintf('----------------------------------------------\n');  
    disp('                            D2');
    disp('Observation              observed');
    fprintf('----------------------------------------------\n');  
    fprintf(' %6.0f               %10.4f\n',[o,io].');
    fprintf('----------------------------------------------\n');  
    fprintf('With a given significance level of: %.2f\n', alpha);
    fprintf('Critical value for the maximum squared Mahalanobis distance: %.4f\n', D2C);
    disp('D2 = squared Mahalanobis distance.');
end

return,

例9-27 单变量离群值
数据表格,存于c9dlamp.dat文件
离群值检测

% A = load('c9dlamp.dat');
A = load('E:\\Work\\201806\\math_4th\\c9dlamp.dat');
[v1 v2] = outliers(A, 'grubbs', 0.05) % 95%的显著性水平

例9-28 多变量离群值检测
NBA球队数据

% 数据读入
X = [447, 149, 22.8; 401, 160, 13.5; 356, 119, 49; 338, 117, -17.7; 328, 109, 2;
    290, 97, 25.6; 284, 102, 23.5; 283, 105, 18.5; 282, 109, 21.5; 280, 94, 10.1;
    278, 82, 15.2; 275, 102, -16.8; 274, 98, 28.5; 272, 97, -85.1; 258, 72, 3.8; 
    249, 96, 10.6; 244, 94, -1.6; 239, 85, 13.8; 236, 91, 7.9; 230, 85, 6.9;
    227, 63, -19.7; 218, 75, 7.9; 216, 80, 21.9; 208, 72, 15.9; 202, 78, -8.4;
    199, 80, 13.1; 196, 70, 2.4; 188, 70, 7.8; 174, 70, -15.1];
% 离群值检测
moutlier1(X, 0.05)

检测结果图形表示
由检测结果可知,第14队数据是离群值

% 三维散点图显示
plot3(X(:, 1), X(:, 2), X(:, 3), 'o');
% x-z平面图
figure;
plot(X(:, 1), X(:, 3), 'o');
% y-z 平面图
figure;
plot(X(:, 2), X(:, 3), 'o');

09.06 参数估计与区间估计

参数估计与区间估计
求取参数与区间估计的函数调用格式
[ μ , σ 2 , Δ μ , Δ σ 2 ] = normfit(x, P c i )
[ μ , σ 2 , Δ μ , Δ s i g m a 2 ] = fittest(‘norm’, x, P c i )
其中, x = [ x 1 , x 2 , , x n ] T 是实测一组数据
μ , σ 2
Δ μ Δ σ 2
P c i

给定分布的均值与方差计算
函数norminv()可用于求出相关值,这样就可以得出所需的参数
Gamma分布的参数( a , λ ): gamfit()
Rayleigh分布的参数估计函数为: raylfit()
均与分布的参数估计函数为: unifit()
Poisson分布的参数估计函数为: poissfit()
可以调用 fittest 函数

例9-29 Gamma分布的参数估计
试用 gamrnd() 函数生成一组 a = 1.5, λ = 3 的伪随机数
用参数估计的方法以不同的置信度进行估计
选择置信度为 90%, 92%, 95%, 98%
置信度,估计值,估计区间

p = gamrnd(1.5, 3, 30000, 1);
Pv = [0.9, 0.92, 0.95, 0.98];
A = [];
for i = 1: length(Pv)
    [a, b] = gamfit(p, Pv(i));
    A = [A; Pv(i), a(1), b(:,1)', a(2), b(:, 2)'];
end;
A

多元线性回归与区间估计
输出信号y
n路输入信号: x 1 , x 2 , , x n
线性组合
y = a 1 x 2 + a 2 x 2 + a 3 x 3 + + a n x n
其中, a 1 , a 2 , , a n 为待定系数
线性回归
求解线性代数方程

得到的实测数据满足的关系式
实测数据
y 1 = x 11 a 1 + x 12 a 2 + + x 1 n a n + ε 1
y 2 = x 21 a 2 + x 22 a 2 + + x 2 n a n + ε 2

y m = x m 1 a 1 + x m 2 a 2 + + x m n a n + ε m
观测数据组与未知待定参数个数不同
尽量使得总体误差最小

参数估计的最小二乘求解
目标函数选择为使得残差的平方和最小:
J = min a ε T ε
系数向量a为 a ^ = ( X T X ) 1 X T y
求最小二乘解的函数调用格式
a = X   y a = i n v ( X X ) X y
求解函数, 1-a为用户指定的置信度
[ a ^ , a c i ] = regress(y, X, a)

例9-30 参数估计与区间估计
给定线性回归方程如下,生成120组随机输入值 x i
计算输出向量y,估计出系数 a i
y = x 1 1.232 x 2 + 2.23 x 3 + 2 x 4 + 4 x 5 + 3.792 x 6
用最小二乘计算公式

a = [1, -1.232, 2.23, 2, 4, 3.792]';
X = randn(120, 6);
y = X*a;
a1 = inv(X'*X)*X'*y
% 计算出98%的置信度区间
[a, aint] = regress(y, X, 0.02)

混叠噪声的信号参数估计
给输出样本叠加N(0, 0.5)区间的正态分布噪声
再绘制参数估计的置信区间

yhat = y + sqrt(0.5)*randn(120, 1);
[a, aint] = regress(yhat, X, 0.02)
errorbar(1:6, a, aint(:,1)-a, aint(:,2)-a)

将噪声方差设为0.1

yhat = y + sqrt(0.1)*randn(120, 1);
[a, aint] = regress(yhat, X, 0.02)
errorbar(1:6, a, aint(:, 1)-a, aint(:, 2)-a)

非线性函数的最小二乘参数估计与区间估计
假设数据 x i , y i , i = 1 , 2 , , N 满足原型函数
y ^ ( x ) = f ( a , x )
原函数严格写成
y ^ ( x ) = f ( a , x ) + ε
引入目标函数:
I = min a i = 1 N [ y i y ^ ( x i ) ] 2 = min a i = 1 N [ y i f ( a , x i ) ] 2

参数估计的函数调用格式
最小二乘拟合: [a, r, J] = nlinfit(x, y, fun, a0)
由置信度为95%的置信区间 : c = nlparci(a, r, J)
与函数lsqcurvefit()的功能相似

例9-31 参数与区间估计
原型函数 y ( x ) = a 1 e a 2 x + a 3 e a 4 x sin ( a 5 x )
95%置信度的置信区间
叠加均匀分布的噪声信号再进行参数与区间估计

f = @(a, x)a(1)*exp(-a(2)*x) + ...
    a(3)*exp(-a(4)*x).*sin(a(5)*x);
x = 0: 0.1: 10;
y = f([0.12, 0.213, 0.54, 0.17, 1.23], x);
[a, r, j] = nlinfit(x, y, f, [1;1;1;1;1]);
a
ci = nlparci(a, r, j)

叠加噪声后估计
样本点数据 y i
叠加上[0, 0.02] 区间均匀分布的噪声信号

y = f([0.12, 0.213, 0.54, 0.17, 1.23], x) ...
    + 0.02*rand(size(x));
[a, r, j] = nlinfit(x, y, f, [1;1;1;1;1]),
ci = nlparci(a, r, j)
errorbar(1:5, a, ci(:, 1)-a, ci(:, 2)-a)

09.07 统计假设检验

统计假设检验的概念及步骤
为什么要假设检验?
生产一批灯泡,标明寿命,怎么标?
产品设计指标(预期寿命)
随机选n个产品,测出相关的参数
检验是否合格
假设检验的一般步骤
先假设总体具有某种统计特征
然后再检验这个假设是否可信
这种方法称为“统计假设检验方法”
统计假设检验在统计学中是有重要地位的

假设检验的步骤
做出假设–产品合格: H 0 : μ = μ 0
随机选择n个产品,测出均值 x ¯ 与标准差s
构造统计量 μ = n ( x ¯ μ 0 ) / s , 满足N(0, 1)分布
求出逆概率分布 K α / 2 K α / 2 1 2 π e x 2 / 2 d x < 1 α
K α / 2 = norminv(1 - α /2, 0, 1)
K α / 2 = icdf(‘norm’, 1 - α / 2 , 0, 1)
做出结论:若| μ | < K α / 2 , 不能拒绝假设

例9-34 工艺变化的强度检验
已知某产品的平均强度 μ 0 = 9.94 k g
现改变工艺,在新产品中随机抽取200件
平均强度为: x ¯ = 9.73 k g
标准差为: s = 1.62 k g
问改变工艺对产品强度有无显著影响
引入两个命题:
{ H 0 : μ = μ 0 n o s i g n i f i c a n t c h a n g e H 1 : r e j e c t H 0

选取统计量 μ = n ( x ¯ μ 0 ) s
K α / 2 K α / 2 1 2 π e x 2 / 2 d x < 1 α | μ | < K α / 2
该统计量满足标准正态分布N(0, 1)

n = 200;
mu0 = 9.94;
xbar = 9.73;
s = 1.62;
u = sqrt(n)*(mu0 - xbar)/s
alpha = 0.02;
K = norminv(1 - alpha/2, 0, 1),
H = abs(u) < K

两组数据是否有明显差异
有两组数据,第一组随机选 n 1 个样本,第二组 n 2 个样本
假设检验的步骤
做出假设(没有差异) – H 0 : μ 1 = μ 2
构造T分布统计量 t = x ¯ 1 x ¯ 2 s 1 2 / n 1 + s 2 2 / n 2
k = min( n 1 1 , n 2 1 )
T 0 = t i n v ( α / 2 , k ) , o r T 0 = i c d f ( t , α / 2 , k )
若|t| < | T 0 |, 不能拒绝

例9-35 失眠药物的药效评价
失眠病患者,随机分成两组, 各10人
不同组使用不同药物,测延长睡眠小时数
A 1.9 0.8 1.1 0.1 0.1 4.4 5.5 1.6 4.6 3.4 B 0.7 1.6 0.2 1.2 0.1 3.4 3.7 0.8 0 2
两种药物是否有显著差异?

x = [1.9, 0.8, 1.1, 0.1, -0.1, 4.4, 5.5, 1.6, 4.6, 3.4];
y = [0.7, -1.6, -0.2, -1.2, -0.1, 3.4, 3.7, 0.8, 0, 2];
n1 = length(x);
n2 = length(y);
k = min(n1-1, n2-1);
t = (mean(x) - mean(y)) ...
    /sqrt(std(x)^2/n1 + std(y)^2/n2)
a = 0.05;
T0 = tinv(a/2, k),
H = abs(t) < abs(T0)
% 图解分析
boxplot([x.', y.'])

正态分布的均值假设检验
已知一组数据
该数据复合正态分布,且已知其标准差为 σ
假设其均值为 μ
如何检验? H 0 : μ = μ 0
[H, s, μ c i ] = ztest(X, μ 0 , σ , α )
如果未知数据的标准差,如何检验?
[H, s, μ c i ] = ttest(X, μ 0 , α )

例9-36 正态分布的均值假设检验
生成一组400个正态分布随机数
均值为1,标准差为2
由数据检验以下若标准差 σ -2,数据的均值是否为1

r = normrnd(1, 2, 400, 1);
[H, p, ci] = ztest(r, 1, 2, 0.02)
% 如果未知标准差,检验均值是否为1
[H, p, ci] = ttest(r, 1, 0.02)

正态性假设检验
测得一组数据,检验其是否满足正态分布
Jarque-Bera假设检验
[H, s] = jbtest(X, α )
Lilliefors假设检验
[H, s] = lillietest(X, α )
如果满足正态分布,则找出均值与方差
[ μ , σ , μ c i , σ c i ] = normfit(X, α )
图形验证: normplot(X)

例9-37 判定分布是否为正态分布
前面给出的表格,文件 c9dlumen.dat
正态性判定,并得出正态分布参数

% X = load('c9dlumen.dat');
X = load('E:\\Work\\201806\\math_4th\\c9dlumen.dat');
[H, p] = jbtest(X, 0.05)
[mu1, sig1, mu_ci, sig_ci] = normfit(X, 0.05)
normplot(X)

例9-38 非正态分布的检验结果
生成一组400个Rayleigh分布数据
正态性检验结果

X = raylrnd(1.5, 400, 1);
[H, p, c, d] = jbtest(X, 0.05)
% 图形验证
normplot(X)

任意分布的Kolmogorov-Smirnov检验
Kolmogorov-Smirnov检验是检验任意已知分布函数的一种有效的假设检验算法
函数调用格式: [H, s] = kstest(X, cdffun, α )
其中,cdffun为两列均值, 第一列为自变量,第二列应该为要检验的分布函数在自变量处的值
某些分布的图形验证: probplot()

例9-40 Rayleigh分布的检验
生成一组Rayleigh分布数据
对生成的随机数进行假设检验,是否满足分布
生成Rayleigh分布的数据

r = raylrnd(1.5, 400, 1);
b = raylfit(r)
% 假设检验
s = sort(r);
[H, p] = kstest(s, [s raylcdf(s, b)], 0.05)
% 图形验证
probplot('rayleigh', r)

09.08 方差分析

方差分析
方差分析(analyysis of variance, ANOVA)是应该遗传学家,统计学家 Ronald Fischer 提出的一种分析方法
方差分析技术是假设检验的拓展
H 0 : μ 1 = μ 2 = = μ N
单因子方差分析
双因子方差分析
多因子方差分析

单因子方差分析
单因子方差分析就是指对一些观察来说,只有一个外界因素可能对观测的现象产生影响
求解单因子方差分析的函数调用格式:
[p, tab, stats] = anova1(X)
其中,X为需要分析的数据
若 p < α , 则拒绝假设
H 0 : μ 1 = μ 2 = = μ N

单因子方差分析表
ANOVA表
s o u r c e s u m o f s q u a r e s D O F m e a n s q u a r e s F p r o b a b i l i t y p g r o u p s S S A = i n i y ¯ i , : 2 N y ¯ : , : 2 I 1 M S S A = S S A I 1 M S S A M S S E p = P ( F I 1 , N I > c ) e r r o r S S E = i k y i , k 2 i n i y ¯ i , : 2 N I M S S E = S S E N I t o t a l S S T = i k y i , k 2 N y ¯ : , : 2 N 1
p的值是不是很小
盒子图的观察

例9-42 单元素方差分析
有5种药物比较疗效
将30个病人随机地分成5组
每组使用同一种药物,并记录病人治疗时间
评价疗效–5种药物疗效是否有显著不同?
5种药物疗效数据

A = [5, 4, 6,7,9; 8, 6, 4, 4, 3; ...
    7,6,4, 6, 5; 7, 3, 5, 6, 7; ...
    10, 5, 4, 3, 7; 8, 6, 3, 5, 6];
mean(A),
[p, tbl, stats] = anova1(A)

盒子图的直接观察

双因子方差分析
如果有两种因子可能影响到某现象的统计规律,则应该引入双因子方差分析的概念
观测量y可以表示为一个三维数组 y i , j , k , 表示第1个因子取第i个水平,第二个因子取第j个水平时,组内第k个对象的观测指标
三个假设:
α i
H 1 : α 1 = α 2 = = α I
β j
H 2 : β 1 = β 2 = = β J
γ k
H 3 : γ 1 = γ 2 = = γ I J
三个概率的定义及意义
p A < c 1 H 1
p A = P ( F [ I 1 , I J ( K 1 ) ] > c 1 )
p B < c 2 , H 2
p B = P ( F [ J 1 , I J ( K 1 ) ] > c 2 )
p A B < c 3 , H 3
p A B = P ( F [ ( I 1 ) ( J 1 ) , I J ( K 1 ) ] > c 3 )
双因子方差分析:[p, tab, stats] = anova2(X)

双因子方差表
s o u r c e s q u a r e o f s u m s D O F m e a n s q u a r e d e r r o r F p f a c t o r A S S A = J K i y ¯ i , : , : 2 I J K y ¯ : , : , : 2 I 1 M S S A = S S A I 1 M S S A M S S E p A f a c t o r B S S B = I K i y ¯ : , j , : 2 I J K y ¯ : , : , : 2 J 1 M S S B = S S B J 1 M S S B M S S E p B i n t e r a t i o n S S A B = K i j y ¯ i , j , : 2 J K i y ¯ i , : , : 2 + I J K y ¯ : , : , : 2 ( I 1 ) ( J 1 ) M S S A B = S S A B ( I 1 ) ( J 1 ) M S S A B M S S E p A B e r r o r s S S E = i j k y i , j , k 2 K i j y ¯ i , j , : 2 I J ( K 1 ) M S S E = S S E I J ( K 1 ) t o t o a l S S T = i j k y i , j , k 2 I J K y ¯ : , : , : 2 I J K 1

例9-43 树的生长地、树种的影响
比较3种松树在4个不同地区的生长情况有无差别
在每个地区对每种松树随机地选择5株
测量它们的胸径
生长地、树种

B = [23, 15, 26, 13, 21, 25, 20, 21, 16, 18, 21, 17, 16, 24, 27, 14, 17, 19, 20, 24;
    28, 22, 25, 19, 26, 30, 26, 26, 20, 28, 19, 24, 19, 25, 29, 17, 21, 18, 26, 23;
    18, 10, 12, 22, 13, 15, 21, 22, 14, 12, 23, 25, 19, 13, 22, 16, 12, 23, 22, 19];
anova2(B', 5);
[p a b] = anova2(B', 5);
% 均值计算
C = [];
for i = 1: 3
    for j = 1: 4
        C(i, j) = mean(B(i, [1:5] + (j-1)*5));
    end;
end;
C = [C; mean(C)];
C = [C mean(C')']

多因子方差分析
manoval()函数进行多因子方差分析

09.09 主成分分析

主成分分析
假设某一事件发生可能受 x 1 , x 2 , , x N 因素影响,识别出到底哪些因素起主要作用,哪些可以忽略
而实测数据共有M组
这样可以假设这些数据由一个 N × M 矩阵X表示
记该矩阵的每一列的均值为 x ¯ i , i = 1 , 2 , , N
mean(X)
由X建立起协方差矩阵R
r i j = k = 1 M ( x k i x ¯ i ) ( k k j x ¯ j ) k = 1 M ( x k i x ¯ i ) 2 k = 1 M ( x k j x ¯ j ) 2
R = corr(X -mean(X))
由R矩阵可以分别得出
特征向量 e i
对应的排序特征值 λ i , λ 1 λ 2 λ N 0
特征向量矩阵的每一列进行相应的归一化
e i = 1 j = 1 N e i j 2 = 1
[e, d] = eig(R); d = diag(d);
d = d(end: -1: 1); e = fliplr(e);

找出哪些因素贡献大
计算主成分贡献率和累计贡献率
主成分贡献率: γ i = γ i k = 1 N λ k
累计贡献率: δ i = k = 1 i λ k k = 1 N λ k
若前n个特征值的累计贡献率大于 85% ~ 95%
可以认为这n个因素是原问题的主成分
d/sum(d)

构造变换矩阵
建立新变量坐标 Z = XL,即
{ z 1 = l 11 x 1 + l 21 x 2 + + l N 1 x N z 2 = l 12 x 1 + l 22 x 2 + + l N 2 x N z N = l 1 N x 1 + l 2 N x 2 + + l N N x N
其中变换矩阵第i列的系数 l j i 可以计算 l j i = λ i e j i
D = [d’; d’; \cdots; d’];
L = real(sqrt(D)).*e, Z = X*L

降维矩阵的构造
若前n个成分做主成分,则矩阵L的m列以后各值应该趋于0,上式化为
{ z 1 = l 11 x 1 + l 21 x 2 + + l N 1 x N z n = l 1 n x 1 + l 2 n x 2 + + l N n x N
即,在适当的线性变换下,原来的N维问题就可以简化成n维问题

例9-44 主成分分析的降维处理
假设某三维曲线上的样本点由下列函数直接生成
x = t cos 2 t , y = t sin 2 t , z = 0.2 x + 0.6 y
试用主成分分析的方法对其降维处理

t = [0: 0.1: 3*pi]';
x = t.*cos(2*t);
y = t.*sin(2*t);
z = 0.2*x + 0.6*y;
X = [x y z];
R = corr(X);
[e, d] = eig(R),
d = diag(d),
plot3(x, y, z)
% 降维处理
d = d(end:-1:1);
e = fliplr(e);
D = [d'; d'; d'];
L = real(sqrt(D)).*e,
Z = X*L;
% 降维效果
plot(Z(:, 1), Z(:,2))

降维矩阵与坐标变换(Z =XL)
L = [ 0.184 0.9829 0 0.9653 0.261 0 0.9975 0.0713 0 ] { z 1 = 0.1840 x + 0.9653 y + 0.9975 z z 2 = 0.9829 x + 0.2610 y 0.0713 z

猜你喜欢

转载自blog.csdn.net/longji/article/details/80745496