Matlab:统计数据分析基础


统计

描述性统计(Descriptive Statistics)

描述性统计主要研究数据的中心趋势(Central Tendency)和变异(Variation).

Matlab : 数理统计_拟合

中心趋势(Central Tendency)


函数作用
mean()计算平均值
median()计算中位数
mode()计算众数
prctile()计算百分位数
max()计算最大值
min()计算最小值

Matlab : 数理统计_拟合_02

X = [1 3 5 5 5 5 7 9 9 9 10 13 14];

mean(X);			% 数据的平均值为 7.3077
median(X);			% 数据的中位数为 7
mode(X);			% 数据的众数为 5
prctile(X, 0);		% 数据的0%分位数为 0
prctile(X, 50);		% 数据的50%分位数为 7
prctile(X, 100);	% 数据的100%分位数为 14
prctile(X, 12.6);	% 数据的12.6%分位数为 3.2760

下列函数绘制统计图表:


函数作用
bar()绘制条形图
stem()绘制针状图
area()绘制填充图
boxplot()绘制箱线图
x = 1:14;
freqy = [1 0 1 0 4 0 1 0 3 1 0 0 1 1];
subplot(1,3,1); bar(x,freqy); xlim([0 15]);
subplot(1,3,2); area(x,freqy); xlim([0 15]);
subplot(1,3,3); stem(x,freqy); xlim([0 15]);

Matlab : 数理统计_拟合_03

箱线图可以突出显示数据的四分位点.

Matlab : 数理统计_拟合_04

marks = [80 81 81 84 88 92 92 94 96 97];
boxplot(marks)
prctile(marks, [25 50 75])	% 得到 [81 90 94]

Matlab : 数理统计_拟合_05

变异(Variation)

离散程度


函数作用
std()计算数据的标准差
var()计算数据的方差

Matlab : 数理统计_插值_06

X = [1 3 5 5 5 5 7 9 9 9 10 13 14];

std(X);			% 得到 3.7944
var(X);			% 得到 14.3974
偏度(Skewness)

Matlab : 数理统计_拟合_07

偏度反映数据的对称程度

  • 数据左偏时,其偏度小于0.
  • 数据完全对称时,其偏度等于0.
  • 数据右偏时,其偏度大于0.
X = randn([10 3]);		% 构造10*3的矩阵
X(X(:,1)<0, 1) = 0; 	% 将第一列数据右偏
X(X(:,3)>0, 3) = 0;		% 将第二列数据左偏
boxplot(X, {'Right-skewed', 'Symmetric', 'Left-skewed'});
skewness(X);	% 得到 [0.5162 -0.7539 -1.1234]

Matlab : 数理统计_插值_08

峰度(Kurtosis)

峰度(Kurtosis)表征概率密度分布曲线在平均值处峰值的高低.直观来看,峰度反映了峰部的尖度.

Matlab : 数理统计_插值_09

统计推断(Inferential Statistics)

推论统计的核心即为假设检验.下列函数用于进行假设检验.


函数作用
ttest()进行T检验
ztest()进行Z检验
ranksum()进行秩和检验
signrank()进行符号秩检验
load examgrades
x = grades(:,1);
y = grades(:,2);
[h,p] = ttest(x,y);

执行上述程序,得到[h p] = [0 0.9805],表示在默认显著性水平(5%)下我们没有理由拒绝xy同分布.

拟合

多项式拟合

一元多项式拟合:polyfit()

使用polyfit(x, y, n)函数对数据xy进行n次多项式拟合.

x = [-1.2 -0.5 0.3 0.9 1.8 2.6 3.0 3.5];
y = [-15.6 -8.5 2.2 4.5 6.6 8.2 8.9 10.0];
for i=1:3
    p = polyfit(x,y,i);	% 分别进行一次,二次,三次拟合
    xfit = x(1):0.1:x(end); yfit = polyval(p,xfit);
    subplot(1,3,i); plot(x,y,'ro',xfit,yfit); 
    legend('Data points','Fitted curve', 'Location', 'southeast');
end

Matlab : 数理统计_拟合_10

多元线性拟合:regress()

使用regress(y, X)函数对数据Xy进行多元线性回归.

load carsmall;
y = MPG; x1 = Weight; x2 = Horsepower;		% 导入数据集
X = [ones(length(x1),1) x1 x2];				% 构建增广X矩阵
b = regress(y,X);							% 进行线性回归

