邪恶的GFW,你就饶了我吧:(

2009-10-06

从∑到∫

从∑到∫

前段时间看了木遥一篇极好的科普文章《长度是怎样炼成的》(http://blog.farmostwood.net/20.html)。当然,科普的对象最好懂点微分、积分。如果学过测度论,那简直可以当小品来看了。

看完后,突发奇想,\sum_{i=1}^{n}{x_{i} } \int_{a}^{b} f(y)dy,二者何其相似!∫完全可以看作是∑的推广。

在一般的理解中,\sum_{i=1}^{n}{x_{i} } 表示n个数相加,其中n是有限数,可以推广到“可数无穷”,但不能推广到“连续统”。
果真如此的话世界将变得如此简单,可惜,Riemann、Lebesgue找到了一条地狱之路:∫
不严格的令x_{i} =f(a+dy\cdot i)dy,则\sum_{i=1}^{n}{x_{i} } =\sum_{i=1 }^{n}[{f(a+dy\cdot  i)dy}] ,其中n=\frac{b-a}{dx} ,显然这里n是“连续统”!本来按照求和的规则,此式无法计算。但是\sum_{i=1 }^{n}[{f(a+dy\cdot  i)dy}] =\int_{a}^{b} f(y)dy,因此“连续统”个相加也是有意义的,即积分!
这样一来,Riemann积分的意义即为:利用Darboux和将“连续统”个数相加,“降级”成“可数无穷个”数相加。

上面只是个人的异想天开,未必正确,请大家不吝指正



2009-09-06

在Excel实现“列表”、“表格”的相互转换

1、前言
数据经常有“列表”、“表格”两种表现形式
列表形式:
Name    Value
张三    31
张三    32
……
李四    41
李四    42
李四    43
……
王二    21
王二    22
……
数据库就使用这种形式,但其Key有冗余。

表格形式:
Name    Value1    Value2    Value3    Value……
张三    31      32
李四    41      42      43
王二    21      22
这种形式Key没有冗余,但Value究竟有几个不好确定,会形成Sparse矩阵,不利于关系数学(矩阵)处理。

两种形式各有利弊,关键是能够随意转换。

2、“列表”→“表格”
2.1、VBA
VBA编程思路如下:
目标行指针Table_Row;
目标列指针Table_Column;
Table_Row=Table_Start-1
For(List_Row,List_Start,List_End)
  比较List_Row.List_Key、Table_Row.Table_Key
    如果相等:
      Table_Column+=1
    如果不等:
      TableRow+=1
      List_Key→[Table_Row].Table_Key
      Table_Column=1
  List_Data→[Table_Row,Table_Column].Table_Data。
Next List_Row

2.2、交互式操作
Key  个数n  起始行  结束行  地址  数据
其中:
Key:应该是唯一值,可以使用工具得到
个数:可以使用CountIf、DcountIf、Frequency、透视表得到
起始行:可以使用Match得到
结束行:可以使用Match得到,也可以使用起始行+个数得到
地址:Address(起始行,列,1)&":"&Address(结束行,列,1)
数据:Transpose(Indirect(地址))
注意:Transpose应该以最大n输入数组公式,然后删除NA
但这有一个后遗症,当n=1,数组形式的Transpose会形成n个重复,因此需要对n排序,对于n=1的,不用数组形式的Transpose

3、“表格”→“列表”
3.1、VBA
VBA编程思路如下:
List_Row=List_Start
For(Table_Column,Table_Start,Table_End)
  Table_Key→List_Key
  Table_Column.Table_Value→List_Value
  List_Row+=n
Next Table_Column

3.2、交互式操作
纵向选定ValueI,然后重复n次,当然,不能忘记同时复制n次Key

Excel中查询函数的简单小结

Excel中查询函数纷繁复杂,在此简单做个小结,防止遗忘

1、地址函数
Rows/Columns(区域),返回区域包含的行/列数
Row/Column(单元),返回单元是第几行/列

Address(行,列,$$|$R|R$|RR,R1C1|A1,Sheet),返回文本形式的地址
Indirect(文本形式的地址),返回引用
Offset(基点,行偏移,列偏移,高,宽),返回引用

2、返回符合条件个数的查询函数
Countif(区域,条件)
DCount(区域,列,条件)
Frequency(区域,界限数组)

3、返回值的查询函数
Lookup(值,单行/列区域),返回区域后面1行/列的值
Lookup(值,多行/列区域),返回区域最后1行/列的值
Hlookup(值,区域,结果在第几行,1精确|0近似)
VLookup(值,区域,结果在第几列,1精确|0近似)

4、返回位置的查询函数
Match(值,区域,类型),返回第几行匹配

5、依据位置的查询函数
Index(区域,行,列),返回单元格的内容

2009-05-29

再也不需要Vlookup+DataPilotTable,直接用Frequency!

Frequency(数据区域,区间数组)

注意:
是数组公式,应该用Ctrl+Shift+Enter

返回值长度为:
1:(-∞,L1]之间的数据个数
2:(L1,L2]之间的数据个数
……
n:(Ln-1,Ln]之间的数据个数
n+1:(Ln,+∞)之间的数据个数

2009-04-06

洗面乳为啥要先挤出洗面乳在手掌上,然后加水揉出泡沫,最后在脸上按摩?

前段日子,领导买了一瓶洗面乳送给俺,在仔细阅读说明后领导郑重其事的嘱咐:要先挤出洗面乳在手掌上,然后加水揉出泡沫,最后在脸上按摩!
俺当时没敢吱声,心里那个纳闷呐,好像俺从来就是先把脸打湿,再挤出一段洗面乳直接往脸上按摩,反正脸上有水,也能揉出泡沫啊。虽然百思不得其解,但也一直按我的老办法,没有按照厂家的推荐意见办。
今天我在洗澡时突然灵光一闪,终于找到了原因:这明明是厂家多卖产品的窍门嘛。
大家想啊,“先挤出洗面乳在手掌上,然后加水揉出泡沫”,这样得白白给水冲走多少洗面乳啊!又想起了牙膏厂为了多卖牙膏把管口扩大1.4倍的经典故事,因为大众早已经习惯了挤出一定长度的牙膏,这样一来,牙膏的消耗就是原来的两倍。
果然无奸不商啊!

2009-04-01

用VLookup实现编码

以前的工作经常需要对数据进行编码。所谓编码就是针对一个数据,用另外一个数据来表达。比如学生的成绩评定,90~100:优秀、80~89:良好、60~79:及格、0~59:不及格。这就是最简单的编码。可见编码是一件非常简单的事情,但它的用处非常大,这可是数字化的最基础手段!

编码虽然简单,但想在Excel中快速,简单的实现编码还是有许多技巧。

常用的是求商取整,但这种方法有以下缺点:
1)、区间间隔一致,无法实现变长区间
2)、只能实现数据到数据的编码,无法实现其他数据类型的编码

