经济

Exception Handling & OOP in R

image大概不同的学科会造就不同的思考方式,记得若干年前和LD走在加州 Albany (伯克利附近)有些破败的马路上,突然在一片空地上看到两只狗,LD脱口而出“两只”,我也脱口而出“活的”。所以LD是学理的,我是学文的。

又好比为称赞人,学文的也许会顺口说道:“东陵虽五色,不忍值牙香。”,学理的会问:“这是说啥的?”;学文的会说:“这说的是瓜,用来称赞你的。”;学理的说:“这不是在骂人瓜娃子吗?”。。。学文的会暗自庆幸没有说:“浪乘画舸忆蟾蜍,月娥未必婵娟子”(“姮娥遂託身于月,是为蟾蜍”——张衡·《灵宪》)。

编程语言也是一样,不同之处是 epistemology 上的 (大概也只有学文科的人才会把 ontology, epistemology 这些东西挂在嘴边),就好比接触 C++ 以前从来没想到过 R 的程序可以如此这般如此这般的来写:例如以前从来没有想过 R 里的 (line by line ) debugging,  exception handling , 以及 OOP 之类的东西。一个简单的例子,譬如突然想大致画一下任意股票期权的 volatility skew。

纯粹(旧的) R 式的写法:

   1:  library('quantmod')
   2:  library('RQuantLib')
   3:  x <- getOptionChain("AAPL",Exp ="2011-07-16")
   4:  optionVal <- as.numeric(x$calls[,2])
   5:  strike <- as.numeric(x$calls[,1])
   6:  getSymbols("AAPL",src="google")
   7:  n <- length(strike)
   8:  mtrty<-businessDaysBetween(from=Sys.Date(),to=as.Date("2011-07-16"))/252
   9:  under<-Cl(AAPL)[nrow(AAPL)]
  10:  imvol <- array(NA,n)
  11:   
  12:  for ( i in 1:n){
  13:  imvol[i]=EuropeanOptionImpliedVolatility("call", optionVal[i],under,strike[i],0,0.02,mtrty,0.2)$impliedVol
  14:  }

quantmod library 提供了直接从 Google, Yahoo 等来源读取金融数据的接口,RQuantLib library 是 QuantLib 在 R 里的 port。 imvol 是一个vector, 用来储存数值算法得到 implied volatility,但是因为这只是一个粗略的计算,数据中存在着一个很大的问题:underlying 的数据和 derivative 的数据不是 synchronous 的(high frequency 数据常有的一个问题),某个 strike 的 derivative 交易的频率比较低,所以它的价格滞后,不能体现出它的真正市场价格。也是因为这个问题的存在,我们在运行这段 code 时候很快就出现错误: 

   1:  Error in EuropeanOptionImpliedVolatility.default("call", optionVal[i],  : 
   2:    root not bracketed: f[1e-007,4] -> [2.533890e+000,6.291277e+001]

因为 derivative 的价格和 underlying 的价格不是 syn 的,所以合理的 implied vol 的数值解不存在。程序因此中断,如果看 imvol 这个 vector:

[1] 1.331497 1.250151 1.481016       NA       NA       NA       NA       NA       NA
[10]       NA       NA       NA       NA       NA       NA       NA       NA       NA
[19]       NA       NA       NA       NA       NA       NA       NA       NA       NA
[28]       NA       NA       NA       NA       NA       NA       NA       NA       NA
[37]       NA       NA       NA       NA       NA       NA       NA       NA       NA
[46]       NA       NA       NA       NA       NA       NA       NA       NA       NA
[55]       NA       NA       NA       NA       NA       NA       NA       NA       NA
[64]       NA       NA       NA       NA       NA       NA       NA       NA       NA
[73]       NA       NA       NA       NA       NA

只有三个有效值,后面的值全是 initialize 的 missing values。按照旧的方法,debug 找出出现问题的地方,逐一处理,但是这样很麻烦,有时候也没有必要。所以就想到借鉴 C++ exception handling 的 try - catch方法,如果出错,我们 throw 一个 exception,然后继续其余部分的 code。R 里面也有类似的方法,所以我们可以重新写这个 loop:

   1:  for ( i in 1:n){
   2:    result<-try(EuropeanOptionImpliedVolatility("call", optionVal[i],under,strike[i],0,0.02,mtrty,0.2),silent =TRUE)
   3:    if(class(result) =="try-error") next
   4:    else {imvol[i]=EuropeanOptionImpliedVolatility("call", optionVal[i],under,strike[i],0,0.02,mtrty,0.2)$impliedVol}
   5:  }

在上面的 code 里我们作了一个简单 exception handling,先 try implied volatility 的数值解,把结果定义为一个叫做 result 的 object,如果出错,那么 result 应该属于 try-error 这个 class,所以我们作一个简单的判断,如果出错了,就直接 next 跳过。最后我们的 imvol vector 是:

[1] 1.3314972 1.2501506 1.4810157        NA        NA        NA 1.0397009        NA
 [9]        NA 1.0749333        NA 0.9936863        NA        NA 0.7165703        NA
[17]        NA        NA        NA 0.4677549        NA        NA        NA 0.5650445
[25]        NA        NA 0.4720218 0.2539875 0.3110036 0.2952723 0.2441016 0.2276886
[33] 0.2379125 0.2209396 0.2250593 0.2162720 0.2144386 0.2117865 0.2078974 0.2044520
[41] 0.2014596 0.1984621 0.1990857 0.1978392 0.1984587 0.1999078 0.2007216 0.2027609
[49] 0.2042993 0.2119021 0.2126273 0.2281725 0.2231475 0.2280039 0.1892973 0.2453698
[57] 0.2485359 0.3305246 0.3448491 0.2755123 0.2963304 0.3480423 0.3299750 0.3087564
[65] 0.3814543 0.3350278 0.3369351 0.4618993 0.3985197 0.3226662 0.4635653 0.3968701
[73] 0.3984441 0.4608958 0.3962065 0.4239336 0.4901043

尽管中途出错,但是仍然不会中断我们的 loop。

更进一步,我们可以像 C++ 一样在 R 里定义 class 和 相应的 method,从而进一步提高 code 效率(主要是 reusability ,这也是 OOP 的主要目的之一)。R 里有两种定义 class 的方式,一种旧的 S3 class,一种是新的 S4 class。 这里用 S3 作为例子,我们首先定义一个 impvol class 和它的 constructor:

   1:  impvol<-function(tick, exp="2011-07"){
   2:    getSymbols(tick,src="google",from=Sys.Date(),to=Sys.Date())
   3:    under <- as.numeric(Cl(get(tick)))
   4:    x <- getOptionChain(tick,Exp =exp)
   5:    optionVal <- as.numeric(x$calls[,2])
   6:    strike <- as.numeric(x$calls[,1])
   7:    option<-cbind(strike,optionVal)  
   8:    impvol<-list(tick=tick,
   9:              exp=exp,
  10:              under=under,
  11:              option=option)
  12:    class(impvol)<-"impvol"
  13:    return(impvol)
  14:    }

R 的 class 的定义和 C++ 还是有区别的,在 R 的 class 里面,我们只定义了它的 member variables ( tick, exp, under, option ),和它的 default constructor.  它的 method 并没有在 class definition 里 declare。定义了这样一个class 之后,我们就可以方便的获取任意stock 的数据了,譬如:

   1:  s1 <- impvol("F")

我们初始化一个关于福特的 impvol class 的object,把它定义为 s1 ,然后我们得到:

   1:  > s1
   2:  $tick
   3:  [1] "F"
   4:   
   5:  $exp
   6:  [1] "2011-07"
   7:   
   8:  $under
   9:  [1] 14.18
  10:   
  11:  $option
  12:        strike optionVal
  13:   [1,]     10      4.30
  14:   [2,]     11      3.30
  15:   [3,]     12      2.25
  16:   [4,]     13      1.35
  17:   [5,]     14      0.62
  18:   [6,]     15      0.21
  19:   [7,]     16      0.08
  20:   [8,]     17      0.03
  21:   [9,]     18      0.01
  22:  [10,]     19      0.02
  23:  [11,]     20      0.01
  24:   
  25:  attr(,"class")
  26:  [1] "impvol"
  27:  > 

上面列出了 s1 的 member variables,它包含 tick(是string obj),exp(是date obj),under(是 numeric obj),option (是 matrix),它的属性是 impvol object。借助于 class,我们可以很轻松的获取任意的股票数据。注意我们这个 class 其实是从  list 这个 class 的 derived,所以作为 derived class,就像 c++ 的inheritance 一样,它也具有 list 的属性。

然后我们定义 method,这里主要是作图,画implied volatility,这里也和 c++ 类似,我们需要 overload 一个已存在的函数 plot():

   1:  plot.impvol<- function(x, ...){
   2:    n <- nrow(x$option)
   3:    mtrty<-businessdaysbetween(from=sys.date(),to=as.date("2011-07-16"))/252
   4:    imvol <- array(na,n)
   5:    for ( i in 1:n){
   6:    result<-try(europeanoptionimpliedvolatility("call", x$option[i,2],x$under,x$option[i,1],0,0.02,mtrty,0.2),silent =true)
   7:    if(class(result) =="try-error") next
   8:    else {imvol[i]=europeanoptionimpliedvolatility("call", x$option[i,2],x$under,x$option[i,1],0,0.02,mtrty,0.2)$impliedvol}
   9:  }
  10:  result<-cbind(x$option[,1],imvol)
  11:  plot(result,col="2",main=paste("implied vol of", x$tick),xlab="strike",ylab="implied vol",xaxt = "n")
  12:  axis(1,at=x$option[,1],labels=t)
  13:    }

因为 plot 是一个 generic function, 我们用 plot.impvol 来 overload 它,注意在我们的 plot 函数里,我们实际上先计算了它的 implied vol。检视我们的 class 的method:

   1:  > methods(class="impvol")
   2:  [1] plot.impvol

测试我们的 method:

   1:  s1 <- impvol("f")
   2:  s2 <- impvol("goog")
   3:  s3 <- impvol("aapl")
   4:  s4 <- impvol("c")
   5:  par(mfrow=c(2,2))
   6:  plot(s1)
   7:  plot(s2)
   8:  plot(s3)
   9:  plot(s4)

我们得到下面的 vol skew的 plot:

image

x 轴每一个 tick mark 都是一个 strike,如果那个 strike 对应的 implied vol 是 na,plot 自动就把那个数据点 drop 了。以 google 和 apple 为例,我们发现 deep ITM 的 call option 的 implied vol 有很多 missing values,并且还有异常的数值,其中的原因就是我们上面说的 liquidity 和 trading frequency的问题。最后一个 citi 的图,strike 在 $1 附近还有数据点,更能说明这个问题:这个数据源里还包括了citi并股前的数据。

OOP 大大简化了 R 的编程,所以学习 C++ 其实同时也很有助于 R 的使用,就像学点儿数学对于文科生也很有帮助一样:)

