【小实验】有偏分布下的均值、中位数、众数之间的关系.



2016年02月09日    Author:Guofei

文章归类: 趣文    文章编号:

版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2016/02/09/simulations.html


问题引入

在《统计数字会撒谎》里,有这样一个案例:

我相信你不是一个势利小人,而我也并不做房地产生意。但请让我们作这样的假定,并且假设,此刻你正在一条我所住的加利福尼亚山谷不远处寻找想买的房子。对你的情况进行了初步判断后,我巧舌如簧、费尽心思地让你相信附近居民的平均年收入大约有15000美元。也许这坚定了你要在此居住的信心,不管怎样,买卖最终成交了,那美妙的数字也被牢记在你的脑海。而且,既然你已经买下了房子–你有那么一点势利,当与朋友聊天时,你就会不经意地流露出你居住的地点:我住在一个相当棒的高收入小区。
一年左右过后,我们又见面了。作为某纳税者委员会的成员,我正在四处奔走,为降低税率、降低财产估价,或降低公共交通费用而呼吁。我的理由很简单,我们支付不起各种上涨的费用,毕竟,附近居民的平均年收入只有3500美元。也许你会加入到我们委员会的工作中来–你不仅势利,而且还挺吝啬。但是,当听到那可怜的2000英镑时,你也禁不住大吃一惊。到底是我现在撒谎了呢?还是一年前撒了谎?
其实这两次你都无法怪罪于我,利用统计撒谎的妙处被展现得淋漓尽致。无论是15000美元,还是3500美元,它们都是合法的平均数,计算方法也完全正确。两个数字都基于相同的数据,来自相同的居民,根据相同的收入。所有都是相同的,但显然其中有一个数据令人误解,足以与弥天大谎相媲美。
我的花招就是两次分别使用了不同的平均数“平均数”这个词宽泛的涵义帮了大忙。当一个家伙希望用数据影响公众观点,或者向其他人推销广告版面,平均数便是一个经常被使用的伎俩。

问题分析

众所周知,统计学里有这样一个简单的结论:

如果一个分布的 偏度(skewness) 为负(换句话说,服从右偏分布),那么大概有这么一个规律:

(均值)mean<(中位数)median<(众数)mode

相反,如果一个分布的偏度为正,那么大概有这么个规律:

mean>median>mode.

理解这个结论不需要任何数学基础,例如,收入的分布是一个左偏分布,穷人永远是大多数(众数是一个很低的数字),中产阶级收入高一些(中位数比众数更大),被富人平均之后,大家收入看起来很可观(均值最大)

如果只是介绍这个结论,这篇文章就太无聊了。本着万事万物皆可用算法重现的中二思想,下面写一段简单程序模拟上述结论:

x1=100*random('norm',1,1,8000,1);
x2=100*random('norm',5,1,4000,1);
x1=round(x1);
x2=round(x2);

上述代码生成了8000个穷人和4000个富人,并且假设穷人的收入均值为1,标准差为1;富人收入均值为5,标准差为1。为了使众数有意义,用round函数进行了离散化处理。

把穷人和富人放到一起:

x=[x1;x2];

做概率密度估计:

subplot(2,2,1)
ksdensity(x1)
subplot(2,2,2)
ksdensity(x2)
subplot(2,1,2)
ksdensity(x)

这里插一句,在做可视化时,很多情况下,ksdensity(概率密度估计图)比hist(分布直方图)、histfit(加入正态拟合的分布直方图)更加简洁明了,效果比较如下:

1343162-77c25ad180f2ac87

*(hist\histfit\ksdensity)*

最后是描述性统计量:

fprintf('均值是%3f\n',mean(x));
fprintf('中位数是%3f\n',median(x));
fprintf('众数是%3f\n',mode(x));
fprintf('偏度是%3f\n',skewness(x));

程序输出与结论分析:

1343162-a1c7915733d0246f

*穷人+富人*
均值是232.538583
中位数是165.000000
众数是98.000000
偏度是0.505472

结论很显著。

有人调侃自己“被平均了”,还是有统计学依据的。


您的支持将鼓励我继续创作!