为了克服以上缺点,必须使用分段函数,但这又比较繁琐,今天使用Vlookup核对数据时,突然想到Vlookup可以较好的满足编码的需求,并有以下优点:
1)、简单方便
2)、区间间隔可以任意指定
3)、可以实现任意数据类型到任意数据类型的编码

下面是Vlookup的简单介绍。

VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

lookup_value:可以是数组喔,此时该公式就是数组公式,别忘记用Ctrl+Shift+Enter输入。

Table_array:一般至少为两列数据。
其中第1列中的值是分界点,相当于[M1, M2),[M2, M3),……,[Mn-1, Mn)
注意:
M1必须是可能值中的最小值,否则一旦lookup_value小于M1,Excel会返回#N/A
Mn不必是可能值中的最小值,即使lookup_value大于Mn,Excel也会定位到Mn所在行

col_index_num:table_array中待返回的匹配值的列序号,该序号从1开始
注意:
col_index_num不得小于1,否则Excel返回错误值#VALUE!。
col_index_num不得大于table_array的列数,否则Excel返回错误值#REF!。

Range_lookup为逻辑值
如果为TRUE或省略,则返回精确匹配值或近似匹配值。
table_array第一列中的值必须以升序排序;
此时如果找不到精确匹配值,则返回小于lookup_value 的最大数值。

如果为FALSE,Excel将只寻找精确匹配值。此时table_array第一列的值不需要排序。
如果table_array 第一列中有两个或多个值与lookup_value匹配,则使用第一个找到的值。
如果找不到精确匹配值,则返回错误值 #N/A。

2009-03-31

Excel中Pearson与CorRel的区别

今天无意中发现Excel中除了Pearson,还有CorRel!二者究竟有何区别?Excel的Help含糊不清,没有发现有价值的提示信息。

google了一圈,终于在http://support.microsoft.com/kb/828129/zh-cn发现了权威的答复。

在>=2003版本中,Pearson与CorRel相同
在<2003版本中,Pearson与CorRel不同

在早于2003的Excel版本中,PEARSON可能会出现舍入错误,该缺陷在2003及更高版本的Excel中得到了改进。

CORREL总是通过这种改进的过程来实现。

2009-03-28

简单相关系数并不简单

写这篇文章,源于pinggu.org上cathy_wxh关于“相关系数及其显著性水平”的求助贴,在与xmok77的讨论过程中,我发现自己对此仍有不少概念仍然不够清楚,需要澄清,因此萌发了写此文的念头。好,下面言归正传。