P.S. 因为编辑 CSS 出错,导致后半篇的字母全部被转化为小写 =_= 。

Blog分类: 
Free Tags: 

Gambler’s Fallacy?

193888_10150161408806083_619986082_8650414_6822855_o

更新:有一个错误,算 risk-adjusted 的 payoff,其实类似于 Sharpe Ratio, significantly different from zero 没有什么实际意义,至少要 significantly 大于 1 才算是 reasonable 的 strategy :) -- July 24, 2011

三月份的时候路过拉斯维加斯去国家公园旅行,发现了一种新的自动机械轮盘赌,虽然在停留时间短暂,但是仍然在这台机器上赚了不少钱,于是想到了一个古老的问题:Gambler’s Fallacy (GF)

举个 GF 的例子,譬如一个 fair coin (这个假设很重要),如果连续仍了10次,都是正面朝上,那么当我们扔第十一次的时候,是不是更可能出现背面呢?如果你认为背面出现的概率会更大一些,这就是 GF 了,因为基础的概率学告诉我们,每次投掷都是独立事件,第十一次投掷的结果正面和背面的概率仍然是相等的。

单单看这个例子本身没有什么太大的意思,但是同时我们从统计的角度看这个问题,因为大数定理的存在(i.e. 这个 process 是 mean reversion 的,你仍的次数足够的多,你的期望值趋近于 0.5 ),那很自然就会想到,如果我们不只是简单作单次的预测下注,而是从大量重复统计的角度上下注(赌反方向),那么我们的收益会不会比纯粹 uninformed 的投注(譬如随机投注,或者只压正面)要好?

需要强调的是,我们考虑的只是投注的策略,而不是做时间序列上的预测 (forecasting),因为就预测而言,这是一个明显的白噪声过程。也就是说我们只考虑一个策略优化问题。

当然这既是一个 theoretical 的问题,也是一个 empirical 的问题,我们偷懒的只从 empirical 的角度看这个问题。

我们把问题简单化,只关注简单策略,也就说我们的策略必须是能用大脑计算的,否则即便是你通过收集这个自动机械轮盘赌的数据,发现了这个机械的 idiosyncrasy 导致投掷的结果出现统计规律,能用譬如一个 exponentially weighted moving average (EWMA) 来预测,但是你如果不能快速心算出你的策略,这也是没有什么实际意义的。

我们考虑三种策略,前两种是 uninformed 的,也就是说策略是独立于你新获取的信息的,最后一种是 informed的,策略是基于新获取的信息的。

第一种策略称之为 Odd Even Strategy (OES),顾名思义,就是第一压正,第二次压反,第三次压正,重复直到赌博结束;

