1.Introduction
最近做建模遇到一个问题,平常求一组数据的离散程度,可以用方差(相对均值)来表示,计算方法如下图所示。那么如果想计算偏离中位数的程度,这个“中差”怎么算呢?
2.Materials and methods
本研究以3×3的顺序数组A为例,首先利用 Matlab 官方函数计算其方差,如下所示。
A = [1 2 3;4 5 6;7 8 9]
var(A(:))
注:A(:)为读取数组里的所有元素,即二维数组转一维
因为 var 函数已经封装好了,所以我们自己实现一遍计算方差,试图复现并修改,代码如下。
A = [1 2 3;4 5 6;7 8 9];
rowNum = size(A,1);
colNum = size(A,2);
variancSum = 0;
for i = 1:rowNum
for j = 1:colNum
varianc = ( A(i,j) - mean(A(:)) )^2; % 减均值
variancSum = variancSum + varianc;
end
end
varianceOut= variancSum /( (rowNum*colNum)-1 );
上述代码复现了方差计算,下面将其改成“中差”,即改第9行。
A = [1 2 3;4 5 6;7 8 9];
rowNum = size(A,1);
colNum = size(A,2);
variancSum = 0;
for i = 1:rowNum
for j = 1:colNum
varianc = ( A(i,j) - prctile(A(:),50) )^2; % 减中值
variancSum = variancSum + varianc;
end
end
varianceOut= variancSum /( (rowNum*colNum)-1 );
本文使用 prctile(A,p) 来计算中值,相比 median(A) 而言,当 p=50 时,两者等同,而 p 在[1,100]中可任意取值,有利于后期改成四分位数等特定值。
3. Results and discussion
当矩阵中值等于均值时,中差等于方差,当两者不相等时,结果便会产生差异,下面以3×3的随机矩阵为例。
可以看到均值为0.11,中值为1,计算矩阵偏离两者程度,结果如下:
方差 = 2
中差 = 1.11
4. Conclusion
本文提出一种计算“中差”的方法,代表实现矩阵偏离中值的程度,同时也可以推广到针对四分位数等的偏离程度。而“中差”等指标的实际意义还有待实践和证明。
猜你喜欢:👇🏻
⭐【Matlab】一种超简单的二维矩阵降维方法
⭐【Matlab】矩阵中选取任意子矩阵
⭐【Matlab】山地建模?立体热度?怎么绘制三维曲面图?