082010

我不确定这是不是R和Sweave能达到的最漂亮的境界:

下载:一份由pgfSweave生成的人模狗样的动态文档

这两天花了点时间,把跟LaTeX、LyX、Sweave有关的一系列中文问题从头到脚翻了个遍,目前为止,明白并解决了如下问题(基于带有MikTeX 2.8的CTeX 2.8.0.125、LyX 1.6.5、R 2.10.1、R包pgfSweave 1.0.3,操作系统Win XP,从头到尾一直用UTF-8编码):

  1. LaTeX说中文了)LaTeX生成可复制粘贴的中文PDF文档:由于我的惰性,还用着N年前的CTeX,那个老版本CTeX中的MikTeX貌似一直有问题,比如无法更新LaTeX宏包,更不必说那些dvipdfmx之类的程序了,估计人家作者都已经更新了无数个版本我还不知道。在我陈旧的印象中,要用LaTeX生成可复制粘贴的中文只有一种办法,就是用dvipdfmx把dvi转为pdf,而我陈旧的印象又记得dvi文件只能由latex命令生成,并且用latex编译的文档必须用EPS图形,这一直让我觉得很不爽,因为我实在不爱用EPS,比如R的postscript()设备(可生成EPS图形)不支持半透明色,而且图形中要用中文字符的话配置非常麻烦(N年前我请教了Paul Murrell,虽然搞明白了,但心里仍有疙瘩)。我的偏好是用pdflatex命令编译文档,图形也用PDF格式(pdflatex默认支持PDF和PNG图形),用R生成PDF图形也方便、漂亮,所以配合Sweave很容易生成一篇干净利索的PDF文档;但pdflatex命令直接编译生成的中文文档中,中文字符是不能复制粘贴的,因为复制出来就是乱码。所以呢,我陈旧的知识让我的这个“麻烦问题”一直没有得到解决。
022010

COS史上有几位不为人知的幕后英雄,而我从没认真记载过这些事情,时间一长,各种事情堆满了脑子,也不会再去回顾。如今,我必须记下颜林林。以下截图部分反映了他在迁移论坛过程中的贡献:

这事情起源于去年暑假,当时我提出了更换PHPWind系统到bbPress的想法,这位颜小侠很快就研究了PW和bb的数据库结构并写了一个初步的MySQL脚本发给我,而我处理邮件的速度各位客官可能也有所耳闻……过了半年,我测试了这个脚本,发现并不顺利,于是颜林林重新开始修改脚本。众IT民工都知道,即使是自己写的程序,过三个月不看,感觉也像是别人写的。不过颜林林的计算机水平在我看来已经有天外飞仙的感觉了,三下五除二,又发回了修改的版本,然后就是我无休止的改进建议以及Bug修正。截止到记者发稿为止,新的论坛已经克服了我所能想象到的主要障碍(用户名密码顺利迁移、用户权限顺利迁移、帖子id保持不变顺利同步、数据库编码从GB2312顺利转为UTF8、bbcode算是顺利转换……)。每个问题我看着都觉得头皮发麻,但他的每一种解决方案都聪明得“令人发指”。

如果没有这样一位天才存在,换系统这件事我也只能在脑子里冒泡想想而已。

既然已经剧透了这么多,现在可以给个网址开始小范围公测了:http://cos.name/cn/。注意,暂时不能注册,不能发帖。欢迎提供反馈意见。其实这系统也没什么好看的,确实没什么可看的,它只能用来看帖发帖,版主只能删帖修改移动或举报垃圾广告。换句话说,它真的是个论坛了。

COS能有发展的动力,靠的就是这样的奉献精神。而我也诚惶诚恐,怕浪费了大家的时间精力。前几天,科学松鼠会采访一位伯克利统计学博士海龟,他竟然提到了统计之都网站,此事反映出COS在民间的影响力已经有一定厚度了(尽管一直采取不主动宣传的策略)。如小邱所说,“有点意思了”。诸位老大加油吧!

122010

人怀着阴暗心理于今日公交车上翻IMS Bullutin的第39卷第1期,不幸看到第5页,又是一例统计结果不可重现的例子。一帮人,用可公开获得的数据获得了惊天的成功,到头来被人指责结果不可重复,而且不是一点半点不可重复,后人说的是“results are no better than chance”,嘿嘿,我心里冷笑着。你说说,他整一方法,号称威力无比,其实跟抛硬币得出来的结果没啥区别;这病人得没得癌症,抛个硬币决定吧。

难道这就是传说中的随机数发生器?又想起有些人用上百个变量做回归,这也是随机数发生器的一种,找出几个带显著性星号的系数不必欣喜若狂,要是找不出那才奇怪了呢。呜呼。