第二种策略称之为 Straight Bet Strategy (SBS),也就是不管怎样,都只压正(或者压反);

第三种策略称之为 Looking Back Strategy (LBS),每次压住前往前看 m 个 periods,given 一个 threshold value rho (0.5<rho=<1), 如果这 m 个 periods 的 average 大于 rho, 则压 1 (譬如 1 表示正面),对称的,如果 average 小于 1-rho,则压 0。 如果条件不满足,什么都不压。假定 m =10,我们向前追朔10个periods (同时也符合一般轮盘赌提供的历史数据),利用一些简单的optimization 和 calibration,  大概估算 rho= 0.618。

假设我们玩1000次,下注的时候每次下注 $1 ,我们的赌本是 $1000,三种策略的收益如下图:

image

上图的收益并不能说明什么,只是一个 realization,但是相对而言,第三种策略的标准方差相对比较小,原因之一是因为第三种策略并不是每次都下注,如果把图放大其实可以看到蓝色线条有很多“平顶”,这是不下注的时候。

基于这三种策略,我们作一个简单的蒙特卡洛模拟,结果见下表:

  n=10^4 n=10^5  
  r-adj payoff sd r-adj payoff sd
 OES -0.01797056 0.02302582 -0.006824031 0.007238402
SBS -0.03311233 0.02290396 -0.01122852 0.007258676
 LBS 0.1144682 0.02278219 0.1226927 0.00721828

 

上面提到 r-adj payoff 指的是 risk-adjusted final net payoff, 它是用每1000次轮盘赌的最终净收益除以这1000次轮盘赌收益的标准方差得到的(类似计算 Sharpe Ratio 的算法),n=10^4 是1万次模拟的结果,n=10^5 是10万次模拟的结果。模拟的结果说明:

  1. Uniformed 的策略(OES,SBS)的风险调整净收益都不 significantly different from zero (at 5% significance level)。这和理论的预期是符合;
  2. Informed 的策略(LBS) 的风险调整净收益是正的并且significantly different from zero。

也就是说这样简单的informed的策略是能够带来正收益的。注意这个策略只是告诉你什么时候下注,和如何下注,把它和其他一些特定的投注策略(譬如 modified  martingale betting strategy)结合,应该能够提供一些可观的收益,所以我们在拉斯维加斯赢的钱也不完全是运气。

这个结果同时一些 empirical observation 项符合:1)这种机器不是在每个赌场都有,只有拉斯维加斯的 MGM才有;2)这个机器前排队的人很多;3)这个机器很容易坏。

离我们的比较近的 Atlantic City 没有这种机器,所以在那里赌博,只能靠运气了,不过上周的运气不错:

243452_10150258617601083_619986082_9247826_1760032_o

哈哈,这样的小概率都让我撞上了,狗屎运:)

P.S. 这个问题也有很广泛的意思,譬如股票交易,比较 liquid 的股票的 log return 几乎肯定是一个白噪声(Fama 的 Efficient Market Theory,呵呵,不知道他什么时候能得诺奖),如果我们有 high frequency data,我们能否有一些策略,通过白噪声的 mean reversion 来获利?猜测是由于 transaction cost 的存在(bid-ask spread, commission fees) 上述 payoff 可能会小于零,因此没有太大的现实意义,但是赌博可以一试。

P.S. 希望上述的运算和模拟里面没有错误,有空会验算一下:)

Blog分类: 

买车记

IMG_6577

和 LD  在和煦的阳光中沿着哈德逊河步行了 29 里去吃拉面之后,决定还是需要买辆车。

作为托马斯·霍布斯的信徒,我们坚信 Scientia potentia est (知识就是力量,这句话的最早的书面表达来自于霍布斯的 De Homine ,翻译成英语就是 Concerning Man,但是通常却被认为出自弗兰西斯·培根)。

所以——

信息经济学告诉我们,因为 hidden information, 买旧车的风险多多(当然这也是 common sense,所以 Akerlof 的这篇 paper 最初被 AER 和 RES 因为过于 trivial 而据掉),所以决定买新车;

固定收益金融学告诉我们,贷款会有利率风险,贪婪的银行通常会多收取一个 call option 的钱来对冲 prepayment risk, 同时也会收取高于 risk-free rate 的 premium 来对冲 default risk (尽管我们不会 default, 但是就像我们不知道旧车会不是 lemon 一样,借贷者也不确定我们是不是 lemon,当然 credit score 可以部分的解决这个问题),所以决定不贷款一次付清;

下一个问题就是车了,对于选什么车没有任何的头绪,所以不得不依赖(不可完全信赖)的专家意见,看了(主观)认为比较可靠的 Consumer Reports 的 2011 年新车推荐, family sedan 这类推荐的是 2011 Nissan Altima,再加之我们上一辆车就是 Altima,开了很多年,从来没有出过太大的问题,也很喜欢,所以就决定买 Altima。

选好颜色,银色或者红色,添加了几乎所有可以添加的 package: convenience , convenience plus, 2.5 SL , premium audio, etc, Nissan 的网站给了建议零售价,大约 $28k,这则信息告诉了我们价格的上限,然后查 truecar.com 得到实际价格的 distribution ,再查了 NY 州和 NJ 州的消费税,开始向附近的 dealer 询问价格。 重点是 truecar 上资源公布价格的 dealer —— 这又是一个信息经济学的问题,如果 dealer 能够提供低价,它肯定有 incentive 公布它的低价,否则它不会把自己的价格作为 public information 公开,所以这是一个 seperating equilibrium。当然问题是 dealer 是否会 honor 它的 commitment, 所以这点 truecar 作的还不错,它把所有的 price quote 都作为 contract —— 至于 contract 是否能被执行,这就是一个更宏观的政治经济学问题了,买辆车大约不用考虑这个层面上的问题,好吧,在美国,我们 assume 大部分的 contract 都可以执行。

拿到价钱,比建议零售价自然要低很多,然后就是去试驾和讲价钱了。就试驾而言,我们也开了七八年车了,一点点儿经验还是有的,至于讨价还价 —— 好吧,我本科学外交,我博士研究 bargaining theory,对付一个小小的 dealer 。。。结果。。。结果被 dealer 秒杀了 –_-# 。对于实际的 bargain,LD都比我强很多,最终 dealer 只肯再便宜 $700,然后就不为所动。

Rational 的讲,这个价钱已经在我们预期可以接受的范围之内,所以成交,于是耗时1.5 小时就买了这辆车。

本来第二天已经租好了车,因为打算去 Atalantic City 过周末,正好有了自己的车,退掉了租车,一来一回就算是长途试驾了,感觉很不错,终于又可以像以前一样自由了:)

唯一的遗憾是开车15分钟就能吃到的拉面,不如步行3个小时吃到的好吃,由此可见,步行 29 里是好吃拉面的必要调料。。。

