集中趋势

[大谦MATLAB,dqmatlab点com]

几何均值

样本数据\({x}_{1},{x}_{2},\ldots,{x}_{n}\)的几何均值m可以根据下式求得:

\[m={\left[ \prod_{i=1}^{n} {{x}_{i}} \right]}^{\frac{1}{n}}\]

用geomean函数可以计算样本的几何均值。

m = geomean:计算样本的几何均值。对于向量,geomean(X)为数据X中元素的几何均值。对于矩阵,geomean(X)为一行向量,包含每列数据的几何均值。

下面计算给定样本数据的均值和几何均值。可见相同样本数据的均值大于或等于样本的几何均值。

code.matlab
>> x = exprnd(1,10,6);
>> geometric = geomean(x)
geometric =
0.7466    0.6061    0.6038    0.2569    0.7539    0.3478
average = mean(x)
average =
1.3509    1.1583    0.9741    0.5319    1.0088    0.8122

调和均值

样本数据\({x}_{1},{x}_{2},\cdots,{x}_{n}\)的调和平均值\(m\)定义为

\[m=\frac{n}{\sum_{i=1}^{n} {\frac{1}{{x}_{i}}}}\]

用harmmean函数可以计算样本数据的调和平均值。

m = harmmean:计算样本的调和平均值。对于向量,harmmean(X)为X中元素的调和平均值。对于矩阵,harmmean(X)为包含每列元素调和平均值的行向量。

样本均值大于或等于样本的调和平均值。

code.matlab
>> x = exprnd(1,10,6);
>> harmonic = harmmean(x)
harmonic =
0.3382    0.3200    0.3710    0.0540    0.4936    0.0907
>> average = mean(x)
average =
1.3509    1.1583    0.9741    0.5319    1.0088    0.8122

算术平均值

样本数据\({x}_{1},{x}_{2},\cdots,{x}_{n}\)的算术平均值可用下式定义:

\[\bar{x}=\frac{1}{n}\sum_{i=1}^{n} {{x}_{i}}\]

用mean函数可以计算向量和矩阵中元素的均值。其语法格式为:

m = mean(X):对于向量,mean(X)为X中元素的均值。对于矩阵,mean(X)为包含X中每列元素均值的行向量。

生成5个包含100个服从标准正态分布的随机数的样本,然后计算每个样本的算术平均值。

code.matlab
>> x = normrnd(0,1,100,5);
>> xbar = mean(x)
xbar =
    0.0727    0.0264    0.0351    0.0424    0.0752

中值

用median函数可以计算向量和矩阵中元素的中值。其语法格式如下。

m = median(X):计算样本数据的中值。中值是样本数据中心趋势的稳健估计。对于向量,median(X)为向量X中元素的中值。对于矩阵,median(X)为包含每一列中元素中值的行向量。要计算中值,需要首先进行排序,因此,计算大型矩阵的中值向量时比较费时。

在命令窗口中输入命令行

code.matlab
>> xodd = 1:5;
>> modd = median(xodd)
modd =
     3
>> meven = median(xeven)
meven =
     2.5000

下例演示了中值对于异常值的稳健性。

code.matlab
>> xoutlier = [x 10000];
>> moutlier = median(xoutlier)
moutlier =
     3

截尾均值

对样本数据进行排序以后,去掉两端的部分极值,然后对剩下的数据求算术平均值,就可以得到截尾均值。用trimmean函数可以计算截尾均值。

m = trimmean(X,percent):剔除测量值中最大0.5%的数据和最小0.5%的数据以后,计算样本X的均值。截尾均值为样本位置参数的稳健性估计。若数据中有异常值,则截尾均值为数据中心的一个更有代表性的估计。若所有数据取自同一个分布的总体,则使用样本均值比使用截尾均值更有效。

下面用蒙特卡罗法模拟正态数据的10%截尾均值相对于样本均值的有效性。如果此值小于1,则说明正态条件下截尾均值不如算术平均值有效。

code.matlab
>> x = normrnd(0,1,100,100);
>> m = mean(x);
>> trim = trimmean(x,10);
>> sm = std(m);
>> strim = std(trim);
>> efficiency = (sm/strim).^2
efficiency =
    0.9702