082010

几天看见这么一则报道,一直挂在我的浏览器中没有关掉:研究者称全国论文买卖去年销售额近10亿。初看这报道,心里弱弱地念了一句“骂了隔壁的”,你说说,这是谁在逼谁,这又是何苦要逼死这些“作者”们。难以理解。我觉得世上难以理解的事情只有两种,一种是纯粹的2,一种是精明之极。此处不展开。

之所以今天才写这事,主要是昨晚遇到了类似的事。有些老板要发论文,就逼学生分析数据,分析之前的结论都想好了,你就照着这个结论分析吧,还得人模狗样参考英文论文,论文三页纸,英文参考文献二三十篇。学生被逼急了只能造假,懂统计的可以高级造假(比如删掉几个数据使得检验显著),不懂统计的就低级造假(纯粹编假数)。老板可能也是被逼的,没论文没职称没钱没地位。经济方面的论文,编就编吧,反正大家都知道是假的,造个假数对大家都没影响;可这医学方面的论文,造数是不是不大好呢?如果论文跟治病救人没关系,那发论文就是堆垃圾了,何必要逼人发表;如果有关系,那这作者们良心何在?

回到我在统计之都新年构想中关于主站的目标一节:为什么期刊有存在的必要?为什么世上只有发表论文这一种指标来衡量人的工作和贡献?论文这个泥坑,学者有学者的痴狂,南郭先生有南郭先生的狡黠。跟买房一样,群体非理性,全然不顾是谁在背后蘸着口水数钱。

统计这玩意儿,一日不形成“reproducible”的规则,一日研究不成大器。

最后看个无关的短片,看什么叫“彪悍的人生不需要解释”:

对他这样的人,有没有必要用论文证明什么呢?

052010
统统计教科书大多会提及t检验中方差齐性这个问题,因为检验的假设条件是需要总体方差相等的。然而这个问题实际上可能并没有人们想象的那么重要,这里给两个简单的数值计算结果,看看方差不等对检验结果有什么影响。

par(mar = c(4, 4, 0.5, 0.5), mfrow = c(1, 2))
set.seed(123)
plot(pval <- t(replicate(1000, {
    x1 = rnorm(100, mean = 0, sd = runif(1, 0.5, 1))
    x2 = rnorm(100, mean = 1, sd = runif(1, 2, 5))
    c(t.test(x1, x2, var.equal = TRUE)$p.value, t.test(x1, x2,
        var.equal = FALSE)$p.value)
})), xlab = "P-value: equal variance", ylab = "P-value: unequal variance",
    pch = 20, asp = 1)
abline(0, 1)
plot(pval[, 1], pval[, 2] - pval[, 1], xlab = "P-value: equal variance",
    ylab = "Diff of p-values (unequal var - equal var)", pch = 20)

过程是:从两个正态总体中生成样本,第一个总体均值为0,标准差随机取自U(0.5, 1),第二个总体均值为1,标准差取自U(2, 5),显然两个总体标准差不相等,那么在t检验时设定和不设定方差相等的选项对结果有多大影响?把两种情况的P值都画出来:左图是原始P值,可见基本在对角线上,说明大致相等,若眼神儿不好,可看右图,即P值的差异,可见方差不等时P值偏大(原因很简单,因为Welch校正的自由度小于等于不校正的自由度,样本量相等的时候统计量的分母即标准误一样,因此统计量完全一样,自由度越小,P值越大嘛),但大多少呢?其实也没大多少。

方差齐与不齐时t检验的结果对照

方差齐与不齐时t检验的结果对照

十二 312009

在家宅得快发芽了。这几天考虑着COS的发展计划,每次想这件事都觉得脑子里的想法装不下了,可每一个想法的实施往往至少要一年时间,甚至两三年都没法实现。在2010年,我希望可以实现下面这些事情。本文写得不是一般的意识流,读者慎阅:

  1. 全面提升网站功能,主要包括对三大软件的支持:
    1. SVNGIT:目的在于会员合作,大家可以共同编写一些小册子,SVNGIT使得工作可以并行而不会互相牵制、依赖。按胡子同学的IT小小鸟模式,我觉得COS的会员们根据COS论坛的帖子足以合力写出好几本统计小小鸟了。
    2. ## need libapr, libapr-util, then subversion
      wget http://apache.cs.utah.edu/apr/apr-1.3.9.tar.gz
      wget http://apache.cs.utah.edu/apr/apr-util-1.3.9.tar.gz
      tar -zxf apr-1.3.9.tar.gz
      cd apr-1.3.9
      ./configure --prefix=$HOME/bin/apache/apr
      make & make install
      cd ..
      tar -zxf apr-util-1.3.9.tar.gz
      cd apr-util-1.3.9
      ./configure --prefix=$HOME/bin/apache/apr-util --with-apr=$HOME/bin/apache/apr/
      make & make install
      wget http://subversion.tigris.org/downloads/subversion-1.6.6.tar.gz
      ## tar, cd, then
      ./configure –prefix=$HOME/bin/subversion –with-apr=$HOME/bin/apache/apr –with-apr-util=$HOME/bin/apache/apr-util
      ## SVN把老夫折腾得接近崩溃,终于痛苦地转向GIT
      wget http://kernel.org/pub/software/scm/git/git-1.6.6.tar.gz
      tar xf... & ./configure & make & make install

      习惯了用SVN,但过去一直是用别人的服务,轮到自己架设SVN服务器才知道这叫一个崩溃,其实主要原因可能是因为自己没有root权限,未必真的那么难。由于是用别人的服务器,只好转向GIT。