相关系数有很多种,如Pearson积差相关、Spearman等级相关、Kendall等级相关、Kendall和谐系数、Kappa一致性系数……,最常用的当然是Pearson积差相关系数,又称为简单相关系数,但它可不简单喔!

1、r的计算
首先复习一下有关知识:
总体参数协方差σxy=E{[X-E(X)][Y-E(Y)]}
总体参数相关系数ρxy=σxy/[sqrt(σxx)*sqrt(σyy)]
统计量样本协方差sxy=sum[(Xi-x)(Yi-y)]/(n-1)
统计量样本相关系数rxy=sxy/[sqrt(sxx)*sqrt(syy)]
当X、Y都服从正态分布时,ρxy常用rxy进行估计。

2、r的意义
相关关系不代表因果关系。
Pearson相关系数只反映线性相关程度,不反映曲性相关程度。
不少书上都谈到了相关系数的几何意义,但都没有谈透,我自己觉得Pearson相关系数反映了“散点向线段聚集”的程度。当然还有许多其它意义,我还想对此做进一步的探索。

3、r的分布
r究竟符合什么样的分布,我看到的教科书上都没有明确的答案,只是给出了两个检验方法,这在后面还会详细讲解。于是我试图自己推导,但高等数学早就忘得差不多了,实在无法进行。恰在此时,verycd.com上居然发布了Crystal Ball V11!简单的学习后我异想天开,利用Monte Carlo模拟对r的分布进行数值计算!其中遇到了不少困难,但都找到了解决办法,这不是本文的重点,以后我或许会写一篇关于Crystal Ball的介绍。下图是我的工作界面,相信对Crystall Ball熟悉的朋友一下就明白了。

这里简单解释一下大概的流程。
1)、对正态总体X抽样,得到容量为30的样本,将之作为Monte Carlo模拟的假设Assumption。
设定X01~X30共30个相互独立的随机变量,Xi~N(μx、σx^2),这里μx、σx具体是多少并不重要。
2)、对正态总体Y抽样,得到容量为30的样本,将之作为Monte Carlo模拟的假设Assumption。
设定Y01~Y30共30个相互独立的随机变量,Yi~N(μy、σy^2),这里μy、σy具体是多少并不重要。但注意对于每个Yi一定要设定它与Xi的相关系数为ρ。
3)、计算r,将之作为Crystal Ball的预测Forecast。
为了方便,可以同时计算r(n=2)、r(n=3)、……、r(n=30)
4)、Run the Model!

经过反复试验,我发现r的分布应该取决于总体参数ρ和抽样次数n。下图是进行100000次Monte Carlo模拟后,再用ImageMagick拼接后得到的结果:

ImageMagick网上有不少介绍,在此不再赘述,有兴趣的朋友google一下吧。

可惜的是Crystal Ball的绘图功能有限,只能定制X轴,无法定制Y轴,因此需要注意这些子图的X轴范围是一样的,都是-1~+1,但Y轴的范围都不太一样。但这无关大局。

从图中有几个有趣的地方:
1)、当n=2时,无论ρ是多少,r只能取±1,随着ρ由0→1,r取得1的概率逐步增加,取得-1的概率逐步减少。
2)、当ρ=0时:
  当n=3,则r以很大的概率取得接近±1的值,取得0的概率反而很小。
  当n=4,则r取得[-1,+1]之间任何数的概率都相等。
  当n由5→+∞,r取得0的概率逐步增加,r也越来越象正态分布
3)、当n<10时,r的分布距离ρ实在太散,即如果用计算得到的r来估计ρ的话风险太大。>10时,r的分布距离ρ较为集中,即如果用计算得到的r来估计ρ的话风险较小。
5)、在同样的n下,当ρ由0→1,相应的r的分布也会越来越集中。
6)、当ρ=0时,r的分布左右对称;
  当ρ>0时,r的分布左偏;
  当ρ<0时,r的分布右偏。 r="1,因此图中没有画出ρ=" n="400!(我坚决不愿做Pearson的助手:))。计算结果从最乐观的角度看也只是证明r的分布实在离正态分布太远。">3时就可以较好的接近正态分布!(看样子我也做不了Fisher的助手:))。

3、r的检验
从前面可以看出,r似乎不遵从常见的概率分布,其偏离期望值ρ的程度很高,这就很好的解释了为什么教材书上格外强调对r需要进行显著性检验。
回想一下,当用样本平均值、样本方差这些统计量去估计总体均值、总体方差这些总体参数的时候可没有特别强调进行显著性检验。理由很简单:
如果总体X~N(μ、σ^2/n),则样本平均值~N(μ、σ^2/n);
如果总体X~N(μ、σ^2/n),则样本方差有(n-1)s^2/σ^2~χ^2(n);
这些分布的偏差都不是太大,因此常常被忽略,当然严格意义上讲这是不正确的,对于每个估计,都应该进行显著性检验。
那么,如何对其进行检验?

