SAS金融函数(1):期权定价(new in SAS9.2 Base)

 未分类  SAS金融函数(1):期权定价(new in SAS9.2 Base)已关闭评论
11月 301999
 

以前贴过一份SAS9.1 Base的金融函数(23个。SAS9.1/ETS还有9个),惜乎没有展开来讲。现在SAS9.2 Base新增了一些有意思的金融函数(还有一些调整,比如,SAS9.1/ETS那9个金融函数都整合到SAS9.2 Base中去了),正好可以慢慢道来,从新增的期权定价函数开始(以前这些函数在SAS的风险管理软件Risk Dimension里面)。

SAS9.2 Base新增的这些定价函数(8个)都是计算欧式期权价格的,对看涨(call)期权、看跌期权(put)以及不同的期权类型(股票期权、期货期权、货币期权、交换期权),分别提供了以下四种模型:

Black-Scholes model,传统的股票期权定价模型,见Fischer Black and Myron Scholes (1973)
Black model,Black-Scholes model的扩展,针对期货期权,见Fischer Black(1976),所以该模型又称作Black-76
Garman-Kohlhagen model,外汇期权定价模型,见Mark Garman and Steven Kohlhagen(1983)
Margrabe model,交换期权定价模型,见William Margrabe(1978)

SAS9.2期权定价函数一览:

    Model,定价模型    Underlying,标的物     函数(Call,看涨)     函数( Put,看跌)
Black model Futures,期货 BLACKCLPRC BLACKPTPRC
Black-Scholes model Stock,股票 BLKSHCLPRC BLKSHPTPRC
Garman-Kohlhagen model Currency,货币 GARKHCLPRC GARKHPTPRC
Margrabe model Exchange,资产交换 MARGRCLPRC MARGRPTPRC

具体用法,见SAS9.2的在线帮助文档,Functions and CALL Routines by Category: Financial
http://support.sas.com/documentation/cdl/en/lrdict/59540/HTML/default/a000245860.htm

推荐一个网站,可以比较各种不同的期权定价模型:http://www.montegodata.co.uk/

下期预告:一个通吃的金融函数,Finance(.)

一个孤零零的金融函数,能够做52种(是52种!)不同的金融计算,前面提到的SAS9.1/ETS那9个金融函数就是被它给硬生生消化掉了,……

三个有名的决策树算法和它们的叶子

 机器学习与数据挖掘  三个有名的决策树算法和它们的叶子已关闭评论
11月 301999
 

以前写过一个小笔记,《三个有名的决策树算法:CHAID、CART和C4.5》,说些它们的区别,刚找到一些树叶,可以辅助理解。曰: 

未命名 未命名未命名

CHAID (chi-squared automatic interaction detection,卡方自动交互检测)的前身是AID,主要特征是多向分叉,前向修剪,其标准如名所示,就是卡方检测;另外,CHAID只能处理类别型的输入变量,因此连续型的输入变量首先要进行离散处理。

标准的CARTclassification and regression trees)又不一样,它只能进行二部分叉,后向修剪,分割标准用的是基尼系数(Gini Index); 

C4.5源自有名的ID3,它只能进行L型分叉,后向修剪,标准乃是基于信息论的“熵”(Entropy)。

Technorati Tags: , , , ,

R与SAS之争:一个导读

 未分类  R与SAS之争:一个导读已关闭评论
11月 301999
 

现在R与SAS社区里,最热闹的大概是源于《纽约时报》的一篇文章而引发的R与SAS之争了。

2009年1月7号,《纽约时报》科技版登了一篇注定要引起四方瞩目的文章, Data Analysts Captivated by R’s Power(1月6号就有网络版),作者是该报的记者Ashlee Vance。这大概是开源统计软件包R,自1996年诞生以来,第一次出现在公众视野,而且是出现在《纽约时报》这样的主流媒体。这篇文章里有一句,让R社区和SAS社区都颇为兴奋,而且有很多私人博客也积极跟进:

The popularity of R at universities could threaten SAS Institute.

R软件的兴起,可能会威胁到SAS公司在数据分析领域的地位。

报道中有对SAS公司一位市场总监Anee Milley的采访。Anee Milley的一句回应也注定要引来不少争议(甚至是公关危机):

We have customers who build engines for aircraft. I am happy they are not using freeware when I get on a jet.

我们有一些客户,为整机制造引擎。当我乘机时,很高兴他们没有使用免费软件(来设计引擎)。