十二 292009

从来到美帝,生活总是一波三折,有时还七八折。折得我现在见怪不怪了,对“福兮祸之所藏,祸兮福之所倚”有了深刻认识。这人呐,遇见好事不能太得意,遇见坏事也不能太失落,正所谓“不以物喜,不以己悲”。事情来一件解决一件,水来将挡,兵来土掩。今日读到老诗一首:

If

Rudyard Kipling

If you can keep your head when all about you
Are losing theirs and blaming it on you;
If you can trust yourself when all men doubt you,
But make allowance for their doubting too;
If you can wait and not be tired by waiting,
Or, being lied about, don’t deal in lies,
Or, being hated, don’t give way to hating,
And yet don’t look too good, nor talk too wise;

If you can dream – and not make dreams your master;
If you can think – and not make thoughts your aim;
If you can meet with triumph and disaster
And treat those two imposters just the same;
If you can bear to hear the truth you’ve spoken
Twisted by knaves to make a trap for fools,
Or watch the things you gave your life to broken,
And stoop and build ‘em up with wornout tools;

If you can make one heap of all your winnings
And risk it on one turn of pitch-and-toss,
And lose, and start again at your beginnings
And never breath a word about your loss;
If you can force your heart and nerve and sinew
To serve your turn long after they are gone,
And so hold on when there is nothing in you
Except the Will which says to them: “Hold on”;

If you can talk with crowds and keep your virtue,
Or walk with kings – nor lose the common touch;
If neither foes nor loving friends can hurt you;
If all men count with you, but none too much;
If you can fill the unforgiving minute
With sixty seconds’ worth of distance run -
Yours is the Earth and everything that’s in it,
And – which is more – you’ll be a Man my son!

这Kipling老爷子写了一大通,我总结无非就两个字:淡……!定!

淡定

十二 262009

情缘起于段炼同学9天前给我看的他的一篇博客:统计数字是不是拍脑袋出来的?87.53%。当时我在考试,没太仔细琢磨这件事情;现在邮件处理到了这一封,于是一层一层链接都打开来看,越看越摇头。这统计学在大家眼中敢情成了找借口的高级工具?抑或凡是有不正常的数字现象,都可以找到可能的“统计学”原因?这也太杯具了。

这个87.53%已经被证实只是个玩笑。在众多(只顾怀疑、相互抄袭、转载、或来路不明的)博客文章中,段炼的角度显然和所有人都不一样,他把所有的百分比数据的搜索频数都下载了下来,大家一看就知道,87.53这个数字本身并没有什么奇怪的,你去搜87.52或87.54都一样。众人纷纷解释这个0.53(100人中哪里来的0.53个人),不知道谁第一个提起了置信区间,总之我刚才看到的杯具有(考虑了一下,不是啥好事,就不给链接了):

……在计算样本容量的时候要考虑一个置信区间的问题,也就是说调查了100个人,但是并不认为这100个人都是认真作答的,因此会在样本容量上再乘上一个置信度

置信区间展现的是这个参数的真实值有一定概率落在测量结果的周围的程度。

第一种说法简直错了十万八千里,我闻所未闻,真是木有想到,置信度原来还有这种功效;第二种说法是对置信区间常见的误解;我正欲吐血时,竟然看见了维基百科的身影:置信区间。这下是真的杯具了,维基上赫然写着:

十二 222009

天半夜正欲睡觉,突然看见明天冬至,心想该吃饺子啊,不妨找几个人来我家包饺子好了。拖出鸡逃课(GTalk)一看,Tengfei在线,这家伙吃面食长大的,肯定会来,吆喝了一嗓子,便答应了;继续看别人,阿杜也在,叫上,阿杜说得有mv作陪才来,小子我在这个农村认识的女士加起来可能也就十来个,让我请ppmm这不为难我么……其他人都不在线,于是只好群发邮件。完毕睡觉,躺床上盘算了一下冰箱里的东西,胡萝卜、芹菜、香菇、木耳、猪肉、牛肉、鸡肉都有,一顿饺子宴齐活了。