Blog分类: 

监守自盗

Inside Job

看了最新得了奥斯卡最佳纪录片奖的 Inside Job (汉语译作《监守自盗》)之后,倒觉得它无关乎金融和经济,而是一部不错的政治教育片。

07年开始的金融危机像所有大的危机一样是一种并发症,虽然现在很方便的把它归罪于次贷,但是次贷充其量只是一个导火索,引发了了其它的危机,就好比(传说中的)害了背疽的徐达因为吃了蒸鹅而死掉——次贷就像是蒸鹅,其它的病症就像背疽,如果只害背疽不吃蒸鹅,不一定会死;同样的不害背疽而吃了蒸鹅肯定也不会死,那究竟蒸鹅还是背疽算是主要的致死因素?(背疽和蒸鹅都是死亡的既不充分也不必要原因,当然关于这个蒸鹅和背疽的问题在抽象和上升到哲学的高度以后,形成了政治学和社会学里一个新的分支——新的定性方法研究 –_-# )

次贷的问题在07年1月就爆发了,但是当时并没有马上引起危机;而真正的危机是从07年8月6日才开始的,首先受到冲击的是对冲基金和投行里作量化交易的部分,他们的策略的相关性很强,一开始几乎是莫名其妙的,大家同时开始赔钱,他们作多 [long]  的股票证券开始狂跌,他们做空 [short] 的股票证券开始狂升,他们的资金杠杆比率 [ leverage ratio] 越来越高,所以不得不赔钱卖出作多的股票,再赔钱买入做空的股票,以降低资金杠杆比率 [deleverage] ,结果这一进一步造成量化交易市场的恐慌(对于普通的投资者是看不到这样的恐慌的,事实上那一天,道指还涨了),大量的抛售导致一些对冲基金一两天内的损失就达到20%。但是这个莫名其妙的危机的源头到底是什么,谁也不知道,现在唯一比较合理的解释就是MIT Khandani 和 Lo的那篇文章(在那之前其他人也有类似的看法):某个很大的多策略的对冲基金在次贷或者债务担保证券(CDO)或者其他类似的金融产品上赔了钱,所以不得不卖掉持有的其它产品(譬如股票)来 deleverage, 导致了链式反应。

然后马上受到波及的(也许不是被波及而是同时发生)是回购协议市场(Repurchase Agreement Market,简称 repo )。 银行短期向大的投资者借贷必须交付抵押(因为FDIC对于这样的借贷是不提供保险的,所以必须抵押。在危机前,FDIC对于个人储户的存款保险单的限额也不过10万美元,危机爆发后,这个限额上升到25万美元),通常是 securized bonds,而抵押的时候必须要 haircut,也就说银行抵押一千万美元的 securized bonds,只能获得譬如说 0.95千万 的借贷。通常情况下,haircut 是几乎是 0。但是在量化交易危机的同一周,07年8月9日,repo 市场开始恐慌,投资者要求增加 haircut 或者就要马上取款(就像经典的 bank run 一样),repo 市场大约有 12 万亿美元(次贷的市场大约只有1万2千亿),20%的 haircut 就要求银行必须多拿出来两万亿左右的资产抵押,这对银行来说是不可能,所以银行只能卖资产还钱,但是当时 securized bonds 的市场已经变得很差,为了避免损失,银行只能卖没有 securized 的 AAA bond (也就是研究危机的 literature  常说的 fire sale), 因为银行的大量抛售,bond market 出现了一个很奇怪的现象——从07年9月开始,很长的一段时间内,AAA bond 和 AA bond 的spread 是负的(也就说 rating 更高的 bond 卖的比 rating 更低的bond 还便宜)。。。于是危机开始扩散到银行 (参看  Garton 的 NBER working paper )。

这两个例子还只是冰山一角。。。蒸鹅不断的影响着背疽,终于悲剧了。

回到这部电影上,其实复杂金融产品里的信息不对称和道德风险( moral hazzard ) 也早已为人所知,其实不单是金融产品,任何涉及专业知识(其实也就是不对称信息)的交易,都会出现类似的问题,譬如你去修车,当你根本不懂修理的常识时,,你很有可能被黑车铺宰,就像你每次去 Jeff Lube 换油, 它都危言耸听的让你换 air filter 一样。

而电影中对于一些的解决方案似乎就只有一个词“regulation” (监管)。这个词容易拼,却很难做到,这是决策科学和政治学里一个很大的问题,是另一个层面上的信息不对称问题: 如果你想监管,你必须知道如何监管,但是对于复杂的金融衍生物和金融市场,要想弄明白异常之难,你有两个选择:第一,让政客们花时间去学习熟悉明白金融市场,譬如在国会开会的空隙里去学学随机微分;第二,请金融方面经验和知识的“专家”,譬如高盛的前 CEO Henry Paulson来协助制定金融法规。

第一个选择显然是不可能的,让 Sarah Palin 弄明白如何用 Gaussian copula 给 CDO 定价以及这样定价的问题,比让她拼写对 repudiate 难上上万倍;

第二个选择正式影片里批判的,因为 Paulson 这样的专家很可能是 biased (又回到我们关于 biased advisor 的讨论),事实上涉及金融,任何专家都有足够的incentive 来提供 biased 建议,就像影片中采访的某大学商学院的教授和院长一样。

那还有没有第三个选择?有,所以现在有了 Dodd-Frank 法案 —— 与其听信专家的 biased advice 或者 babbling,干脆作出不获取信息的 less informed 的盲目决策好了。 结果呢?

举个例子,很多人都说金融评级公司在这次危机中有不可推卸的责任,所以 Dodd-Frank 法案说,评级公司必须对自己的评级承担法律责任。于是评级公司拒绝让其他公司在发行新的债券的时候使用他们的评级,而法律规定新的债券发行的时候必须要有评级公司的评级 —— 于是就成了僵局。这一僵局意味着价值 1.4 万亿的按揭贷款市场将无法再发行新的债券,这对经济的影响是显而易见的。

问题不仅仅是评级,还有 foreign exchange swaps, forwards 等等。现在有了问题,那就改吧,怎么改?让政客去学习金融?还是再听 Paulson 们一次?还是再盲目的改一次,try and error? 这一问题再次出现。

这个问题也许有制度主义上的解,[这段删除,本来想说 Keith Kriebal的,结果发现会有误伤之嫌。]

好吧,这部片子提出了一个很有趣的古老的问题:)

Blog分类: 

嘉庆朝

The_Imperial_Portrait_of_Emperor_Jiaqing2前两天说起清代大臣的谥号,因为太忙没时间,未能尽言,现在有点儿空闲,多说两句。

美谥有点像时尚,流行的原因有时也不太可考,就像后世以为最荣的“文正”,如果找出它成为 No 1 的原因,大概源头还在司马温公那儿。《宋史·司马光传》上说:

