Beta

It’s a beautiful thing when free data meets free algorithm.

R 各个镜像中的 Contributed Packages 越来越多,截至今日,已经达到1950个,单单拉动鼠标把所有的 包名 从 A 到 Z 过一遍也得 10 几秒。随便考你一道:最后一个 R 包是啥?

zoo?

呵呵,我的印象里一直是它,仔细瞧了瞧发现是个叫 zyp 的包。

又一次领略了 R 强大的扩展能力撒?这个特点给我们带来了一些烦恼,因为人类的大脑能够理解的概念是有限的,对于没有任何关联的概念,我们的识别能力一般不超过 7,而且 R 的涵盖范围实在太广。从我们的有限性(7个概念)和 R 的无限性这一角度讲,逐一认识这些包几乎是不可能的!不过还好,至少我们可以可以参考 CRAN 上的 Task Views,大致了解 R 包的使用方向。

我们换个思路,不是从 R 的使用方向上,而是从 R 包的依赖关系上?

这些 R 包并不是相互独立的。比如说,MASS 包依赖于 R (>= 2.5.0), grDevices, graphics, stats, utils 这些基础包;而又会有包依赖于 MASS 包,比如 yihuianimation ,当然还有可能有包依赖于 animation ……

遍历所有的包,我们就看到了一个网络,一个 R 包的网络。

为了简化起见,这里忽略了同其他包没有关系的包(当然并不是完全没有关系,所有的包都和 RR 的基础包有关,如果这样计量的话,会导致所有的包都会指向 R)。

首先截取了这个庞大网络的一部分:

从上图我们可以看到,标记点为215、271的两个包是我们研究的包网络中的两个关键点,这两个包分别是lattice、mvtnorm。

关于这两个包:
  1. lattice:网格绘图的基础包。很多包基于它扩展并不惊讶吧;
  2. mvtnorm:多元正态分布和t分布的概率密度函数、累计分布函数、分位数函数、分布随机数。多元分布的基础。

从 271(mvtnorm)向左上,又会有一个小的聚集。那个小的聚集中心(110),是 fBasics 包,如果各位对金融领域关注的话,应该知道它在其中的地位吧。

当然,由于抽取的是一个子网络,很多的连接都被生硬地隔断,因此出现了大量的孤立点。

如果我们把 CRAN 上的1950个包都放到我们的网络中会是这样:

最后说明:
  1. 第一张图的 包 id 换成 包名称 会导致 演示的视觉效果很差,网页又不支持 pdf 直接显示,只好把带包名的图放这(pdf)。
  2. 带包名的 ,1950 个包的全图就算了吧,单绘图就得 2 分钟,更别提调整参数了 ……

还记得第一次看到水立方时的惊讶么?

是什么这么吸引我们?是有如天空般的颜色?还是那气泡似的形状?

从水立方的外墙结构上看,不但外观美观,而且十分紧凑。水立方外墙为什么会有这样的性质,是因为它上应用了一项最优化的技术,即Voronoi 原理。

Voronoi 图也常常被称为 Dirichlet 格局(Dirichlet tessellation)。通俗讲,其原理是一项从点到面的技术。它的每个多边形只有一个"生成点",而这个多边形上的每个点到"生成点"的距离总是比到其他"生成点"的距离要小(是不是想到了 K-means 算法?)。

在建筑设计上,有设计人员争论这类方法定义为“参数化设计”。认为这种方法不能同传统的、依靠灵感的设计方式相比,因为这种方法高度依赖计算机,只需要简单改变若干参数就能得到设计方案。但这个论断,恰恰忽略了“参数化设计”背后的数学意义。

既然 Voronoi 是一种最优化的算法,那么除在建筑学上给我们带来的美轮美奂的视觉效果外,它在空间统计上同样也有应用。

下面,我根据各个省会城市(包括香港、澳门)的地理位置,利用 Voronoi 原理,计算每个省最佳控制范围(使用红色的线条标记):

虽然理论值(最优)和现实值(行政区划、地理)总有差距,但是,比较一下会发现一些值得探讨的现象:
  • 内蒙古应该好好的规划一下,从东边到西边实在太远了,把西边的划给宁夏可能好点;东边划给北京、东三省;
  • 河北北部,不论是属于北京还是天津都会好些,记得我小的时候,宁可去北京、天津,也不乐意去遥远的省会--石家庄;
  • 青海应该把甘肃的北部包括进去;
  • 上海、香港、澳门有一部分管辖区也也不错么:)

整体上看,大部分省的行政区划还是符合 Voronoi 原理。也就是说,单纯从空间距离的角度来看,我国的行政区划还是比较不错的。,

很多时候,在社会调研中会出现一些小数(或百分数),而这些数字背后隐藏的信息也常常被统计人关注。比如 COS 主站上的这篇文章--《从调查报告中的比例数字说统计人如何甄别统计假象》,yihui 生动地为我们展示了一种考量问题的思路。

