6.数据分析(1) --描述性统计量和线性回归(1)

2022-07-27 08:11:30 浏览数 (1)

上一篇文章分析了信号的处理相关内容,参见:

5.信号处理(1) --常用信号平滑去噪的方法

在针对非物理信号分析的时候,例如用户数、用户经常出入的地点、疾病感染人数等,这部分涉及到数据分析知识,本文分享一下Matlab常用的描述性统计量函数和线性回归的基本应用。


1、Matlab常用描述性统计量

函数

说明

max

最大值

mean

平均值或均值

median

中位数值

min

最小值

mode

出现次数最多的值,也就是常说的众数

std

标准差

var

方差,用于度量值的分散程度

1.1、计算最大值、均值和标准差

使用 MATLAB 函数计算一个 24×3 矩阵(称为 count)的描述性统计量。MATLAB 为矩阵中的每列独立计算这些统计信息。

代码语言:javascript复制
a = rand(24,3)
max_a = max(a)
miu_a = mean(a)
middle_a = median(a)
sigma_a = std(a)
min_a = min(a)
mod_a = mode(a)
var_a = var(a)

max_a =
         0.978680649641159         0.984063724379154         0.999080394761361
miu_a =
         0.492415490012177         0.428215549166278         0.528270961924493
middle_a =
         0.509533283332691         0.395097786468656         0.554535346962252
sigma_a =
         0.304479616155163         0.293605537051363         0.307838082022735
min_a =
        0.0286741524641061         0.015487125636019         0.032600820530528
mod_a =
        0.0286741524641061         0.015487125636019         0.032600820530528
var_a =
        0.0927078366539956        0.0862042113872195         0.094764284743436

要获取每个数据列中最大数据值所在的行号,请指定另一个输出参数 index 以返回行索引。例如:

代码语言:javascript复制
[mx,index] = max(a)

这些结果是

代码语言:javascript复制
mx =
         0.978680649641159         0.984063724379154         0.999080394761361
index =
     4    17    18

此处,变量 mx 是行向量,它包含三个数据列中每个列中的最大值。变量 index 包含每列中对应于最大值的行索引。

要找到整个 a 矩阵中的最小值,请使用语法 a(:) 将 24×3 矩阵转换为 72×1 列向量。然后,要找到该单一列中的最小值,请使用以下语法:

min(count(:))

代码语言:javascript复制
>> min(a(:))

ans =
         0.015487125636019
%% 第二种方法:多次求最小值
>> min(min(a))
ans =
         0.015487125636019

1.2、减去均值

在信号处理的时候,由于系统的随机误差,一般都会进行进行均值操作,从数据中减去均值也称为去除线性趋势。

代码语言:javascript复制
% 获取矩阵的行数和列数
[n,p] = size(a)
% 计算每列的均值
mu = mean(a)
% 生成一个列均值的矩阵,维度同a矩阵
MeanMat = repmat(mu,n,1)
% 减去均值
x = a - MeanMat

2、不一致的数据处理

数据分析的时候,数据难免有异常值需要提出,比如NULL、NaN等,还有些点显著偏离了其他数据。在某些情况下,可合理地将这些点视为离群值,即与其余数据不一致的数据值。

以下示例说明如何从 24×3 矩阵 a 中的三个数据集中移除离群值。这儿离群值定义为偏离均值超过三倍标准差的值。

注:除非你确信数据类型,否则请谨慎对待数据更改。去除离群值对标准差的影响大于对数据均值的影响。删除一个离群值点会导致新标准差变小,从而可能导致其余一些点似乎又成为离群值!

代码语言:javascript复制
a = rand(24,3)
a(2,3) = 4.5;a(20,2) = -2.5; % 人为添加离群值
miu_a = mean(a)
sigma_a = std(a)

命令行窗口显示

代码语言:javascript复制
miu_a =
          0.45491979740325         0.401454279964542         0.64909778183130
sigma_a =
         0.256407192970791         0.702637696845351         0.872813153493999

将偏离均值三倍标准差以上的值视为离群值时,请使用以下语法确定 count 矩阵的每列中的离群值数量:

代码语言:javascript复制
[n,p] = size(a);
MeanMat = repmat(miu_a,n,1);
SigmaMat = repmat(sigma_a,n,1);
outliers = abs(a - MeanMat) > 3*SigmaMat;
nout = sum(outliers) 

该过程返回每列中的离群值数量,如下:

代码语言:javascript复制
nout = 0     1     1

在 a 的第二和第三个数据列中各有一个离群值,其他的列中都没有。

要删除包含该离群值的整行数据,请键入

代码语言:javascript复制
a(any(outliers,2),:) = [];

此处,当 outliers 向量中有任何非零元素时,any(outliers,2) 返回 1。参数 2 指定 any 继续处理 count 矩阵的第二个维度 - 列。

线性回归下次写吧,今天先到这儿

0 人点赞