在数据分析和数学统计的时候,常常需要对矩阵的平均数、中位数、方差、标准差、相关系数以及协方差进行计算,这些数据可以反映一组数的整体大小、离散程度、相关性等一系列性质,这些数据是进行数据处理时的重要指标。
目录
1、平均数
平均数即是一组数据的算术平均数,一般求解的方法是将一组数据中的所有元素的值相加然后再除以所有元素的个数。但MATLAB提供了mean函数用于对于数据的平均数进行计算,调用的格式如下所示(其中V表示的是向量,A表示的是一个矩阵):
- mean(V):求向量X的所有数据的算术平均值。
- mean(A):返回一个行向量,行向量每一个的元素是矩阵A的每一列的算术平均值。
- mean(A,num):当num的值是1时,此时该函数的功能与mean(A)相同,返回的是行向量,行向量的每一个元素对应的是矩阵中每一列的算术平均值;当num的是2的时候,返回的是一个列向量,列向量的每一个元素对应的是矩阵A中每一行的算术平均值。
- mean(mean(A)):对于矩阵的整体所有元素计算平均值。
(1)下面对于一个向量进行求算术平均值的计算,例如计算向量V=[23,56,89,34,12,34,54,67]的算术平均值,利用MATLAB代码对其进行求解,代码如下所示:
V=[23,56,89,34,12,34,54,67];
B=mean(V)
结果计算可以得到:B的值为 46.125。
(2)如果对于一个矩阵的每一列的算术平均值进行计算,矩阵如下所示:
通过MATLAB计算每一列的算术平均值的代码如下所示:
A=[83,38,71,58;89,72,64,33;42,12,57,68;34,71,92,48];
B=mean(A)
结果返回的行向量如下所示:
B =
62.0000 48.2500 71.0000 51.7500
或者向上面第3点所讲的一样,使用mean(A,1)同样可以得到相同的值,代码如下所示:
A=[83,38,71,58;89,72,64,33;42,12,57,68;34,71,92,48];
B=mean(A,1)
结果同样为:
B =
62.0000 48.2500 71.0000 51.7500
(3)如果要是计算矩阵中每一行的算法平均值,可以使用mean(A,2)来得到;对于同一个矩阵,计算每一行的算法平均值代码如下所示:
A=[83,38,71,58;89,72,64,33;42,12,57,68;34,71,92,48];
B=mean(A,2)
运行的结果如下所示:
B =
62.5000
64.5000
44.7500
61.2500
(4)如果想要计算矩阵所有元素的算术平均值,可以使用mean(mean(A)),代码如下所示:
A=[83,38,71,58;89,72,64,33;42,12,57,68;34,71,92,48];
B=mean(mean(A))
最终的运行结果为58.25。
通过MATLAB的mean对于矩阵元素的平均值进行计算是比较方便的,在处理数据比较多的矩阵的时候能够发挥一定的优势。
2、中位数
中位数指的是一组数据中,根据数值大小排序之后为中间项的数,如果所有数的个数为奇数的话,那么经过排序之后中间的数就是中位数,如果所有数的个数为偶数的话,那么中位数是经过排序之后之后中间两项的平均数即为中位数。中位数在统计的时候可以反映一组数据的中等指标。MATLAB中提供了median函数对于中位数进行求解(其中V表示的是向量,A表示的是矩阵),用法如下所示:
- median(V):得到一组向量的中位数。
- median(A):返回的是行向量,其中行向量的每个值对应的是矩阵A中每一列的中位数。
- median(A,num):当num为1的时候,与median(A)作用相同,得到的是一个行向量,行向量的每一个是矩阵中对应列的中位数;当num为2的时候,得到的是一个列向量,列向量的每个元素是矩阵中对应行的中位数。
- median(median(A)):返回一个数,计算的是矩阵A的每一列的中位数组成的行向量的中位数。
(1)例如,对于本文上面的向量V进行求解中位数操作,代码如下所示:
V=[23,56,89,34,12,34,54,67];
B=median(V)
求个该向量的所有元素的中位数为44。
(2)如果使用median函数求解矩阵A中每一列的中位数的代码如下所示:
A=[83,38,71,58;89,72,64,33;42,12,57,68;34,71,92,48];
B=median(A)
运算的结果如下所示:
B =
62.5000 54.5000 67.5000 53.0000
或者如下所示的方式:
A=[83,38,71,58;89,72,64,33;42,12,57,68;34,71,92,48];
B=median(A,1)
此时使用该写法运行出来的结果与median(A)相同。
(3)如果想要计算一个矩阵中每个行的所有元素的中位数,可以使用median(A,2),该函数返回的是一个列向量,该向量的每一个元素对应着矩阵中每一行的中位数。代码如下所示:
A=[83,38,71,58;89,72,64,33;42,12,57,68;34,71,92,48];
B=median(A,2)
运行之后结果如下所示:
B =
64.5000
68.0000
49.5000
59.5000
(4)当median(median(A))返回的结果是一个数值,但是这里需要注意的是,该函数返回的数不是整个矩阵的中位数,而是矩阵每一列的中位数组成的向量中再取中位数。例如:
A=[83,38,71,58;89,72,64,33;42,12,57,68;34,71,92,48];
B=median(median(A))
运算的最终结果为58.5,通过实际运算可以得到该矩阵的中位数为60,而58.5的计算结果是该矩阵的每一列的中位数组成的行向量[62.5,54.5,67.5,53.0]的中位数,经过计算,该行向量的中位数是58.5,正好验证了结论。
3、标准差
在数学统计中,标准差可以对于表示一组数据的离散程度,标准差越小那么这组数据的离散程度越小,标准差越大,那么这组数据的离散程度就越大。
在MATLAB中,求解标准差的公式有两个,其中总体样本差的公式如下所示:
样本标准差的公式如下所示:
MATLAB中对于标准差进行计算的函数有std。函数std的调用方式有std(A,flag,num),当num=1的时候,计算的是矩阵各列的标准差,当num=2的时候,计算的是矩阵各行的标准差;当flag=0的时候,是按照求解标准差公式计算的标准差,当flag=1时,是按照样本标准差公式计算的标准差。
针对上面的公式A,分别使用四种不同的情况使用std函数对于该矩阵进行计算标准差,代码如下所示:
A=[83,38,71,58;89,72,64,33;42,12,57,68;34,71,92,48];
Avg=mean(mean(A))
std1=std(A,1,1)
std2=std(A,1,2)
std3=std(A,0,1)
std4=std(A,0,2)
运行的结果如下所示:
Avg =
58.2500
std1 =
24.2590 25.0037 13.0958 12.9301
std2 =
16.6808
20.3039
21.0401
22.1289
std3 =
28.0119 28.8718 15.1217 14.9304
std4 =
19.2614
23.4450
24.2951
25.5522
上面所示的四种结果分别对应了std函数四种不同情况。
4、方差
在数学统计中,除了标准差之外,方差同样可以用来表示数据的离散程度。方差越大,表示该组数据的离散程度越大,方差越小,表示该组数据的离散程度越小。MATLAB中提供了var函数表示对于一组数据的方差进行计算。方差是标准差的平方,和标准差一样,方差同样也有四种不同的形式,var(A,flag,num),当flag=0时,表示使用求解标准差公式的平方计算的方差,当flag=1时,表示的是用样本标准差公式的平方计算的方差,当num=1的时候,计算的是矩阵各列的方差,当num=2的时候,计算的是矩阵各行的方差。
例如,对于上面的矩阵,对其进行四种不同的情况的方差计算的代码如下所示:
A=[83,38,71,58;89,72,64,33;42,12,57,68;34,71,92,48];
Avg=mean(mean(A))
var1=var(A,1,1)
var2=var(A,1,2)
var3=var(A,0,1)
var4=var(A,0,2)
运算后的结果如下所示:
var1 =
588.5000 625.1875 171.5000 167.1875
var2 =
278.2500
412.2500
442.6875
489.6875
var3 =
784.6667 833.5833 228.6667 222.9167
var4 =
371.0000
549.6667
590.2500
652.9167
5、相关系数
在数学中,相关系数表示的是数据之间的相关程度的一个指标,当相关系数越大,那么相关程度就越高,相关系数是一个相对的概念,范围在[-1,1]之间。相关系数的求解公式如下所示:
在MATLAB中使用corrcoef函数和corr函数来计算相关系数,其中调用格式如下所示:
- corr(x,y):返回的是两个矩阵之各列之间相关系数矩阵,其中x和y必须是列向量。
- corrcoef(x,y):返回的是一个相关系数矩阵。如果x和y是矩阵的话,corrcoef(x,y)会先转换为一个序列再进行计算。
例如下面这个例子:
A=[43,56,36,75,34,23,45];
B=[76,45,34,24,94,53,71];
[r,p]=corr(A',B')
x=corrcoef(A,B)
运行后的结果如下所示:
r =
-0.5058
p =
0.2468
x =
1.0000 -0.5058
-0.5058 1.0000
由上面的数据可以看出得到相关系数为-0.5058。而corrcoef函数返回的是相关系数矩阵。
6、协方差
协方差是统计学的概念,用来衡量两个变量之间的总体误差,如果两个变量具有一定的相关性的话,那么使用协方差来衡量影响。协方差的计算公式如下所示:
MATLAB中提供了cov函数用于计算两个相关的数据序列之间的协方差。MATLAB中cov函数的基本调用方式如下所示(其中V表示向量,A表示矩阵):
- cov(V):返回的是向量的方差。
- cov(A):返回的是一个矩阵,该矩阵是以每一列为变量,每一行为样本的矩阵。其中对角线的数是每一列方差,非对角线上是协方差。
- cov(X,Y):计算X和Y之间的协方差,其中X和Y之间必须是相同大小的。
(1)当V是向量时,对于返回的值是否是方差进行验证,例如:
A=[34,45,73,32,65,72];
B=var(A)
C=cov(A)
结果如下所示:
B =
353.9000
C =
353.9000
由上面的结果可以看出,对于一个向量使用cov函数的话,那么计算结果和方差是相同的。
(2)当A是一个矩阵的时候,如下面这个例子:
A=[34,45,73;54,37,81;44,19,15];
B=cov(A)
C=var(A)
结果如下所示:
B =
1.0e+03 *
0.1000 -0.0400 0.0400
-0.0400 0.1773 0.4387
0.0400 0.4387 1.2973
C =
1.0e+03 *
0.1000 0.1773 1.2973
通过对比可以发现,通过cov函数所得到的矩阵的对角线部分是该矩阵的每一列的方差,而非对角线部分计算的是协方差。
(3)计算两个矩阵之间的协方差,例如下面这个例子:
A=[34,45,54;37,62,81;19,15,44];
B=[45,64,69;73,74,79;84,85,86];
C=cov(A,B)
运行结果如下所示:
C =
425.7778 -18.8611
-18.8611 168.9444
cov(X,Y)实际上返回的是两个矩阵之间的线型卷积,由上面的结果可以看出两组数据之间是负相关的。