% 下面是绘图语句
x1fit = min(x1):100:max(x1); x2fit = min(x2):10:max(x2);
[X1FIT,X2FIT] = meshgrid(x1fit,x2fit);
YFIT = b(1)+b(2)*X1FIT+b(3)*X2FIT;
scatter3(x1,x2,y,'filled'); hold on;
mesh(X1FIT,X2FIT,YFIT); hold off;
xlabel('Weight'); ylabel('Horsepower'); zlabel('MPG'); view(50,10);

Matlab : 数理统计_拟合_11

非线性拟合

对于非线性拟合,需要使用曲线拟合工具箱.在命令窗口输入cftool()打开曲线拟合工具箱.

Matlab : 数理统计_数据_12

插值

一维插值

下列函数均与一维插值有关:


函数作用
interp1(x,v)或interp1(x,v,xq)线性插值
spline(x,v)或spline(x,v,xq)三次样条插值
pchip(x,v)或pchip(x,v,xq)三次Hermite插值
mkpp(breaks,coefs)生成分段多项式
ppval(pp,xq)计算分段多项式的插值结果

下面例子演示使用interp1(x, v, xq)进行线性插值和使用spline(x, v, xq)进行三次样条插值.各参数意义如下:

  • x,v: 待插值样本点.
  • xq: 查询点,函数返回在这些点处的插值结果.
% 构造数据
x = linspace(0, 2*pi, 40); x_m = x; x_m([11:13, 28:30]) = NaN; 
y_m = sin(x_m);
plot(x_m, y_m, 'ro', 'MarkerFaceColor', 'r'); hold on; 	

% 对数据进行线性插值
m_i = ~isnan(x_m);
y_i = interp1(x_m(m_i), y_m(m_i), x);
plot(x,y_i, '-b'); hold on;

% 对数据进行三次样条插值
m_i = ~isnan(x_m);
y_i = spline(x_m(m_i), y_m(m_i), x);
plot(x,y_i, '-g'); 

legend('Original', 'Linear', 'Spline');

Matlab : 数理统计_数据_13

三次样条插值的原理在每两个样本点之间用两两相切的三次函数曲线来插值.若spline()方法不指定查询点,则返回一个结构体,其中封装了插值三次函数的系数.使用mkpp(breaks, coefs)可以创建一个类似的结构体,使用ppval(pp, xq)可以计算查询点的插值结果.

Matlab : 数理统计_插值_14

使用pchip(x, y, xq)函数可以进行三次Hermite插值,该算法同样以三次函数进行插值,但得到的曲线更平缓.

x = -3:3; y = [-1 -1 -1 0 1 1 1]; xq1 = -3:.01:3;
p = pchip(x,y,xq1);
s = spline(x,y,xq1);
plot(x,y,'o',xq1,p,'-',xq1,s,'-.')
legend('Sample Points','pchip','spline','Location','SouthEast')

Matlab : 数理统计_数据_15

二维插值

使用interp2()可以进行二维插值,向其method参数传入字符串可以指定插值算法.


方法说明连续性
'linear'(默认)在查询点插入的值基于各维中邻点网格点处数值的线性插值.C0
'spline'在查询点插入的值基于各维中邻点网格点处数值的三次插值.插值基于使用非结终止条件的三次样条.C2
'nearest'在查询点插入的值是距样本网格点最近的值.不连续
'cubic'在查询点插入的值基于各维中邻点网格点处数值的三次插值.插值基于三次卷积.C1
'makima'修改后的Akima三次Hermite插值.在查询点插入的值基于次数最大为3的多项式的分段函数,使用各维中相邻网格点的值进行计算.为防过冲,已改进 Akima 公式.C1
% 构建样本点
xx = -2:.5:2; yy = -2:.5:3; [x,y] = meshgrid(xx,yy); 
xx_i = -2:.1:2; yy_i = -2:.1:3; [x_i,y_i] = meshgrid(xx_i,yy_i);
z = x.*exp(-x.^2-y.^2);

% 线性插值
subplot(1, 2, 1); 
z_i = interp2(xx,yy,z,x_i,y_i);
surf(x_i,y_i,z_i); hold on;
plot3(x,y,z+0.01,'ok','MarkerFaceColor','r'); hold on;

% 三次插值
subplot(1, 2, 2); 
z_ic = interp2(xx,yy,z,x_i,y_i, 'spline');
surf(x_i,y_i,z_ic); hold on;
plot3(x,y,z+0.01,'ok','MarkerFaceColor','r'); hold on;

Matlab : 数理统计_插值_16



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空