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

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

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

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

09.01 常用概率分布

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

概率分布函数
由概率密度可以定义概率分布函数
F(x)=xp(t)dt F ( x ) = ∫ − ∞ x p ( t ) d t
物理意义: F(x)ξξx 概 率 分 布 函 数 F ( x ) − 随 机 变 量 ξ 满 足 ξ ≤ x 发 生 的 概 率
分布函数性质:
函数F(x)单调非减函数
0F(x)1,F()=0,F()=1 0 ≤ F ( x ) ≤ 1 , F ( − ∞ ) = 0 , F ( ∞ ) = 1

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

后缀: pdf, cdf, inv, rnd, stat, fit
例如:batapdf(), gamcdf(), raylrnd()
pdf(‘beta’, …), cdf(‘gam’, …), random(‘rayl’, …)
inv->icdf, rnd->random, fit->fittest
betaevgamlognncfnormtBetaGammaFTa,bμ,σa,λμ,σk,δμ,σkbinoexpgeomvnnctpoissunifTPoissonn,pλpμ,σk,δλa,bchi2fhygenbinncx2ray1wblχ2Fχ2RayleighWebullkp,qm,p,nv1,v2,δk,δba,b 关 键 词 分 布 名 称 有 关 参 数 关 键 词 分 布 名 称 有 关 参 数 关 键 词 分 布 名 称 有 关 参 数 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)=λxx!eλx,x=0,1,2,3, 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 λ = 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)=12πσe(xμ)22σ2 p ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2
其中, μσ2 μ 和 σ 2 分别为征态分布的均值和方差
征态分布的概率密度函数调用格式:
y=normpdf(x,μ,σ)y=pdf(norm,x,μ,σ) y = n o r m p d f ( x , μ , σ ) y = p d f ( ′ n o r m ′ , x , μ , σ )
F=normcdf(x,μ,σ)F=cdf(norm,x,μ,σ) F = n o r m c d f ( x , μ , σ ) F = c d f ( ′ n o r m ′ , x , μ , σ )
x=norminv(F,μ,σ)x=icdf(norm,F,μ,σ) 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) ( μ , σ 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)=xb2ex22b2x00x<0 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 χ 2 分布的伪随机数矩阵
A = chi2rnd(k, n, m)
A = random(‘chi2’, k, n, m)

09.02 概率计算

离散数据的直方图与饼图表示
一组离散的检测数据 x1,x2,,xn x 1 , x 2 , ⋯ , x n
数据区间(a, b), m等分, b1=a,bm+1=b b 1 = a , b m + 1 = b
(bi,bi+1)fi,fi/n 每 个 子 区 间 ( b i , b i + 1 ) 落 入 数 据 的 个 数 为 f i , 频 度 f i / n
matlab求解:
k = hist(x, b);
f = k/n;
p = f/( b2b1 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 ξ ≤ x 的概率:
P[ξx]=F(x) P [ ξ ≤ x ] = F ( x )
x1ξ2 x 1 ≤ ξ ≤ 2 的概率:
P[x1ξx2]=F(x2)F(x1) P [ x 1 ≤ ξ ≤ x 2 ] = F ( x 2 ) − F ( x 1 )
ξx ξ ≥ x 的概率: P[ξx]=1F(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)={x2+xy3,0x1,0y20,others 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=abp(x,y)dydx 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 方法近似求出 π π 的值 π4N1/N π ≈ 4 N 1 / N
数学求解公式: N1/Nπ/4 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 法计算积分
31[1+e0.2xsin(x+0.5)]dx ∫ 1 3 [ 1 + e − 0.2 x sin ⁡ ( x + 0.5 ) ] d x
假设 f(t)0 f ( t ) ≥ 0
N1N1M(ba)baf(x)dx N 1 N ≈ 1 M ( b − a ) ∫ a b f ( x ) d x
baf(x)dxM(ba)N1N ∫ a b f ( x ) d x ≈ M ( b − a ) N 1 N
计算公式: baf(x)dxM(ba)N1N ∫ 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运动仿真
粒子位置的递推公式
xi+1=xi+σΔxi,yi+1=yi+σΔyi 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]=xp(x)dx E [ x ] = ∫ − ∞ ∞ x p ( x ) d x
数学方差D[x] : D[x]=(xE[x])2p(x)dx D [ x ] = ∫ − ∞ ∞ ( x − E [ x ] ) 2 p ( x ) d x

例9-18 统计量计算
用积分方法求Gamma分布(a > 0, λ λ > 0)的均值与方差
Gamma分布的概率密度 p(x)=λaxa1Γ(a)eλx,x00,x<0 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 m = a λ , s = a λ 2

统计量数值计算
在实际中测出一组样本数据 x=[x1,x2,x3,,xn]T x = [ x 1 , x 2 , x 3 , ⋯ , x n ] T
它们的均值和方差分别为 – 样本均值方差
x¯=1ni=1nxi,s^2x=1ni=1n(xix¯)2 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)
无偏方差: s2x=1n1i=1n(xix¯)2 s x 2 = 1 n − 1 ∑ i = 1 n ( x i − x ¯ ) 2
s = std(x)
sx0 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阶原点矩
vr=xrp(x)dx v r = ∫ − ∞ ∞ x r p ( x ) d x
r阶中心矩
μr=(xμ)rp(x)dx μ r = ∫ − ∞ ∞ ( x − μ ) r p ( x ) d x
可见, v1=E[x],μ2=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;

