现代科学运算-matlab语言与应用
东北大学 http://www.icourses.cn/home/ (薛定宇)
《高等应用数学问题的MATLAB求解(第四版)》
代码可在matlab r2016b 运行。
概率与概率密度函数
什么是概率?
随机事件发生的可能性
如果随机变量 ξ ξ 落入任意(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)=∫x−∞p(t)dt F ( x ) = ∫ − ∞ x p ( t ) d t
物理意义: 概率分布函数F(x)−随机变量ξ满足ξ≤x发生的概率 概 率 分 布 函 数 F ( x ) − 随 机 变 量 ξ 满 足 ξ ≤ x 发 生 的 概 率
分布函数性质:
函数F(x)单调非减函数
0≤F(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
关键词betaevgamlognncfnormt分布名称Beta分布极值分布Gamma分布对数征态分布非零F分布征态分布T分布有关参数a,bμ,σa,λμ,σk,δμ,σk关键词binoexpgeomvnnctpoissunif分布名称二项式分布指数分布几何分布多变量征态分布非零T分布Poisson分布均匀分布有关参数n,pλpμ,σk,δλa,b关键词chi2fhygenbinncx2ray1wbl分布名称χ2分布F分布超几何分布负二项式分布非零χ2分布Rayleigh分布Webull分布有关参数kp,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)=⎧⎩⎨xb2e−x22b2x≥00x<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)
离散数据的直方图与饼图表示
一组离散的检测数据 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/( b2−b1 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]=1−F(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,0≤x≤1,0≤y≤20,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=∫a−∞∫b−∞p(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+e−0.2xsin(x+0.5)]dx ∫ 1 3 [ 1 + e − 0.2 x sin ( x + 0.5 ) ] d x
假设 f(t)≥0 f ( t ) ≥ 0
N1N≈1M(b−a)∫baf(x)dx N 1 N ≈ 1 M ( b − a ) ∫ a b f ( x ) d x
∫baf(x)dx≈M(b−a)N1N ∫ a b f ( x ) d x ≈ M ( b − a ) N 1 N
计算公式: ∫baf(x)dx≈M(b−a)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')
随机变量的均值与方差
连续随机变量x的概率密度为p(x)
数学期望E[x]:
E[x]=∫∞−∞xp(x)dx E [ x ] = ∫ − ∞ ∞ x p ( x ) d x
数学方差D[x] : D[x]=∫∞−∞(x−E[x])2p(x)dx D [ x ] = ∫ − ∞ ∞ ( x − E [ x ] ) 2 p ( x ) d x
例9-18 统计量计算
用积分方法求Gamma分布(a > 0, λ λ > 0)的均值与方差
Gamma分布的概率密度 p(x)=⎧⎩⎨⎪⎪λaxa−1Γ(a)e−λx,x≥00,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¯=1n∑i=1nxi,s^2x=1n∑i=1n(xi−x¯)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=1n−1∑i=1n(xi−x¯)2 s x 2 = 1 n − 1 ∑ i = 1 n ( x i − x ¯ ) 2
s = std(x)
称 sx≥0 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λk∏i=0k−1(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=1n∑i=1nxri A r = 1 n ∑ i = 1 n x i r
matlab: Ar A r = sum(x.^r)/length(x)
该随机变量的r阶中心矩
Br=1n∑i=1n(xi−x¯)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
多变量随机数的协方差分析
随机数 (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=1n−1∑i=1n(xi−x¯)(yi−y¯) 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π−−√Σ−1e−12xTΣ−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');
离群值、四分位数与盒子图
均值的意义与局限性
例:姚明给一群小朋友讲NBA经历
均值(平均身高)没有意义
中位数(median, 仲数)的定义 x1≤x2≤⋯≤xn x 1 ≤ x 2 ≤ ⋯ ≤ x n
n为奇数: x(n+1)/2 x ( n + 1 ) / 2
n为偶数: (xn/2−1+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 = q3−q1 q 3 − q 1
离群值:
正常值的区间: (q1−1.5IQR,q3+1.5IQR) ( q 1 − 1.5 I Q R , q 3 + 1.5 I Q R )
正常值区间之外的都是离群值
盒子图绘制:boxplot(x)
上边界与下边界: (q1−1.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');
参数估计与区间估计
求取参数与区间估计的函数调用格式
[ μ,σ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(X′∗X)∗X′∗y 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=x1−1.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=mina∑i=1N[yi−y^(xi)]2=mina∑i=1N[yi−f(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)=a1e−a2x+a3e−a4xsin(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)
统计假设检验的概念及步骤
为什么要假设检验?
生产一批灯泡,标明寿命,怎么标?
产品设计指标(预期寿命)
随机选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¯1−x¯2s21/n1+s22/n2−−−−−−−−−−−√ t = x ¯ 1 − x ¯ 2 s 1 2 / n 1 + s 2 2 / n 2
k = min( n1−1,n2−1 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.8−1.61.1−0.20.1−1.2−0.1−0.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, α