早上九点多爬起来看没人回邮件,于是一个个打电话,结果大部分都没人接,问起来都回国了。这次又请了Rtist,这位神仙又在忙,再次遗憾。凑来凑去,才凑了五六人。放下电话开始搜饺子馅做法,看完去厨房拿出肉放在外面解冻,泡上香菇木耳,然后开始和面揉面。此前自己吃都是小规模揉面,这次揉上近两斤面,感觉还挺费劲。一盆面揉了二十来分钟,盖上醒着。然后鸡猪牛肉一个个切片切丝切丁,切完兵兵咣咣剁成肉泥,看起来还像模像样。肉快剁完了,大军赶到,帮忙打扫一下洗碗池边上的台面,开始擀面。我继续切胡萝卜小丁拌猪肉、芹菜丁拌牛肉、香菇拌鸡肉,由于还有一位吃素的童鞋,于是蒋老师专门摊了鸡蛋饼,和笋以及木耳拌一块儿做素馅。素童鞋、淑童鞋和阿杜中间还跑去mall逛了一圈,留下蒋老师、Tengfei和我,一个包,一个擀,一个剁,倒也配合默契。包得差不多了那三人还不见回,于是挂一电话说我们已经吃完了,顷刻间三人就杀回来了。我把剩下的香菇、笋和木耳炒了,然后刷锅开煮。

煮起来一锅一锅就快了,勤劳的蒋老师一直在厨房看锅,我们一伙人饿了半天,当然是一通狼吞虎咽。我也没另炒菜,大家就蘸着酱油醋老干妈凑合着吃了。席间大谈特谈“信某哥,不挂科”的事情,神乎其神,每个人都有鲜活的示例。看来我期末考试之前没拜一拜某哥,这次是要惨了。吃完蒋老师还是抢着刷了碗,大家收拾收拾桌子,本来要打牌,结果素童鞋非说困了要回家睡觉,这下树倒猢狲散,一帮人瞬间都溜光了,两副扑克扔在我家,不知道啥时候能派上用场。

十二 082009

来有些奇怪,有几位R core们居然给本小子写邮件,让本小子着实感到吃惊。比如,首先是Brian Ripley,这是R core中的core,前面提到过他在R源代码中的突出贡献,这位真人不露面、网上找不着照片的大佬,前段时间给我发封邮件说,你小子的animation包的启动消息不正规啊,因为我用suppressPackageStartupMessages()无法屏蔽启动消息;我一看,R里面居然还存在这么长名字的函数,顺便学习了message()函数,从此不再用老土的cat()函数了,后来考虑了一下,干脆把启动消息去掉了,library(animation)不会再有任何提示消息。

然后是我发现Duncan Temple Lang这位不靠谱的大叔做着一些我很喜欢的不靠谱的事情,于是乎对Omegahat心向往之,一来二去聊了聊,将来有机会一定要会一会他。

Sweave对注释的处理是要么完全去除,然后R代码会被整理整齐,要么完全保留,但R代码也保留原样,而我一直希望既能保留注释又能整理代码,这才诞生了animation包中tidy.source()函数(在小邱聪明的技巧下),前段时间想想给Friedrich Leisch,也就是Sweave的作者,发封邮件说了这个事情,打探一下是否能多设置一些Sweave选项,比如把parse()deparse()函数以选项的形式抽象出来,这样就可以实现既整理代码又保留注释的功能了,不过大叔貌似很忙,回了一封邮件就再也没有音信了,后来由于Michael Friendly对Sweave的一些功能请求在R-help上发了邮件,我们一干人等通过Duncan Murdoch间接了解到Friedrich的确很忙,不过好消息是圣诞节过后Sweave可能会有更新,届时用户可以自行设置图形设备,不必局限在PDF和EPS。但整理代码的事情仍然遥遥无期……唉,还得用硬性Hack的方法。

Martin Maechler前面提过,看到我们开R会,说要向The R Journal交报告啊,回头再跟他谈谈明年R会议的事情。

最意想不到的是,Duncan Murdoch刚才居然给我发个邮件问问题,额滴神啊,这位大叔可是Rtools的管理者、若干个包的作者(rgl等)啊。不过大叔问的是Flash的问题,还好我知道那么一点点,算是能解决。趁此机会,干脆回问两个C语言问题,子曾经曰过:问一个够本,问两个赚一个。

WWW.YIHUI.NAME XIE@YIHUI.NAME © 2007 - 2010 by Yihui Xie