原点矩通项表达式: vk=1λki=0k1(a+i) 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;

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

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

该随机变量的r阶中心矩
Br=1ni=1n(xix¯)r B r = 1 n ∑ i = 1 n ( x i − x ¯ ) r
matlab: Br 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 协方差计算

多变量随机数的协方差分析
随机数 (x1,y1),(x2,y2),(x3,y3),,(xn,yn) ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) , ⋯ , ( x n , y n )
为二维随机变量对(x,y)的样本
二维样本的协方差
sxy=1n1i=1n(xix¯)(yiy¯) s x y = 1 n − 1 ∑ i = 1 n ( x i − x ¯ ) ( y i − y ¯ )
二维样本的相关系数
η=sxysxsy η = s x y s x s y

协方差矩阵计算
协方差矩阵
C=[cxxcyxcxycyy] C = [ c x x c x y c y x c y y ]
其中, cxx=σ2x,cxy=cyx=sxy,cyy=σ2y 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 , ⋯ , ξ n , 它们的均值分别为 μ1,μ2,μ3,,μn μ 1 , μ 2 , μ 3 , ⋯ , μ n , 可以构成一个均值向量 μ μ , 这些变量的协方差矩阵为 Σ2 Σ 2 , 这些随机变量的联合概率密度为:
p(x1,x2,,xn)=12πΣ1e12xTΣ2x p ( x 1 , x 2 , ⋯ , x n ) = 1 2 π Σ − 1 e − 1 2 x T Σ − 2 x
其中, x=[x1,x2,,xn]T,μ=[μ1,μ2,,μn]T x = [ x 1 , x 2 , ⋯ , x n ] T , μ = [ μ 1 , μ 2 , ⋯ , μ n ] T

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

例9-24 协方差矩阵与随机数分布
给定 μ=[1,2]T,Σ2=[1,1;1,3] μ = [ − 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 μ , Σ 2 , m)
R = random(‘mvn’, μ,Σ2 μ , Σ 2 , m)
该函数可以生成m组满足多变量正态分布的随机变量,返回的R为m x n 矩阵,每一列表示一个随机变量

例9-24 协方差矩阵与随机数分布
给定 μ=[1,2]T,Σ2=[1,1;1,3] μ = [ − 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, 仲数)的定义 x1x2xn x 1 ≤ x 2 ≤ ⋯ ≤ x n
n为奇数: x(n+1)/2 x ( n + 1 ) / 2
n为偶数: (xn/21+xn/2+1)/2 ( x n / 2 − 1 + x n / 2 + 1 ) / 2
matlab求解: median(x)
离群值(outliers):
由中位数将向量x分成两部分
这两部分的中位数称为四分位数(quantile)
第一分位数: q1 q 1
第二分位数: q2 q 2 , 中位数(仲数)
第三分位数: q3 q 3
四分位数向量: q = [ q1,q2,q3 q 1 , q 2 , q 3 ]
matlab求解: q = quantile(x, 3)

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