夏竦赐谥文正,光言:“此谥之至美者,竦何人,可以当之?”改
文庄。

司马光认为夏竦不能谥文正,而他自己后来又谥文正,大概正是因此,抬高了“文正”的行情。宋人笔记《梁溪漫志》里也提到:

谥之美者极于文正,司马温公尝言之而身得之。国朝以来得此谥者惟公与王沂公、范希文而已,若李司空(昉)、王太尉(旦)皆谥文贞,后以犯仁宗嫌名,世遂呼为文正,其实非本谥也。如张文节、夏文庄始皆欲以文正易名而朝论迄不可,此谥不易得如此,其为厉世之具,深矣。

所以到了清代,一般大臣的谥号,内阁拟定就可以了,唯独“文正”这个谥号必须要皇帝特准,因此清代一共只有八位“文正公”(当然这个数目比起宋代还是算多,正如上面引文所言,宋代有些“文正”的谥号是因为避讳从“文贞”而来的,旧时“贞”、“正”同音,不算真正的文正)。而这八位文正公除了一两位外,大概都未能和宋代的范文正(仲淹)或者司马温公相比,而里面最问题最大的恐怕要数嘉庆、道光两朝的曹振镛了。

中国历史上不乏忠奸良佞之辩,而曹振镛从各个角度来看似乎都不算奸佞之臣:他忠厚、清廉、退让、谨慎。特别是清廉,在乾隆以后贪渎横行的时代,是否清廉几乎成为判定良臣的最重要标准之一。譬如在对待工程的态度上,通常贪官都恨不得皇帝天天大兴土木,以便中饱私囊,而曹振镛却屡次请罢不急工程,撙节糜费。曹振镛是安徽人,世代和盐商有很大的联系,但当朝廷改行淮北票法伤及旧盐商利益时,他也没有护短,而是说“焉有饿死之宰相家?”,支持改革。曹振镛也算是忠厚之人,尽管很多情况下,很难界定圆滑和忠厚,但是他毕竟也没有像传统意义上的权奸一样大肆排挤贤良。

但是正是像曹振镛这样的良臣彻底把清朝拖入了“嘉道中衰”。道光朝一位叫做朱琦御史有一篇《名实论》,认为德行有“乡曲之行”和“大人之行”之分:乡曲之行“曰忠厚 ,曰廉隅 ,曰退让”;大人之行,“在于经国家 ,而安社稷 ,有刚毅之节 , 为人主所惮 ,有深谋远虑 , 为天下长计 ,合则留 ,不合则以义去 ,身之安否 ,不遑计也。世之指擿, 不敢逃也。” 嘉道之间的问题就在于所谓的良臣都是有着“忠厚、 廉隅、 退让”乡曲之行的人,这些人“峨冠博带 ,从容缓趋于廊庙之间 ,上之人固亦深信不疑, 以为渊厚不可以测, 一旦遇大利害, 束手无措, 缄口结舌而不敢言, 所谓忠厚廉隅退让至此遂举无所用 !”

曹振镛就着这样良臣的代表,虽然他生极恩宠, 死备哀荣,但是逐字逐句读《清史稿》、读清代的笔记野史,你根本找不出他到底有过什么事迹。他的一生,倒是真像朱克敬在《瞑庵杂识》里录入的《一剪梅》描述的那样:

仕途钻刺要精工 ,京信常通 ,炭敬常丰 ,莫谈时事逞英雄 ,一味圆融 ,一味谦恭。
大臣经济要从容 ,莫显奇功 ,莫说精忠 ,万般人事要朦胧 ,驳也无庸 ,议也无庸。
八方无事岁年丰 ,国运方隆 ,官远方通 ,大家赞襄要和衷 ,好也弥缝 ,歹也弥缝。
无灾无难到三公 ,妻受荣封 ,子荫郎中 ,流芳身后便无穷 ,不谥文恭 ,便谥文忠。

曹振镛把词中的境界发挥到了极致,但问题是清代到了嘉道间并非“八方无事岁年丰 ,国运方隆”,而是危机重重。

重重危机,有些危机已经是很“现代”的问题,譬如美洲白银产量激增(因为使用了新的冶炼技术)和中国对外贸易顺差带来的输入性通货膨胀。

美洲白银产量的激增就像现在美国量化宽松政策一样,大量的白银通过贸易顺差涌入中国,首先带来的是“汇率”的问题 —— 铜钱和白银比率的问题。

顺治三年的旧制,制钱每十文准银一分,清代一直贯彻这一比率,一两白银兑换铜钱一千文,所有的货币支付,数少时用钱,数多时用银。但是大量白银的流入,导致这样的比例无法维持,康熙六十一年时,钱银比已经涨到七百八十文易银一两,为了维系1000:1的比率,政府只能加大制钱的投放量,康熙间,京局每年铸币大约六、七亿文,到了乾隆、嘉庆两朝,每年大约铸币十五六亿,铸币增长了近三倍。

增加货币投放量的结果是通货膨胀。虽然从一定程度上讲,康乾间的通胀刺激了经济的发展,对于“康乾盛世”也功不可没,但是持续的通胀亦是“嘉道中衰”的罪魁祸首之一。从康熙到嘉庆间,物价大约涨了三倍,但是国家的正式财政收入却并没有增长。特别是嘉庆帝恪守康熙帝“滋生人丁永不加赋”的许诺,并未增加丁银,物价上涨而赋税未涨。

嘉庆帝始终牢记着“明亡于万历”的祖训,不敢增加税赋,自嘉庆初平定了川陕白莲教起义以来,财政一直吃紧。

同时,国家控制的专卖的盐业也因为实行官方定价(清代盐价提价必须得到皇帝的批准,哪怕只是一斤涨价一两文钱),不随市场价格浮动而不断亏损,譬如长芦盐厂,到了乾隆末每年亏损折合银七八十万两。

官员俸禄自雍正朝颁行养廉银以来也未在提高,显而易见的后果就是更加大规模的贪污 ,无官不贪。

到了嘉庆朝,通胀累积的结果就是中央财政日渐衰竭,地方官员贪污成风。

然后还有人口问题。人口激增,人均土地减少,出现大量无地流民(可以类比现在的失业率),如果政府主导发展工商业,这些流民还可安置,但是嘉庆帝偏偏没有延续康乾间对于工商业的宽松政策,反而禁止民间开矿等等,于是无地的流民民变不断。。。

各种问题累加,社会怪象层出不穷。譬如嘉庆八年,竟出了中国历史几乎空前绝后的平民刺杀皇帝事件(明代的梃击案毕竟针对的还只是东宫)。一个叫做陈德的厨子,因为妻子亡故,岳母瘫痪在床,膝下有一对未成年的儿子,自己又被东家辞退,没有了生计,因为萌发了刺杀皇帝的念头,于光天化日之下在神武门持短刀刺杀嘉庆帝,在场的侍卫们从未经过这样的场面,竟都吓的呆若木鸡,幸亏有大臣格挡,刺杀并未成功。