1)、t分布法
有人(我没有查到到底是哪位大牛,希望知道的朋友告诉我)发现当ρ=0时,r/sqrt[(1-r^2)/(n-2)]服从t(n-2)分布。
对此同样利用Crystal Ball进行100000次Monte Carlo模拟,再利用ImageMagick拼接,得到下图:

从直觉看似乎的确符合t的特点。

2)、z法/f法
Fisher发现若令z=ln(sqrt((1+x)/(1-x))),则z(r)~N(z(ρ),1/n-3)。即[z(r)-z(ρ)]/sqrt[1/(n-3)]~N(0,1)。Fisher将之称为z分布,后人为表彰Fisher,将之称为Fisher分布!
对此同样利用Crystal Ball进行100000次Monte Carlo模拟,从直觉看,似乎的确如此。大家对正态图实在太熟悉了,这里就不再贴拼接图了。:)好好,我坦白,其实是我想偷懒还不行嘛。

这里再多说两句,绝大多数教材上都说,对于Pearson相关系数:一般先利用t方法进行“线性相关显著性检验”,如果相关不显著,则不管其相关系数r多大,都认为其不可接受,即认为ρ=0。
我想,应该也可以利用Fisher方法对其进行检验?即利用[z(r)-z(0)]/sqrt[1/(n-3)]~N(0,1),不知是否正确,还请达人对此指正。

2009-03-22

用Excel生成二维函数曲面图

今天看到有人询问如何用Excel生成二维函数曲面图,或者用什么软件生成

用Octave/Matlab、Mathematica、Maple这些数学软件当然可以方便的画出二维概率密度函数图。

用Origin、Sigmlot这些半专业的科学图形软件当然也可以方便的画出二维概率密度函数图。

绝大多数人认为Excel无法生成二维函数曲面图,其实Excel当然也可以,只是繁琐一些,效果差一些而已。

步骤如下,

1、必须有一系列(x, y)向量值

2、将之code到区间上,比如[0.0~0.1)→0,[0.1~0.2)→1……[0.9~1.0)→9

3、利用透视表得到一张二维表格

4、根据这张二维表格,插入“曲面图”

在Excel2007中试验成功,效果可以见下图:



2009-03-18

如何提出Ho真是一门学问

今天上cos.name看到2008年统计学考研真题第四题“食品厂家说:净含量是每袋不低于250g。但有消费者向消协反映不是250g,消协据此要求厂家自检,同时消协也从中随机抽取20袋检验”

(1)如果厂家自己检验,你认为提出什么样的原假设和备则假设?并说明理由。
(2)如果从消费者利益出发,你认为应该提出什么样的原假设和备则假设?并说明理由。

我想:拒绝Ho是不容易的,因为必须p<α。所以厂家基于自己的利益应该提出:
Ho:weight ≥ 250g;
Ha:weight < 250g。
这样的话,即使实际测量得到的Weight<250,如果短斤少两不是很厉害的话,也无法拒绝Ho。

当然,消费者基于自己的利益就应该提出:
Ho:weight < 250g;
Ha:weight ≥ 250g;

但郑冰认为:
假设检验的主要目的是为了拒绝,所以厂家要说明自己的产品合格得拒绝原假设
因此应该提出:
H0:weight < 250g;

谢益辉认为:
1、厂家会说,不拒绝又不表示接受,因此消费者如果提出H0:weight < 250g则力度不够。
2、从是否容易拒绝零假设的角度来看,厂家提出weight ≥ 250g的确占点便宜。

仔细想想应该这样说:
食品厂家对于计量是否准确,心里是有数的。

如果确实不短斤少两,食品厂家则按郑冰的做法,提出以下假设:
Ho:weight = 250g;
Ha:weight > 250g。
这样可以非常有力的消除消费者的怀疑。

如果确实少上一点,食品厂家则按我的做法,提出以下假设:
Ho:weight = 250g;
Ha:weight < 250g。

如果少得比较厉害,食品厂家还是及早承认错误吧。

不知这样解决如何?

MindManager 2008终于可以将.mmap直接转换成.swf文件了

MindManager 2008终于可以将.mmap直接转换成.swf文件了!

搞笑的是,无论是Save As的菜单栏中还是Export的菜单栏都没有直接的选项,必须到了Save As的对话框中,在保存类型中才有.swf文件类型,真让人好笑。真可谓“千户万换始出来,犹抱琵琶半遮面”。

不管如何,终究是一件好事,可惜blogger.com还是不支持上传.swf