盒子图绘制:boxplot(x)
上边界与下边界: (q11.5IQR,q3+1.5IQR) ( 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()函数
[ v1,v2 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);
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 μ , σ 2 , Δ μ , Δ σ 2 ] = normfit(x, Pci P c i )
[ μ,σ2,Δμ,Δsigma2 μ , σ 2 , Δ μ , Δ s i g m a 2 ] = fittest(‘norm’, x, Pci P c i )
其中, x=[x1,x2,,xn]T x = [ x 1 , x 2 , ⋯ , x n ] T 是实测一组数据
μ,σ2 μ 是 该 分 布 的 均 值 , σ 2 是 该 分 布 的 方 差
ΔμΔσ2 Δ μ 及 Δ σ 2 是 置 信 区 间
Pci P c i 为 用 户 指 定 的 置 信 度

给定分布的均值与方差计算
函数norminv()可用于求出相关值,这样就可以得出所需的参数
Gamma分布的参数( a,λ 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路输入信号: x1,x2,,xn x 1 , x 2 , ⋯ , x n
线性组合
y=a1x2+a2x2+a3x3++anxn y = a 1 x 2 + a 2 x 2 + a 3 x 3 + ⋯ + a n x n
其中, a1,a2,,an a 1 , a 2 , ⋯ , a n 为待定系数
线性回归
求解线性代数方程

得到的实测数据满足的关系式
实测数据
y1=x11a1+x12a2++x1nan+ε1 y 1 = x 11 a 1 + x 12 a 2 + ⋯ + x 1 n a n + ε 1
y2=x21a2+x22a2++x2nan+ε2 y 2 = x 21 a 2 + x 22 a 2 + ⋯ + x 2 n a n + ε 2

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

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

例9-30 参数估计与区间估计
给定线性回归方程如下,生成120组随机输入值 xi x i
计算输出向量y,估计出系数 ai a i
y=x11.232x2+2.23x3+2x4+4x5+3.792x6 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)

非线性函数的最小二乘参数估计与区间估计
假设数据 xi,yi,i=1,2,,N x i , y i , i = 1 , 2 , ⋯ , N 满足原型函数
y^(x)=f(a,x) y ^ ( x ) = f ( a , x )
原函数严格写成
y^(x)=f(a,x)+ε y ^ ( x ) = f ( a , x ) + ε
引入目标函数:
I=minai=1N[yiy^(xi)]2=minai=1N[yif(a,xi)]2 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)=a1ea2x+a3ea4xsin(a5x) 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)

叠加噪声后估计
样本点数据 yi 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个产品,测出相关的参数
检验是否合格
假设检验的一般步骤
先假设总体具有某种统计特征
然后再检验这个假设是否可信
这种方法称为“统计假设检验方法”
统计假设检验在统计学中是有重要地位的

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

例9-34 工艺变化的强度检验
已知某产品的平均强度 μ0=9.94kg μ 0 = 9.94 k g
现改变工艺,在新产品中随机抽取200件
平均强度为: x¯=9.73kg x ¯ = 9.73 k g
标准差为: s=1.62kg s = 1.62 k g
问改变工艺对产品强度有无显著影响
引入两个命题:
{H0:μ=μ0nosignificantchangeH1:rejectH0 { 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 μ = n ( x ¯ − μ 0 ) s
Kα/2Kα/212πex2/2dx<1α|μ|<Kα/2 ∫ 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

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

例9-35 失眠药物的药效评价
失眠病患者,随机分成两组, 各10人
不同组使用不同药物,测延长睡眠小时数
AB1.90.70.81.61.10.20.11.20.10.14.43.45.53.71.60.84.603.42 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.'])

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

你可能感兴趣的:(matlab)