1月7号中午,就有用户在全球最主要的SAS论坛SAS-L发贴,提醒大家注意这篇报道。目前,这个帖子的跟贴不断,是目前SAS-L中最火的帖子,其中有不少R软件的支持者发言。SAS-L的大多活跃用户都是一些SAS老手,用SAS几十年,在最近的工作中意识到R的好处,所以对SAS与R的融合比较感兴趣。

更多,请见“统计之都”:

http://cos.name/2009/01/r-sas/

del.icio.us Tags: ,,,,

SAS备忘录:format和informat

 未分类  SAS备忘录:format和informat已关闭评论
11月 301999
 

       被问到informat和format的用法和区别。都是关于变量属性的,以前讲过informat影响到SAS输入数据的格式,而format影响到数据的输出格式。还是不直观,说个能操作的简单例子。

       先说format。format影响到SAS的数据输出格式,这个我们举了个例子,输出当前时间:

data time;
x=date();
format x yymmdd8.2;
put x=;
run;

      如果没有format那行,那么SAS系统就会把当前时间输出为一个数字(因为SAS就是用数字存储日期的),format就是指定x的输出格式,以便于我们阅读。

      format是改变输出格式,而informat则是关于SAS的读入格式。举个例子,假如你的D盘有个文本数据文件informat.txt,存的是一个时间变量time,有两个观测值:

time
1998-7-10
1998-7-11

      你要是这么读入它,就会出错:

data a;
infile "d:\informat.txt" firstobs=2; 
input time;
run;

       先解释一下这段。这是一个标准的读入数据的程序,infile "d:\informat.txt"指明文件路径,后面的firstobs=2表明数据从第二行开始读入(因为第一行是变量名time)。如果是数值型的变量,这一定没问题,但这个time的格式是1998-7-11,SAS就读不了,如果不指定time的读入格式。
       规定读入格式,就要用到informat了,下面的程序就能正确读入informat.txt了:

data aa;
infile "d:\informat.txt" firstobs=2;
input time;
informat time yymmdd10.;
run;

        informat time yymmdd10.就规定了time的读入格式,SAS系统就知道它存的是时间,就读进来了。读是读进来了,但这是SAS显示的却也是数字。为了让输出我们能明白,就要用到format,改变输出格式,完整的程序如下:

 
data aaa;
infile "d:\informat.txt" firstobs=2;
input time;
informat time yymmdd10.;
format time yymmdd10.;
run;

Technorati Tags: , ,

FYI: 用SAS/Graph做仪表盘(Dashboard)

 未分类  FYI: 用SAS/Graph做仪表盘(Dashboard)已关闭评论
11月 301999
 

dashboard

以前提到过,SAS一个员工做了一份给圣诞老人用的dashboard,在YouTube也能找到。最近Support.sas.com公布了一批Dashboard示例,比较有意思,不妨一看:

http://support.sas.com/kb/26/134.html