而面对这样的危机与问题,嘉庆皇帝几乎茫然不知所措,而朝廷重臣曹振镛对于一切问题的答案只是“多磕头,少说话。”。。。。

。。。 其实历史有很多可以借鉴的地方。

Blog分类: 

利比亚的内战

image早上起来看报纸(如果用 Kindle,并且有在线订阅,顺便推荐一下 Caliber,可以自动下载新闻传到 Kindle 上,比用 Kindle 直接订阅便宜),先看国际版,扫一遍关键词,有 China先看,看完再回来看美国国内的头条,然后是欧洲和中东(包括北非,就是所谓的 Greater Middle East),最后是拉美和非洲,然后才看 Finance 和 Business 的部分。之所以关心中东,完全是因为这些年学习和研究的原因,随手翻看最新一期的 International Security (IS),虽然是关于越战的特刊,但是除了越战的三篇文章,其余两篇文章和一片 correspondence 都是关于中东的,如果中东平安无事了,不知道 IS 会不会改成半年刊 :)

三月初的时候,中东的危机蔓延到利比亚,几乎所有的媒体都在预测卡扎菲下台(其实直到上周,媒体还在预测卡扎菲下台)。但是我觉得不大可能,所以三月三日在 facebook 上留言说:

My (pure theoretical) prediction of Libya (based on my models) : Gadhafi will stay in power; the country will split; the East part will declare independence; there will be a limited civil war; a peace will be finally brokered. Light sweet crude oil will return to about $90 per barrel in 3 months. Shorted 3-month crude oil future and see whether I am right :-)
March 3 at 3:07am · · Like · Comment

不说提及的数学模型,从 intuition 的角度说,一个国家如果在文化、传统、历史、制度上越 homogeneous,公众抗议越可能得以和平的方式推翻非民选政府或者彻底被镇压(前者的例子:以前东欧的各民族国家,现在的埃及和突尼斯;后者的例子,不说了,一说又要被封几年了),至于是成功还是失败,很大程度上取决于结构上的原因(i.e. 譬如东欧诸国是因为苏联的削弱和外交政策的改变,深层次上是经济、食品危机造成的;中东也是因为经济、食品危机。note:苏联被虚弱对于东欧诸国和对于中国的效果是相反的,因为那时苏联不但不是中国的保护伞,反而是中国的威胁);一个国家如果越 heterogeneous,公众抗议越可能的演变为流血的内战——被削弱的中央政府正好给等待时机的分裂主义者以机会,他们会伺机而动,而分裂主义的叛乱也正好转移了原本的公众抗议的焦点,有利于中央政府重新动员力量(譬如以前的南斯拉夫和现在的利比亚)。利比亚与埃及、突尼斯不同,它是在1951年由三个地区拼凑起来的,分离主义在东部一直存在。

现在看来,我的预测的第一部分是正确的,卡扎菲肯定是不会下台了。

今天的 Wall Street Journal 一改口风,又开始预测东部的叛乱者要被彻底的镇压:

AJDABIYA, Libya — Col. Moammar Gadhafi's forces seized the last town standing between them and the rebel capital, raising the specter that, even if the U.S. and Europe decide to intervene on the rebels' behalf, their help may come too late.

但事实上彻底的镇压恐怕也没有这么容易,理由其实也很直白,看看南苏丹或者科索沃就明白了。

为了检验一下我的模型(也是毕业论文的主要部分之一),在预测的同时也在 paper account 上 short 了100 手的三个月到期的石油期货,因为我预计三个月后利比亚的秩序与和平可能会大致恢复,利比亚的石油生产和出口同时也会逐步恢复,卡扎菲更会努力加大石油产量来弥补战争的损伤。

然后就出门旅行了,一周多的时间,足足开车开了有两千英里:)

到家的时候,石油已经开始狂跌,到了昨天 short 的 100 手石油期货已经赚了 40% 的利润(是 paper money,没有任何真正的价值,完全是为了满足好奇),不得不平仓了。但是赚钱的原因却不是因为利比亚,—— 是因为日本地震 –_-#

之所以平仓,是因为实验已经被地震这个超大的 external shock  给毁掉了(对于这个实验而言,欧洲的债务危机,亚洲的通货膨胀的带来的噪音都是在可容忍范围内,但是日本震的冲击实在太大了。)。。。所以地震很可恶 (同时 bless 地震的遇难者)!

Blog分类: 

世界杯和孔多塞的陪审团定理

183px-Marquis_de_condorcet_hd[1]世界杯踢完了。作为一个资深球盲,我开始认真看世界杯(的结果)是从 1/8 决赛开始的,因为从那时起,我开始在 BBS 上参与赌球活动:除了第一场赌输了以外(因为第一场是随便下注的),接连的六七场包括决赛都赌赢了,赚足了伪币。

当然,这届世界杯,只看章鱼保罗的预测就可以——但是这是事后诸葛亮,因为事前没有理由认为章鱼的预测都是准确的;并且作为赛先生的信徒,也无法说服自己信章鱼。所以作为球盲,赌球的决定其实是通过孔多塞的陪审团定理 ( Condorcet Jury Theorem, CJT)来完成的。

孔多塞是18世纪欧洲启蒙运动以及法国大革命时期吉伦特派的代表人物之一,后来被执政的雅各宾派拘捕,两天后死亡,他留下的 CJT 最初只是一个比较松散的定理,大致的表述为:

在一些条件下,当面对两个选择并存在不完全信息时,多数人的选择总优于这些人中任何一个个人的选择,并且参与选择的人数越多,得到的结果越优。”

举个最简单的例子,假设一群淳朴的山民逃难,面前出现两条路,这群人里每个人多多少少都对这一带的自然环境有所了解,但是没人都确切的知道那条路更好走一些,这时由头人作出选择不如由大家一起投票的作出的选择更优,并且投票的人越多,得到的结果就越优。

CJT 里很容易看出德先生的影子 —— 没错,经过证明的 CJT 曾经被作为民主的数学基础,但是后来发现 CJT 中的“在一些条件下”的这些条件实在是太严格、太多限制以至于对于现实政治而言变得不切实际起来,所以社会选择理论\实证政治理论的先驱之一 Duncan Black 曾评价说对于民主政治,CJT 是一个 “truly … … an unpromising start” 。

【题外话,Black 是苏格兰人,虽然他是用数学方法研究政治的先驱者,并开创了经济学和政治学里一个很广阔的领域,但是当年他在英国却混得很惨。他的想法并不被人接受,而是被质疑和责难。他投往当时英国顶级期刊 The Economic Journal 和 Economica 的两篇 paper 都被无情的拒掉了,他那本书 The Pure Science of Politics 先后投给了四个英国的出版社,全部被拒;