正如文章中所说的,如果我们对数字足够敏感的话,很容易判断出 0.6667 的分数是 2/3 ,0.625 的分数是 5/8,0.14286 的分数是 1/7。但我们的经验毕竟有限,不可能穷尽所有的数字,通过一个算法来确定分数是十分有必要的。

法里序列(farey sequence)也是考虑这类问题的一个角度。如果给定法里序列的 n 足够大,那么我们必定能够将逼近出一个和小数相等的分数Fi[j]。

法里序列 Fi (i=1 到 n):

F1 = {01, 11}
F2 = {01, 12, 11}
F3 = {01, 13, 12, 23, 11}
F4 = {01, 14, 13, 12, 23, 34, 11}
F5 = {01, 15, 14, 13, 25, 12, 35, 23, 34, 45, 11}
F6 = {01, 16, 15, 14, 13, 25, 12, 35, 23, 34, 45, 56, 11}
F7 = {01, 17, 16, 15, 14, 27, 13, 25, 37, 12, 47, 35, 23, 57, 34, 45, 56, 67, 11}
F8 = {01, 18, 17, 16, 15, 14, 27, 13, 38, 25, 37, 12, 47, 35, 58, 23, 57, 34, 45, 56, 67, 78, 11}

但这个过程会比较麻烦,F1000 已经达到300927 个数字。幸好 R 中的 MASS 包提供了 fractions 函数。这个函数使用有理近似的方式,将小数转化为分数(连分数)形式。比如《从调查报告中的比例数字说统计人如何甄别统计假象》中提到的 29.1667% 这个数值:

> fractions(0.291667)
[1] 7/24

不过,既然是近似算法,这个函数对小数的精确度要求还是蛮高的,而且最好不要用无理数去逗人家。

> fractions(pi)
[1] 4272943/1360120

SPSS 在首页显著位置公布 An important message for our customers and partners,同 IBM 共同宣布 SPSS 被收购的 definitive agreement。这 SPSS 改名还没几天,又有了这么大的动作,BI 界不太平啊!

IBM 的 Press 里有段话很有意思:As companies attempt to control costs and use resources more wisely, IDC estimates that the worldwide market for business analytics software will swell to $25 billion this year, growing 4% over 2008.(1)

深圳福彩3000万巨奖诈骗案发生后,好多朋友开始质疑中国福利彩票的公正性,并向我询问福利彩票是不是真的如传闻那样--福利彩票自产自销?。由于身在中福彩的原因,很多支持福彩公正的内情不太合适发布在网上,但--数据一汇总,上帝也会发笑。这篇博文从一等奖中奖概率分布的角度给各位童鞋聊聊福彩的公正性。

现在每一期的福彩双色球销售额大概是2亿左右(已持续很长时间),每注双色球为2元,就是说每期双色球的销售大概会有1亿人次参与。

在随机选择,且每次抽取都是等概率的的假定条件下,理论的重复彩票注数的分布(0注至41注)如下:

一等奖是完全随机出现的,那么在假设条件下,一等奖同时出现五注的概率最高,六注、四注其次,再次为七注、三注,类推……当然理论上,没有中奖(0注)和中12注以上的概率相比其他情形低了很多。

那么我们再看一看福利彩票双色球每期中一等奖(2008年1月1日至2009年7月23日)的实际分布情况:

有童鞋看出端倪了:实际数据的分布同理论上的分布是不一致的!理论上的一等奖出现概率最大在出现五注的位置,而实际上一等奖出现的最大概率出现在了两注的位置。

为什么会出现这样的情况?主要是因为我们最开始的假设是有问题。

双色球每期销售会有1亿人次的彩民参与?不可能!双色球的覆盖度没有那么大。

一些彩民为了提高中奖概率(或者说迷信一些选号方法),会采用"复式"、"胆拖"、"倍投"等方式投注,当然大部分彩民还是会老老实实的买一注。综合考虑到这些因素以后,凭经验估计样本量应该为现在的一半左右,即5000万。这样看来较为合理的一等奖中奖概率理论上分布为:

此时理论分布同实际分布已经非常相似。

实际双色球一等奖分布的右边尾巴上恰恰显示了"复式"、"胆拖"、"倍投"的投注效果。

再插一句:

深圳福彩3000万大奖诈骗犯身份曝光一文中提到:

警方调查发现,程某先是编写了一个可以自动运行的木马软件,然后利用与福彩中心合作的机会,进入福彩中心机房,植入自动运行的木马程序。一旦摇奖结果出来,这个程序会自动将程某所购买的彩票修改成一等奖的号码。

这里可以推测程某天真地以为满足兑大奖的条件为:

  • 数据库里的数据正确;
  • 实体彩票存在。

恩,没有问题!但,这两个条件可是通过很多很多很多的手段来监管的。

0%