具体的:

  • Slider chart dashboard:
  • Bullet graph indicator:
  • Bullet graph dashboard:
  • Dial meter indicator:
  • Dial meter dashboard:
  • Bar chart indicator:
  • Bar chart dashboard:
  • Telesales dashboard:
  • Web marketing analysis dashboard:
  • del.icio.us Tags: ,,

    SQL——在Oracle SQL*Plus里工作(1):基础篇

     数据库和数据仓库  SQL——在Oracle SQL*Plus里工作(1):基础篇已关闭评论
    11月 301999
     
    自己整理出来的东西,做备忘最好。他人的东西,无论多详整,都不会像下面的东西让我记起更多。

    1.使用演示帐号scott进入SQL*Plus,密码是tiger,这里帐号和密码不区分大小写。或者,你用其他任何一个账户登录SQL*Plus,再敲入连接scott的命令 connect scott/tigerscott账户下有一些简单的练习数据,在oracle的安装路径里,你找到一个叫adminscott.sql的脚本,可以查看端倪。这里面有三张常用的表:员工表emp、部门表dept和工资表salgrade。

    2.一个最简洁的sql语句由select*  from  表的名字  组成,即,sql至少要包括select和from两个字句。有时你要在sql下演示,比如说只是把大写字母A转化成小写a(函数lower(‘A’)),你看上去不需要数据库提供的任何表,但语法还需要一个from字句。此时可以用Oracle提供的一张虚表dual,如select  lower(‘A’)  from dual。

    3.改变系统默认格式——日期:alter session set nls_date_language=’american’ 。

    4.显示变量标签:select empno as "emp number",ename name from emp。两种方式,用空格隔开方便些,加as好读些。

    5.连接运算符||和distinct关键字。

    6.限制性查询where:比较运算符between and 、in、 like。

    7.like运算符的通配符:%代表零个或多个字符,_代表一个(只是一个)字符(_不是-)。

    8.定义转义符(escape):where ename like ‘IT\_%’ escape ‘\’。’\'是c语言中的转义符。_本是通配符。

    9.如果使用order by排序语句,要把它放在sql的最后。默认是按升序。

    10.desc[ribe],描述表的结构。

    11.set line[size]调整显示屏的显示宽度,默认是80。同样有set pagee[size]。

    12.行编辑命令: 

      A[PPEND] text : 在缓冲区行的末尾加上text的文本。

      C[HANGE]/old/new:将当前行中old替换为new

      C[HANGE]/text: 从行中删除text文本

      CL[EAR] BUFF[ER]:清除缓冲区里所有的行

      DEL : 删除当前行

      DEL *:删除当前行

      DEL n * : 删除从n行到当前行。

      DEL LAST:删除最后一行。

      DEL m n:删除范围为:m到n行。

      DEL * N:从当前行向后删除到n行。

      I[NPUT]:在当前行后插入任意数量的命令行;添加一或者多行到缓冲区

      INPUT text :添加包含的文本。

      L[IST]:列出缓冲区里所有的行。

      LIST n :列出第n行。

      LIST * :列出当前行。

      LIST LAST :列出最后一行。

      LIST m n LIST * n:

          n:指定第n行为当前行

          n text:用text的文本的内容替代第n行

          o text:在第一行之前插入text指定的文本

    13.保存脚本:save d:\…,保存结果spool d:\… spool off,载入:get d:\…,编辑:ed d:\…,运行:@ d:\…。

    Technorati Tags: , ,

    心酸之路——S-Plus(被)并购大事记

     未分类  心酸之路——S-Plus(被)并购大事记已关闭评论
    11月 301999
     
    0. 史前史:S语言(见John
    Chambers
     
    1976-1980,诞生于AT&T的贝尔实验室(Bell Labs)
     
    ,贝尔实验室也是命途多舛。这个时候它还是AT&T门下。后来AT&T遭分拆,朗讯(Lucent)分立出来,接手了贝尔。再后来,阿尔卡特(Alcatel)收购朗讯,贝尔就成了Alcatel-Lucent
    Bell Labs,不提。
     
     
    1987-1988年,位于西雅图的华盛顿大学的统计学教授,Douglas Martin,创办Statistical
    Sciences公司(StatSci),商业版的S软件面世(当时还不叫S-Plus)。
     
     
    1993-1994,StatSci获得S语言的特许许可证(exclusive
    license),并和MathSoft公司(创立于1984年)合并,成为其中的一个数据分析部门,Data Analysis Products Division
    (DAPD)。
     
     
    2001年,Mathsoft把它下属的一个部门,Engineering and Education Products
    Division
    (EEPD),卖给这个部门经理,自己改名为Insightful,继续从事S-Plus的研发和销售。2002年,Insightful从贝尔实验室买下了S语言的所有权
     
    ,以后这个Engineering and
    Education公司就叫MathSoft了,有一个在工程界很有名的科学计算软件,MathCad。2006年,Mathsoft公司卖给了PTC(Parametric Technology Corporation)。
     
     
    2008年,Tibco收购Insightful

    太史公曰:S-Plus系出名门,产品做得也不赖,到现在居然潦倒如此,不但几易其主,还有伤主之嫌(但愿S-plus和接手它的公司能够走出历史的怪圈)。在同门,声势比不过R,在商业软件领域,又远远被SAS、SPSS甩开,甚至想跟Stata一样独善其身而不得,噫。

    Excel债券计算函数

     金融计算  Excel债券计算函数已关闭评论
    11月 301999
     

    26个(参考王小民,2003),见下:

    计算指标 定期付息债券 到期付息债券 其他债券种类
    价格 price priceMat oddfPrice,oddlPrice, tbillPrice, priceDisc
    收益率 yield yieldMat oddfYield, oddlYield, tbillYield, yieldDisc
    利息 accrint accrintM  
    天数 coupDayBs, coupDaySnc, coupDayS    
    日期 coupPcd, coupNcd    
    期数 coupNum    
    其他 duration, mDuration intRate, received disc, tbillEq

    其中,在“其他债券种类”一栏中,

    1. oddf表示odd (short or long) first period,即首期付息日不固定
    2. oddl表示odd (short or long) last coupon period,即末期付息日不固定
    3. tbill是Treasury bill,即国库券

    附:关于金融函数的参数(argument),如disc(settlement,maturity,pr,redemption,basis),大致可以分为以下三类:

    价格、收益率和利率

    1. 价格(pr)
    2. 面值(par)
    3. 清偿价值(redemption)—债券到期后兑付的价格
    4. 收益率(yld)
    5. 利率(rate)

    日期

    1. 发行日(issue)
    2. 交易日(settlement)
    3. 到期日(maturity)
    4. 首期付息日(first_coupon)
    5. 末期付息日(last_coupon)

    日期基准

    1. 计息次数(frequency)—按年支付,1;半年,2;季度,4
    2. 日计数基准(basis)—美国基准(默认),30/360,0;每月实际天数/每年实际天数,1;每月实际天数/360,2;每月实际天数/365,3;欧洲基准,30/360,4,它将31日计入下一月

    更多可以参考:

    1. Excel联机帮助:函数参考—财务
    2. Microsoft Office Online: Microsoft Office Excel—Financial Functions
    3. 王小民编著《Excel 2002高级应用——金融财务》,机工,2003

    SAS和蒙特卡罗模拟(2):随机数基础

     未分类  SAS和蒙特卡罗模拟(2):随机数基础已关闭评论
    11月 301999
     

    **************************************************************************************************************************

    SAS和蒙特卡罗模拟(1):开篇》——简介,通过例子建立起蒙卡的直观概念;参考软件包及书目

    **************************************************************************************************************************************************

    SAS for Monte Carlo Simulations (2): Random Numbers

    最简单、最基本、最重要的随机变量是在[0,1]上均匀分布的随机变量。一般地,我们把[0,1]上均匀分布随机变量的抽样值称为随机数,其他分布随机变量的抽样都是借助于随机数来实现的。以下谈的都是所谓“伪随机数”(Pseudo Random Numbers)。产生随机数,可以通过物理方法取得(很久很久以前,兰德公司就曾以随机脉冲源做信息源,利用电子旋转轮来产生随机数表),但当今最为普遍的乃是在计算机上利用数学方法产生随机数。这种随机数根据特定的迭代公式计算出来,初值确定后,序列就可以预测出来,所以不能算是真正的随机数(就成为“伪随机数”)。不过,在应用中,只要产生的伪随机数列能通过一系列统计检验,就可以把它们当成“真”随机数来用。

    现在大多软件包内置的随机数产生程序,都是使用同余法(Congruential Random Numbers Generators)。“同余”是数论中的概念。

    0.预备知识:同余

    捡回小学一年级的东西:"4/2=2"读作“4除以2等于2”,或者,“24等于2”。还有求模的符号mod(number,divisor),其中,number是被除数(在上式中,为4),divisor是除数(上式中的2)。这样的约定对SAS和Excel都通用,如mod(4,13)=4,mod(13,4)=1。

    现在我们可以开讲“同余”了。设m是正整数,用m去整数a、b,得到的余数相同,则称“a与b关于模m同余”。上面的定义可以读写成,对整数a、b和正整数m,若mod(a,m)=mod(b,m),则称“a与b关于模m有相同的余数(同余)”,记做a≡b(mod m)(这就是同余式)。举个例子,mod(13,4)=1,mod(1,4)=1,则读成13和1关于模4同余,记做13≡1(mod 4)。当然,同余具有对称性,上式还可以写成1=13(mod 4)。

    a≡b(mod m)的一个充要条件是a=b+mt,t是整数,比如13=1+3*4。a=b+mt可以写成(a-b)/m=t,即m能整除(a-b)。

    这些就够了。更多基础性的介绍,可以参考《同余(数据基础)》。

    1.乘同余法

    同余法是一大类方法的统称,包括加同余法、乘同余法等。因为这些方法中的迭代公式都可以写成上面我们见过的同余式形式,故统称同余法。常用的就是下面的乘同余法(Multiplicative Congruential Generator.)。符号不好敲,做些约定,如R(i)就是R加一个下标i。

    乘同余法随机数生成器的同余形式如下:R(i+1)=a*R(i) (mod m)。这个迭代式可以写成更直观的形式,R(i+1)=mod[a*R(i),m],其中初值R(0)称为随机数种子。因为mod(x,m)总是等于0到m-1的一个整数,所以最后把R(i+1)这个随机序列都除以m,就可以得到在[0,1]上均匀分布的随机数。下面用电子表格演示一遍,假设随机数种子R(0)=1,a=4,m=13:

      A B C D E
    1 i R(i) a*R(i) mod[a*R(i),m] mod[a*R(i),m]/m
    2 0 1 =B2*4 =mod(C2,13) =D2/13
    3 1 =D2 =B3*4 =mod(C3,13) =D3/13
    4 2 =D3 =B4*4 =mod(C4,13) =D4/13