而此时在大洋彼岸的美国,一个比他年轻十二岁的小伙子也在作者同样的工作,他就是后来名声如雷贯耳、拿了诺奖的 Kenneth Arrow。Arrow 的毕业论文 Social Choice and Individual Values 很顺利的就于1951年发表了,而此时 Black 的一篇 paper 正在 Journal of Political Economy 被审阅,事实上,他的这篇 paper 1949年就投了,但是被 JPE 压倒 51年才给结果—— JPE 的编辑和审稿人对 Black 说,你这篇 paper 和 Arrow 最新出的一本书的想法很相近,你应该做些更改,把自己的 paper 和 Arrow 的贡献联系在一起 —— 言外之意是说 Black 借鉴了 Arrow 的工作,应该给 credit。 Black 一怒之下就取回了投往 JPE 的这篇 paper 而是自费找了一家出版社自己出了本小册子 Committee Decisions with Complementary Valuations … … 顺便说一下 JPE 此时的编辑也是 Cowles Commission 的 Assistant Director of Research,而 Arrow 的毕业论文就是在 Cowles Commission 作的  …… 此一事足见学术界人脉的重要以及开创一个新领域的艰难。 PS,此八卦来源于芝大的诺奖得主科斯】

扯远了,CJT 对于民主政治的作用的有限,但是对于赌球却有莫大的帮助 —— 每次在 BBS 上赌球之前,在网上查了欧洲各大赌球网站的赔率,这些赔率基本上都一致,基于这些赔率在 BBS 上下注,毫无例外,全部都赢了 ——因此推测章鱼保罗的选择大概是饲养人员看了各大赌球网站的赔率后操纵的;

具体的说:赌球只有两个选择(足球毕竟是两个队踢的嘛),大部分赌徒对于每个球队多多少少都有些经验与信息,所以 CJT 的基本条件满足;

另外,CJT 要求“真诚投票”,这在赌博里是显而易见的,因为要用真钱下注,必然是 sincere voting;

CJT 要求信息获取的成本不能太大,否则会有人 free ride;赌徒中的大部分应该是铁杆球迷,他们对于足球的了解使得他们获取信息的成本不大,对于我这样的球盲,确实是 free ride 了,但是我并没有参与真正的赌球中,不影响能够低价获取信息的球迷的选择;

CJT 要求投票之间的关联性不能太强,网络赌球由于没有距离成本,参与者本身就是高度分散的,因此也基本上满足这个条件;

CJT要求投票者目标相同,赌球的人都想赢,没人专门是来向赌输的;

等等等等。所以按照 CJT 投注,对于球盲来说,确实是最优的选择,而事实也证明如此 —— 不过这只是一些直觉上的判断,并没有经过严格的数学证明 —— 也许严格的证明会有一些很有趣的结果,但是 。。。算了吧:)

Blog分类: 

罗斯柴尔德的滑铁卢

啃赛百味作晚餐时看了刘镇伟的《越光宝盒》。故事一般,所以被中间有一段本意是用来搞笑的《友谊地久天长》的插曲给吸引,到 Youtube 上搜索了 Waterloo Bridge,重温了这部片子的经典片段,随手想查一下这座滑铁卢桥在什么地方,但是在搜索返回的结果中却发现了罗斯柴尔德(Rothschild)的滑铁卢。

这时的内森依然毫无表情地靠在他的宝座上。交易大厅里终于有人发出惊叫:“罗斯柴尔德知道了!”“罗斯柴尔德知道了!”“威灵顿战败了!”所有的人立刻像触电一般回过味来,抛售终于变成了恐慌。人在猛然失去理智的时候,跟随别人的行为成了一种自我强制性行为。每个人都想立刻抛掉手中已经毫无价值的英国公债,尽可能地留住一些所剩无几的财富。经过几个小时的狂抛,英国公债已成为一堆垃圾,票面价值仅剩下5%。

--《货币的战争·拿破仑的滑铁卢与罗斯柴尔德的凯旋门(2)》

大概所有对历史有些知识的人都会被上面引文的最后一句话给吓一跳,我开始以为是网页转载的笔误(虽然没有看过这本书,但是知道它是畅销书),但是查了几个版本都是如此,看来原作者大概就是这样写的。

不知道原作者是否明白大英帝国的公债(consols)如果跌倒面值的5%究竟是怎样一个概念?举个例子:俄国革命以后,布尔什维克政权在1918年2月拒绝偿付沙俄政府的公债。沙俄政府1906年发行的年利5%的公债价值急跌,可是也没有跌倒5%这个数量级,而是在原面值的 45% 左右交易。在整个20年代,沙俄公债仍然在被以面值20%左右的价格交易,直到30年代,沙俄的公债才彻底成为废纸。从沙俄政府颠覆到公债完全作废大概过了十几年的时间。相比之下,如日中天的大英帝国的公债怎么可能因为一场滑铁卢就跌到面值的 5%?

英国保存有世界上最完整的金融历史记录,查一下十九世纪英国 consols 的价格,在滑铁卢之战前后,英国的公债确实是在低谷,但是价格仍然有面值的57%左右,而不是《货币的战争》里提到的 5%。

当然《货币的战争》这一章里(其它没有看),夸张的并不只有英国公债的价格。更为夸张的是他把罗斯柴尔德的滑铁卢改写成了他的凯旋门 —— 因为罗斯柴尔德恰恰是因为滑铁卢之战的胜利而险些损失惨重。

当拿破仑从厄尔巴岛逃回欧洲再度称帝时,所有的人包括罗斯柴尔德都预期又要打仗了,并且这场仗可能还会持续不短的时间,所以英国的公债开始下跌,一直跌倒了1814年3月拿破仑第一次战败之前的价位。因为人们预期政府为了打仗,又要增加公债发行来进行借贷了。而有着复杂商业网络的罗斯柴尔德家族也在这样的预期下,开始囤积黄金,不仅因为黄金是战时硬通货,并且战争带来的通胀必然会让金价上涨。

但是,出乎一般人意料的是拿破仑这次很快就在滑铁卢惨败——虽然这可能只是一个系统微扰带来的小概率事件,可是它的影响确实深远的。不谈政治,仅仅在金融上,拿破仑的滑铁卢就让罗斯柴尔德家族同样面临着滑铁卢——他们手上握着大量即将贬值的黄金。

