有趣的中位数(median)及其应用(II) 2] 中位数的定义及其一些性质 “理论是灰色的,而生命之树常青” [Grau, teurer Freund, ist alle Theorie, Und grün des Lebens goldner Baum.] ([德]歌德) “必也正名乎” (《论语·子路》)
科学工作者习惯于先把事情定义好再说话;否则就没有互相交流的基础了。 中位数的定义是: 一个有限数目的有序实数数字集合(数字集合,通称“数集”),如果数集元素的个数是奇数,则中间那个数就是这个数集的中位数;如果数集元素的个数是偶数,则中间那2个数的算术平均值(即这2个数加起来除以2)就是这个数集的中位数。 (引用并修改自“维基百科”) 举例: 数集{2,4,1,10,9},按从小到大的顺序排列,为{1,2,4,9,10},这个数集的中位数就是4。 如果把这个数集中的数增加1个,使得数集的个数成为偶数6,例如{1,2,4,9,10,12},它的中间2个数是4和9,因此新数集的中位数是(4+9)/2=6.5。 根据定义,可以知道如果要编写一个求某个有限个数实数集的中位数的程序,需要有以下几个步骤: 1] 把数集按大小顺序排列; 2] 计算数集之中所有元素的个数,假设这个数集的元素个数是n; 3] 如果数集的元素个数n是奇数,那么数集的中位数是位于第(n+1)/2的那个数;如果n是偶数,数集的中位数则是位于第n/2个和第(n/2)+1个这两个数的算术平均数。 算术平均数大家都很熟悉,不多说了。 中位数的用处,大家特别是从中国大陆来的人可能理解得不深。 美加两国各地的房价、各城市的人口、各州的税负、各种行业的工资水平,人们的期望寿命,人体的各种数据(身高、体重、血压、血脂、血糖),等等,各种数据都可以取样组成各种有限的实数集,都是用中位数来说话,而很少用算术平均数。 因为以上这些实数集,都是离散的数量(离散量)。如果用算术平均数作代表,当数集中有少量极低端或极高端数据时,它们的算术平均数就会被扭曲,形成偏高或偏低的所谓“偏颇的(skewed)”平均数。 而把中位数作为离散数据的代表时,上述弊端就比较好地解决了。 寻找中位数,基本的工作就是把有限实数集排列次序。 排序算法已经有很多了。最有效的有以下3种: 1] 归并排序(merge sort):计算效率为 O(n log n)。1945年由John von Neumann [冯·诺·伊曼](1903-1957)首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层的分治的递归可以同时进行。 2] 堆排序 [又名“二叉树排序”](heapsort):利用“堆”这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,同时满足性质:其子结点的键值或索引总小于(或者大于)它的母节点。此算法的平均计算效率为 O(n log n) 。1964年由J. W. J. Williams发明,经R. W. Floyd(1936-2001)于同年改善并发表。 3] 快速排序(Quicksort):由C. A. R. Hoare(1934-)所发展的一种排序算法。在平均状况下,排序n个项目的计算效率为Ο(n log n);最坏状况下则为Ο(n2),但那样的状况并不常见。事实上,快速排序通常明显地比其他Ο(n log n)算法更快,因为它的内部循环(inner loop)可以在大部分架构上非常有效地实现。 再讲一些中位数的性质,与有兴趣者共同讨论。 根据以上中位数的定义,立即可得出中位数的一个引理: 在一个有序的有限实数集中,同时删去头和尾的相同个数的元素,所得到的新数集的中位数仍是原来的中位数。 中位数还有一个有用的性质: 设一个有限的实数集的中位数是M。如果这个实数集删去它之中的某些元素,可以形成它的许多子集。这些子集肯定各有自己的中位数。如果这些中位数分别有它们的最大值M(max)和最小值M(min),则有M(min) <= M <= M(max)。 [证明留给有兴趣的网友做。据说用反证法即可证明。] 我认为这个性质的用处很大。在我看来,至少有以下这些特点: 1] 根据这个性质,可以用“逐步逼近”的方法找出数集的中位数,或中位数所在的范围,或中位数的近似值。 2] 由于中位数的特性(极端值对于中位数影响很小)和这个性质,对于寻找中位数所使用的取样样本的要求(样本的大小等)很低。基本上随机取得的样本都能得到中位数,或中位数所在的范围,或中位数的近似值。 3] 由这个性质得到的大量的中位数(可因此得到一个中位数数据库),可以使得研究的数据形成非常好的拟合曲线,从而可以近似地把大量的离散数量看成连续量。 4] 寻找中位数是数据处理的基本功。在经常有新数据加入的海量数据的情况下,寻找中位数是一个计算量非常庞大而又枯燥的工作。有了上述这个中位数的性质定理,可以减少许多计算量, 5] 更重要的是,这个定理可以用于处理无限数集数据。这基于以下2个想法: 1)由于无限数集可以看作是由无限个有限数集组成的,因此可以把某一无限数集之中的一部分有限数集截取出来作为这个无限数集的某一部分(或某几个部分)的代表。 2)中位数是一个数集的分布状况的代表,因此就可以把一个中位数作为它的“出生地”的那个有限数集的代表,即把一个有限数集“浓缩”成一个中位数,然后根据1)就可以把无限数集(即无限个有限数集)转变为全部由中位数组成的一个有限数集。显然,有限数集及其中位数在无限数集之中截取的个数和部位越多,越能更好地体现所研究的无限数集的特性。 好了,中位数可以成为离散量与连续量连通的桥梁之一了。
除了把离散量向连续量推广以外,中位数还可以从一维或二维向N维推广。其基本要求是,维与维之间是互相独立的(如果维与维之间有关系,又如何处理?)。这里的维可以是X、Y、Z的三维空间,加上时间、速度、温度、湿度等维。寻找每个维中各分量/元素的中位数,使之具有最大的分布的代表性。
想不出无限维中位数的应用。不过理论上的推广好像不难。 一些胡思乱想: 1] 基因的研究发现,人体中有很大比例(据说占90%以上)是“垃圾基因(junk genes)”。人们至今不知道这些基因有什么作用,也不知道它们是如何产生的。这么大数量的基因,是否可以从处理它们各种生化指标的中位数入手,作为揭开它们真面目的第一步。 2] 较新的一门边缘学科生物信息学(bioinformatics),是利用应用数学、信息学、统计学和计算机科学的方法研究生物学(特别是有关人体基因)的问题。见 https://en.wikipedia.org/wiki/Bioinformatics 呵呵,中位数在其中是必须要寻找的。 扯远了,打住!
|