为了避免损失,此时的罗斯柴尔德家族与其说理性(rational)或者老奸巨猾,倒不如说更符合行为经济学的展望理论(prospect theory):面对损失,大多数人都是风险喜好的(risk-taking)。所以他们在滑铁卢之战后的第二天开始用手中的黄金购买英国公债,因为战争如果结束,公债的预期收益将增加——但这样的决定风险非常高,因为拿破仑还并没有真正投降,仍然有卷土重来的可能(当然,罗斯柴尔德家族可能会比普通人有更精确的信息,所以风险相对会低一些)。但是这次他们赌对了,七月拿破仑投降再次被放逐,英国公债开始回升,经过前后三次增持之后,罗斯柴尔德家族在1817年11月抛售手中的公债,这次投资一共为他们带来了六亿英镑(折合成现在的币值)的利润。(数字来源:The Ascent of Money

所以相信种种《货币的战争》中的阴谋,还不如读一读内森·罗斯柴尔德的一封家书:

After dinner I usually have nothing to do. I do not read books, I do not play cards, I do not go to the theatre, my only pleasure is my business.

-- 来源: Rothschild Archive, London, XI/109, Nathan Rothschild to his brothers Amschel, Carl and James, 2 January 1 8 1 6. 转自:The Ascent of Money

Blog分类: 

公信力 != 不撒谎

刚刚读到桑林志转帖的一篇 blog,关于专家的公信力,他转引了一段很意思的话

至于说转基因粮食是否安全,你得去问专家,而不是韩寒 … … 如果一个国家的所有专家都失去了公信力,国民遇到任何事情都不信专家,却对一个赛车手的话言听计从,那这个国家也就没救了,Let It毙吧。

专家的存在是因为信息不对称,由此想到一个很有意思的问题:有公信力的专家未必是讲真话的专家。举一个很简答的例子就能说明。以转基因食品为例,假设有两种概率相同的可能:{转基因食品有害,转基因食品无害},前者用 0 表示,后者用 1 表示,并用 s 表示这两种可能的结果 i.e. s \in {0,1} 并且 Pr(s=0)=1/2;假设专家有能力得知 s, 但是专家也不是万能的,也有犯错的时候,假设他正确的几率是 p,并且 p>1/2 也就是说专家大部分情况下还是对的。好的专家说实话,坏的专家(譬如替利益集团说话的专家)总倾向于宣布 s=1 (转基因食品无害)。老百姓并不知道一个专家是好专家,还是坏专家,对于某个专家而言,老百姓认为他是好专家的概率是 q ,这个 q 就是公信力 (也就是说这个专家的可信度)。在专家作出判断之后,这个判断是可以被时间证实的(譬如,随着时间的流逝,慢慢的大家对于转基因食品是否有害有了更清晰的认识)。

现在,假设一个好专家(当然老百姓不确定他是不是一个好专家)宣布 s=1 (转基因食品无害),并且事实证明转基因食品确实无害,那么这个好专家的公信力会上升还是会下降呢?(i.e. q 是会增加还是会减小?),很不幸是,这个说真话的好专家,他的公信力会降低,即便是他的话被证明是正确的这是一个很简答的贝叶斯更新:

事实是 s=1且好专家宣布 s=1 的概率是 p ;事实是 s=1 且坏专家宣布 s=1的概率是 p+(1-p)*c,之所以有 (1-p)*c 这一项是因为坏专家在事实是 s=0 的情况下也有可能宣布 s=1,换言之,坏专家宣布 s=1 的概率总是要高于好专家,那么,根据贝叶斯法则,这件事情过后好专家的公信力q*:

(q*|专家宣布s=1,事实证明 s=1)= q*p/(q*p+(1-q)*(p+(1-p)*c)<q

也就说好专家的公信力反而下降了。同样的计算,如果一个专家明知 s=1 却宣布 s=0,尽管后来事实证明 s=1,这个专家撒了谎,但是他的公信力却是上升的。

不用贝叶斯法则,仅用简单的逻辑也能说明这个问题:因为坏专家总是倾向于宣布转基因食品无毒,因此如果一个专家宣布转基因食品无毒,不管后来事实证明转基因食品是否有毒,他都更可能是一个坏专家,他的公信力会下降。同样的,不管转基因食品是否有毒,如果一个专家一味的宣布转基因食品有毒,那么他的公信力一定会上升,尽管他是在撒谎,或则他只是单纯的无知。

所以,有公信力的专家未必是好专家,很有可能只是他比较在乎自己的公信力而已,他的话是不包含任何有用信息的。换言之,当一个专家或者科学家开始关心自己的公信力的时候,他已经不可能成为一个真正诚实的专家或者科学家了。。。因此有时候会觉得公共知识分子这个概念很滑稽。。。

一切都是因为消除不去的不对称信息,我们的世界是不完美的。

脚注:【1】文中例子的原型来源于: Morris, Stephen “Political Correctness” The Journal of Political Economy, Vol. 109, No. 2 (Apr., 2001), pp. 231-265

【2】 我不知道转基因食品是否有害,文中的例子只是假设

Blog分类: 

R 的 Vectorization

最先习惯的用的计量软件是 stata,然后是 vba for excel, 然后是 R,大概因为是这个学习路径,导致了在 R 中的一些不良习惯。 stata 的指令很多都是直接针对 vector 的,譬如下面的 panel data:

ID Year X Y
CHN 1990 45 36
CHN 1991 23 62
CHN 1992 55 90
JPN 1990 79 56
JPN 1991 60 72
JPN 1992 78 100

如果需要只需 CHN 的数据,在 stata 里只要:

keep if ID==”CHN”

就可以了。而 VBA 中因为 excel 表格的直观,一般是用 for  或者 do loop:

Sub chn()

n = Range("A50000").End(xlUp).Row
for i = n to 2 Step -1
if Cells(i,"A")!="CHN" then Cells(i,"A").entiredRow.delete
end if
next i

End Sub

因为 R 中的 if statement 不能直接针对 vector, 所以就习惯像 VBA 一样用 loop 来整理数据,但是因为 excel 中最大的数据量不过 6万五千多行 256 列,数据量并不大,所以用 loop 虽然慢,但是因为数据量的限制,还算能忍受,但是在 R 中,如果有上十万的 observations,再用 loop 就极其的痛苦了,虽然R中的loop 的效率要比 VBA 高(尽管不如 S),虽然刚换了 Duo Quad 的 CPU,但是仍然能算到死机 (虽然可以 remote access 学校的 cluster 上去,但是浪费学校的资源也不好),所以迫使自己重新学习 R 中的 vectorization,其实比如上面的例子,在 R 中用 vector 作也简单(假设上面 data frame 的名称是dat):

chn<-dat[grep("CHN",dat$ID),]

也挺简单的。所以程序还是一个摸索熟练的过程 ( 虽然我还没有发现如何像 stata 一样便捷的在 R 中的 panel data 里创建 lag variable,并且还在等待大牛人们完善 R 中的 panel data package,譬如 fixed-effect negative binomial model,但是 R 的灵活性,特别是在编程和模拟上,还是超出其他软件很多,特别是 R 是 免费的!)

Blog分类: 
Free Tags: 

Pages