资源描述
第二十课 散布图、折线图和层次图
SAS系统中绘制散布图、折线图和层次图,使用PROC PLOT过程和PROC GPLOT过程。PROC PLOT过程是用来画易生成的低分辩率的图形,输出在OUTPUT窗口。而PROC GPLOT过程是用来生成定制的、高分辨率的图形,输出在GRAPH窗口,并且还可以对输出的图形进行编辑修改。
一. PROC PLOT过程
使用PLOT过程可以在两个不同的坐标系中对两个变量作散布图、折线图、半对数图和层次图。用于数据处理中,直观地了解数据的变化趋势和数据间的相互关系等。它的一般形式为:
Proc Plot DATA=数据集 </选项列表> ;
Plot 纵坐标变量Y*横坐标变量X……</选项列表>;
Run ;
1 PROC PLOT语句
PROC PLOT语句中的选项列表主要分成三类:有关图形的坐标轴选项、有关外观的选项和有关图形大小的选项。其中图形大小的两个选项较为常用:
l VPCT=百分比列表——规定产生图形在垂直方向占一页的百分比。例如VPCT=33表示这张输出图占一页的33%,即占一页的1/3,所以一页可以纵向打印3张图。VPCT=50 25 25表示每一页在纵向打印3张图,第一张占全页的一半,第二和第三张各占1/4页。VPCT=200表示要求输出图占2页的长度。
l HPCT=百分比列表——规定产生图形在水平方向占一页的百分比。
2 PLOT语句
PLOT语句里首先要规定数据集中的哪两个变量作为图形中的垂直变量和水平变量,以及在图形中用于画点的作图字符。PLOT语句的几种使用格式如下:
plot y*x ;
plot y*x =’+’;
plot y*x=符号变量 ;
plot y*x $ 标记变量 =’+’;
plot y*x=’+’ b*a=’*’ /overlay ;
第一条语句作图符号用缺省形式,依此用英文大写字母A、B、C…Z作为作图符号。当观测的条数较多时,低分辩率图不可能画出所有观测的点,所以当图中的某一点表示有一条观测的点时,用作图符号A;当图中的某一点表示有二条观测的点时,用作图符号B;以此类推。例如,输出图中有一个Z符号,表示在这点上共有26条观测的点或更多点。对于PROC GPLOT过程默认的作图符号为加号(+)。
第二条语句用等号(=)规定一个字符作为作图符号。此例中每个散点用加号(+)表示。
第三条语句用等号(=)规定一个变量的值作为作图符号,变量可以是字符变量,也可以是数值变量。此时,每个散点的作图符号用数据集中同一条观测的这个符号变量的值表示。例如,假定为=SEX变量,则作图符号为SEX变量的值F或M。
第四条语句用符号($)规定一个变量的值用于标记图中的散点。此例中每个散点不仅用加号(+)表示,而且还标出了图中每一个散点在数据集的同一条观测中这个标记变量的值。
第五条语句规定在同一张图上重叠两个图,当然可以重叠更多的图。OVERLAY选项要求定义在PLOT语句中的几个图打印在一张图上。
例如,我们有一个上证指数周线数据集INDEXSH,包含日期变量DATE、成交量变量VOLUME、开盘价变量OPEN、最高价变量HIGH、最低价变量LOW、收盘价变量CLOSE和涨跌百分比CHANGE,用PROC PLOT过程定制一个指数对交易周的最高和最低价的重叠散点图。程序如下:
Libname Study “D:/Sasdata/Mydir”;
Proc Plot Data=Study.IndexSh Vpct=50 Hpct=70 Formchar=’|----|---’ ;
Where date<’01feb91 ’d ;
Plot high*date=’+’ low*date $low =’-’ /overlay ;
Run ;
程序的运行结果显示在OUTPUT窗口中,见图20-1所示(为显示清晰起见,窗口的大小和显示内容的位置移动过)。
图20-1 用PLOT过程定制重叠散点图
3 PLOT语句中的选项
PLOT语句除了上述的重叠作图选项OVERLAY外,还有几类重要的选项如下:
(1). 关于坐标轴刻度的任选项
用VAXIS(或HAXIS)=标记值列表,定义沿垂直(或水平)坐标轴相等间隔的刻度标记值。可以用BY n的方式规定刻度的增量。这些值可以是均匀上升或下降,也可以不是,既可以是数字值,也可以日期时间值。几种可能的选项格式如下:
haxis=0 to 100 by 5
haxis=’01jan20’d to ‘31dec20’d by 7
vaxis=1 10 100 100 1000
haxis=by 10
其它还有VEXPAND(或HEXPAND)、VREVERSE(或HREVERSE)、VZERO(或HZERO)等有关坐标轴刻度选项。
(2). 关于参考线的任选项
如果要求在散布图的垂直或水平轴的指定数值上画出垂直或水平线作为参考线,可以使用如下选项:
verf=100 400 1000 (三条水平参考线)
href=’01mar20’d ‘01oct20’d (两条垂直参考线)
还可以用VERFCHAR或HREFCHAR=‘字符’定义参考线的画线符号。
(3). 关于图形轮廓的任选项
BOX选项可以画出边框围住整个图形,而不仅仅是画出底部和左边框。VPOS或HPOS=轴长度,规定水平或垂直轴上打印输出的数目。
(4). 关于作等值线(层次图)的任选项
当要求散点(x,y)的作图符号能根据z(通常z=f(x,y))值的大小规定不同的层次强度字符时,也就是相同z值的点用相同的作图符号,不同z值的点用不同的作图符号,但最多只能把z值分成10个层次的不同值。我们可以使用如下选项:
plot x*y=z /contour=3 s1=’A’ s2=’+’ s3=’*’ ;
plot x*y=z /contour=3
语句说明:=z指定按Z变量的内容确定散点作图符号,选项contour=3规定三个层次强度,s1=’A’ s2=’+’ s3=’*’按上升顺序给出层次强度的作图符号。用户自己可以不定义S1、S2、S3的层次强度的作图符号,而使用缺省值。
下面我们举例说明PLOT语句中选项的使用。例如,绘制上证指数周线数据集INDEXSH的散点图时,根据股票技术分析的需要,要画支撑和阻力线,以及趋势变异的时间和周期,这对以后的各种分析都很重要。我们可以通过调整纵横坐标轴的刻度和增加水平和垂直参考线来实现。程序如下:
Libname Study “D:/Sasdata/Mydir”;
Proc plot Data=Study.IndexSh Vpct=50 Hpct=80 Formchar=’|----|---’ ;
plot close*date='+' /haxis='21dec90'd to '01jan93'd by 98
vaxis=100 200 400 800 1600
href='16aug91'd '30apr92'd '20nov92'd
vref=96 135 400 1429 ;
title1 'Shanghai StockIndex' ;
title2 '21dec90---01jan93' ;
Run ;
程序的运行结果显示在OUTPUT窗口中,见图20-2所示。
图20-2 用PLOT过程定制重叠散点图
输出解释:对上证指数从1990年12月21日开市到1993年1月1日的交易数据进行分析,主要经历三种市场状况:第一种市场状况是从1990年12月21日到1991年7月底8月初,在96点至135点之间盘整筑底,历经大约31~34周,形成W底;第二种市场状况是从1991年8月中旬有效突破阻力线135,形成稳步盘升单边市,至1992年4月24日历经大约28~31周;第三种市场状况是从1992年4月30日至1992年11月20,在400点一线开始飙升冲顶1429,最后回落原地400点,历经大约29周。从上面的分析我们可以看到,水平和垂直参考线提供了一种看得见的暗示。技术分析的目的就是找到购买资产的适宜点,尽可能地识别一种趋势结束且另一种趋势开始的点,然后可作出适宜的交易。
二. 生成高分辨率图形
虽然PROC PLOT过程生成的散布图对基本数据分析是有用的,但是为了更详细的分析和表达目的也可用PROC GPLOT过程来生成高分辨率图形。
1 GOPITONS语句
通常,当在使用PROC GPLOT和PROC GCHART等能生成高分辨率图形的过程时,要用到系统的一些特定特征,因此,要求指定图形设备和计算机系统的一些另外可能的选择。用下列GOPITONS语句能规定一个图形设备以运行SAS/GRAPH软件。
Goptions device=图形设备 ;
例如,如果我们要指定图形输出设备为Windows环境下的黑白打印机:
Goptions device=winprtm ;
例如,如果我们要指定图形输出设备为Windows环境下的彩色打印机:
Goptions device=winprtc ;
另外,我们还可以通过选择菜单命令Globals/Options/Global options或Globals/Graph/File/Print…/SAS Graph Driver来设定图形输出设备。
2 PROC GPLOT过程
生成高分辨率图形的PROC GPLOT过程的一般使用格式如下:
Porc Gplot DATA=数据集 ;
Plot 纵坐标变量Y*横坐标变量X……</选项列表>;
Symboln <选项列表> ;
Axisn <选项列表> ;
Run ;
使用PROC GPLOT过程和PROC PLOT过程的区别,对于PROC GPLOT语句,PROC PLOT语句中的VPCT和HPCT等选项不可使用。两者的PLOT语句使用方法基本相同。最主要的区别是,在PROC GPLOT过程中,可使用SYMBOLn语句和AXISn语句。
3 用SYMBOLn语句定义线和符号
SYMBOLn语句的主要作用:可以定义数据点的符号,可以定义数据点之间的连接方式,可以定义数据点和线的颜色。SYMBOLn语句的n取值范围从1到99,缺省值是1,n代表Y*X两个变量形成数据连线的系列数。一些主要选项如下:
l V=数据点图形符号——数据点的符号有NONE(没有)、PLUS(缺省值加号)、STAR(星号)、SQUAR(小方块)、DIAMOND(小菱形)、TRANGLE(三角形)、CIRCLE(小圆圈)。
l I=数据点间连接方式——常用的连接有NONE(没有)、JOIN(直线)、SPLINE(平滑)、NEEDLE(从数据点到横坐标画垂直线)、HILOC(最高、最低、收盘价)、RL(直线回归线)、BOX25(盒形线)。
l W=连线的线宽——例如w=5。
l H=图形符号的高度——例如h=2.5。
l L=定义连线的类型——例如l=2。
l C=定义颜色——例如c=red。
l FONT=定义一种字体——例如font=swissb。
SYMBOLn语句所定义的各种选现,由于数量众多,用户一般很难记忆,我们上面所列出的仅仅是一小部分。通常可以在命令输入框中发布SYMBOL命令,调出SYMBOL窗口,在选项参数的横线上键入?后,在参数对话框中选择参数。共有14项参数选现,每项中还有许多参数值。
一个SYMBOLn语句一旦被定义就一直保持有效,直到重新定义或者退出SAS系统。执行一个不带任何选项的SYMBOLn语句将取消SYMBOLn的全部定义,并不影响其它的SYMBOL语句。如果想要取消所有的SYMBOL语句定义,提交下面的语句:
goptions reset=symbol ;
4 用AXISn语句定义坐标轴
在PROC GPLOT中,可以通过PLOT语句的选项、LABEL语句和FORMAT语句来修饰坐标轴。PLOT语句的选项允许控制坐标轴的刻度、文本和颜色。但使用AXISn语句的选项可以更集中、更方便地控制和管理坐标轴。常见的使用格式如下:
Proc Gplot DATA=数据集 ;
Plot Y*X / vaxis=axis1 haxis=axis2 ;
Symboln <选项列表> ;
axis1 label=(‘Price’) order=(100 to 1500 by 200 ) offset=(20,10) ;
axis2 label=(‘Date’) order=(‘21dec90’d to ‘01jan93’d by 98 ) ;
Run ;
AXISn语句的LABEL选项规定该轴的标签,ORDER选项规定该轴的取值范围,OFFSET选项规定从该轴的原点开始的第一个主刻度空间大小,及从该轴最末端到最后一个刻度的空间大小。例如语句中的OFFSET=(20,10),当单位是PCT时,表示第一个主刻度空间为图形输出区域的20%,最后一个刻度的空间为图形输出区域的10%。
有时需要给图形加第二根纵轴,用来表示在同一时间期间上的另一个变量。两个变量不用同一纵坐标轴的原因,常常是两个变量的值的相差太大,如果两个变量的值显示在同一纵轴上,在图形上就会很难分辨值较小那个变量的值的变化。定义第二根纵轴(右轴)的方法如下:
Porc Gplot DATA=数据集 ;
Plot Y1*X / vaxis=axis1 haxis=axis2 ;
Plot2 Y2*X / vaxis=axis3 ;
Symboln <选项列表> ;
axis1 <选项列表> ;
axis2 <选项列表> ;
axis3 <选项列表> ;
Run ;
用第二条PLOT2语句定义了第二根纵轴AXIS3。
例如,我们要在同一图形上绘制上证指数的最高-最低-收盘价和交易量的图形。由于价格和交易量的取值范围不同且相差悬殊,交易量用左边的纵轴来度量,价格采用右边的纵轴来度量。要生成最高-最低-收盘价图,原来INDEXSH数据集中的数据排列格式不符合要求,需要用数据步修改INDEXSH为INDEXSH2,将一条观测中最高HIGH、最低LOW、收盘价CLOSE三个数据,转换成三条观测中VALUE变量的数据,且三条观测的日期DATE不变。程序如下:
Libname study "d:\sasdata\mydir" ;
data study.indexsh2;
set study.indexsh;
value=high; output;
value=low; output;
value=close; output;
Run ;
Goptions reset=global gunit=pct cback=white border
htitle=6 htext=3 ftext=swissb colors=(back) ;
Proc gplot data=study.indexsh2;
plot volume*date /vaxis=axis1 hvxis=axis2;
plot2 value*date /vaxis=axis3 vref=0;
symbol1 i=needle;
symbol2 i=hiloc;
axis1 label=('Volume') order=( 0 to 700000 by 100000) offset=(0,50) ;
axis2 label=('Date') order=('21dec90'd to '01jan93'd by 98) ;
axis3 label=('Price') order=(0 to 1500 by 100) offset=(25,0) ;
title 'Shanghai StockIndex';
Run ;
程序的运行结果显示在GRAPH窗口中,见图20-3所示。
图20-3 用GPLOT过程定制的价格和成交量图
在用PROC GPLOT过程绘制高分辨率的前,首先把绘图的数据转换和处理成能符合I=HOLOC连接方式的数据格式,另外为了确保在生成图形时,各种符号定义准确,一般先使用GOPTIONS语句,清除先前定义各种符号(RESET=GLOBAL),然后再定义将在图中使用的全局符号体系。
三. 散布图
散布图又称散点图或相关图。它是以散点的分布反映变量之间相关情况的统计图。根据图中的各点分布和密集程度,大致可以判断变量之间协变关系的类型。在回归模型中,常用散布图来描述变量之间的相关关系,横轴上自变量的改变将引起纵轴上因变量的改变,回归模型中参数的计算。是通过使因变量的理论值与实际值之间偏差的平方和达到最小而得到的。
为了便于理解散布图在回归模型中的应用,我们先用已知的线性方程来虚拟构造一组样本数据,画出散布图,从图中各散点形成的趋势看,是否符合线性关系,然后决定用线性回归模型求回归方程,作为对总体回归直线的近似,必须进行统计检验才能确定这种近似是否恰当,最后我们可以得到确认的总体回归方程,再比较我们已知的方程,应该发现非常接近。
例如,新创建的数据集LINE,是我们用身高(HEIGH)=体重(WEIGHT)+100这样一个简单直线方程来生成的模拟数据集。数据集中有一组高度HEIGH和体重WEIGHT的观测值。假设我们需要绘制回归直线及置信带等。可以先画出高度对体重的散布图进行观察和分析,然后利用回归过程建立高度(因变量)和体重(自变量)的线性方程式后,进一步可画出高度预测值对体重的散布图进行比较和分析。程序如下:
Libname study "d:\sasdata\mydir";
data study.line ;
do n=1 to 200 by 1;
weight=40+60*ranuni(1) ;
height=1*weight+100+5*normal(1) ;
output ;
end ;
Proc reg data=study.line;
model height=weight;
output out=study.linereg p=predict ;
proc gplot data=study.linereg ;
plot height*weight predict*weight / overlay;
symbol1 v=dot c=red i=none;
symbol2 v=none c=blue i=spline;
Run ;
程序说明:数据步DATA自动生成200条观测,SAS系统提供了两个均匀分布的随机函数RANUNI()和UNIFORM()产生0~1之间的随机数,用随机函数构成的40+60*ranuni(1)表达式,将使WEIGHT变量的取值范围为40~100公斤之间的随机值。SAS系统还提供了两个标准正态分布的随机函数NORMAL()和RANNOR(),产生均值为0标准差为1标准正态随机数。随机数表达式1*weight+100+5*normal(1) 是经过线性变换产生的均值为1*weight+100,标准差为5的随机数,对于正态分布将有95%的数据落在均值附近的两个标准差之内,例如,对于weight=50来说,身高的均值为50+100=150,因此将有95%可能HEIGHT变量的取值范围为140~160厘米。PROC REG回归过程,首先建立输入为WEIGHT输出为HEIGHT的回归模型,并用OUTPUT语句创建包含身高预测值的输出数据集,定义输出数据集名为Study.LineReg,定义存放预测值的变量名为PREDICT。最后用PROC GPLOT过程把实际高度对重量及预测高度对重量两张散布图重叠放在一张图上,通常两张图应该用不同的作图字符来表示散点,实际高度对重量用无任何连线的小圆点表示,预测高度对重量用平滑曲线连接散点。
高分辨率的输出图形显示在GRAPH窗口,在OUTPUT窗口还显示输出PROC REG过程的统计报告,如下所示:
Model: MODEL1
Dependent Variable: HEIGHT
Analysis of Variance
Sum of Mean
Source DF Squares Square F Value Prob>F
Model 1 58792.37183 58792.37183 2524.881 0.0001
Error 198 4610.47060 23.28521
C Total 199 63402.84243
Root MSE 4.82547 R-square 0.9273
Dep Mean 170.67056 Adj R-sq 0.9269
C.V. 2.82736
Parameter Estimates
Parameter Standard T for H0:
Variable DF Estimate Error Parameter=0 Prob > |T|
INTERCEP 1 97.812209 1.48957643 65.664 0.0001
WEIGHT 1 1.033179 0.02056151 50.248 0.0001
从回归分析报告中我们看出,对样本回归直线与观测值之间的拟合程度的检验(也称拟合优度检验)——用判定系数R2检验,R2的取值范围0~1,越接近1,拟合程度越好;反之越差。本例中R2为0.9273,调整后的R2也为0.9269,非常接近于1。还有参数显著性检验(T检验)和回归总体线性的显著性检验(F检验)都显示高度显著。我们可以确认回归模型的估计式为:
HEIGHT=1.033179*WEIGHT+97.812209
SAS系统的许多图形过程都带有统计计算,许多统计分析过程都带有图形输出。PROC GPLOT画图过程就带有回归模型的预测值和置信带计算,并用曲线连接。程序如下:
Goptions reset=global gunit=pct cback=white border
htitle=6 htext=3 ftext=swissb colors=(back) ;
proc gplot data=study.line ;
plot height*weight height*weight /vaxis=axis1 haxis=axis2 overlay;
symbol1 i=none v=dot cv=black h=1.5 ;
symbol2 i=rlcli95 ci=black cv=black co=black w=2.5 L=1;
axis1 label=('Height') order=(130 to 210 by 10) ;
axis2 label=('Weight') order=(40 to 100 by 10) ;
title 'Linear Regression';
Run ;
程序说明:对样本数据集STUDY.LINE不先调用统计计算过程求回归预测值,而是直接绘制实际身高对体重的两张重叠散点图。然后对第二张图的连接方式I选项确定为RLCLI95,分成三部分含义:⑴RL表示作直线回归,还可用表示作2次回归RQ和RQ0(消除截距,强制线经过原点)代替,或表示作3次回归的RC、RC0代替;⑵CLI表示作单个预测值的置信带,可用CLM代替,表示作均数的置信带;⑶95表示置信度为95%,另有两个可用值为90和99。有关散布图中I选项的回归参数取值,可在SYMBOL窗口的TYPE参数选项横线上键入?后,再选择User regress analysis子菜单来查看或选定。CI表示回归线的颜色,CO表示置信带的颜色,CV表示散点的颜色,W表示连接线的宽度,L表示连接线的类型。
程序的运行结果显示在GRAPH窗口中,见图21-4所示。图中大约有5%的数据点落在两条虚线构成的置信带之外。
图20-4 一元线性回归和95%置信限
四. 折线图
折线图又称曲线图,是用线段的升降来说明现象变动情况的一种统计图,它主要用于表现在时间上的变化趋势、现象的分配情况和两个现象之间的依存关系等。折线图常应用于时间序列模型中,把有关时间序列的数据绘制成图形。广义上说,模型可划分为回归模型与时间序列模型。从数学角度看,时间序列数据的建模是构造一个包含时间序列本身、推荐函数的残差以及可选择的其它时间序列的函数。我们所观测到时间序列的值是时间序列过程的实现。
用描述方法判定时间序列数据的趋势后,技术分析人员往往要对该序列建立模型并预测它们的将来值。用时间序列的数据建立模型时,可以去掉序列的确定分量,也可以对确定部分建立一个明确的模型。利用时间序列的其它组成部分建模后,把确定部分也加进去形成最终模型。
例如,股票价格趋向于沿看得见可识别的趋势移动,技术分析想尽可能地识别趋势并在趋势反转点改变投资。然而,由于随机波动遮掩了反转点或使反转点错误地出现,因此技术分析必须借助于估计序列成分(包括趋势周期计算、季节和交易日方式的循环和非规则成分的循环)或计算序列的移动平均来估计序列的趋势。
直接使用一些股票市场的时间序列数据绘制折线图,全部趋势可能难以直观识别。如果移去非趋势成分会使趋势更容易显现。可以使用SAS/ETS软件中PROC X11过程来估计和调节序列成分。作为对使用PROC X11过程去估计趋势成分的一种补充,可以采用平滑时间序列的数据的方法,以便移去随机波动从而揭示数据中的趋势。一般地,通过计算数据的移动平均可实现数据的平滑。移动平均有很多种类,主要有简单移动平均、加权移动平均和指数加权移动平均,最优长度依赖于使用的时间结构。理解了数据中有关趋势的知识,将有助于买、卖和持有股票的决定及交易的时机。
下面,我们首先对上证指数INDEXSH数据集计算简单的、加权的和指数加权的移动平均线。然后绘制原始序列和移动平均的图形。程序如下:
Goptions reset=global gunit=pct cback=white border
htitle=6 htext=3 ftext=swissb colors=(back) ;
Libname Study “d:\sasdata\mydir”;
Data study.indexma ;
Set study.indexsh ;
Ma10=(close+lag(close)+lag2(close) +lag3(close) +lag4(close)
+lag5(close)+lag6(close)+lag7(close) +lag8(close) +lag9(close))/10;
Wma10=(10*close+9*lag(close)+8*lag2(close)+7*lag3(close)+6*lag4(close)
+5*lag5(close)+4*lag6(close)+3*lag7(close)+2*lag8(close)+lag9(close))/55 ;
W1=0.3 ;
retain ewma1 ;
If _n_=1 then ewma1=close ;
else ewma1=w1*close+(1-w1)*ewma1 ;
W2=0.75 ;
retain ewma2 ;
If _n_<2 then ewma2=ewma1 ;
else ewma2=w2*ewma1+(1-w2)*ewma2 ;
Proc gplot data=study.indexma ;
plot close*date ma10*date /vaxis=axis1 haxis=axis2 overlay ;
symbol1 i=join v=none L=1 h=2.5 ;
symbol2 i=join v=none L=1 h=2.5 w=2;
axis1 label=('Price') logbase=10 order=(100 200 400 800 1600 3200);
axis2 label=('Date') ;
title 'Shanghai StockIndex';
Title2 ‘Close and MoveAverage’;
Run ;
程序说明:DATA数据步创建了一个名为INDEXMA数据集,共生成了四种移动平均线,使用滞后函数LAGn()生成了收盘价CLOSE的十日简单移动平均线MA10和十日加权移动平均线WMA10;用平滑因子W1生成一次指数加权移动平均EWMA1,用平滑因子W2生成二次指数加权移动平均EWMA2,平滑因子值较大,则对最近的序列值给出较大的权数,作为一个一般原则,较小的平滑因子适于缓缓改变的趋势序列,而较大的平滑因子适于快速改变的易变序列。IF-THEN-ELSE语句作用是将初始化处理和后面的正常处理分开来。RETAIN语句作用是从DATA步这次到下次重复时,保留变量EWMA1和EWMA2的值。调用PROC GPLOT过程绘制了收盘价和十日简单移动平均的图形,其中对纵轴(Price)定义的AXIS1语句中加上了LOGBASE=10(或PI或e)的选项,就表示该轴是以10为底的对数轴。
程序的运行结果显示在GRAPH窗口中,见图21-5所示
图21-5 对时间序列的数据用移动平均估计趋势
除了用DATA数据步直接计算移动平均外,我们还可以用SAS/ETS软件的EXPAND过程来生成时间序列数据的简单、加权和中心移动平均,用SAS/QC软件的MACONTROL过程生成一致加权和指数加权的移动平均控制图表。
五. 层次图
PROC PLOT过程还能绘制层次图,又称等值线图或轮廓图。在地理学研究中用来绘制等高线,在经济学研究中常用来画等值的利润曲线。例如线性规划中的产品混合问题,经济学的一个核心问题是在有限的资源情况下,如何合理的分配资源,使效益最大化。假设我们要生产两种产品X和Y,但受到时间T、空间S、能力C三种资源约束的,在已知两个产品的单位利润为f1(x)和f2(y)情况下,各生产产品X和Y多少数量,才能使利润Z最大化。即:
时间资源约束: ft(x,y)≤T
空间资源约束: fs(x,y)≤S
能力资源约束: fc(x,y)≤C
利润 Z= f1(x)X+ f2(y)Y
产品的单位利润一般受市场的需求和成本等因素影响,要销售的数量多,单价就要便宜,单位利润就会变小,但生产的数量多,单位成本就会低,单位利润就会变大,两者的平衡点在边际收益等于边际成本时生产的数量,但这仅是针对一种产品和资源不受约束的情况下。通常的做法,是将利润函数Z在X和Y平面上画出等值线,而三种资源的约束函数曲线也将在X和Y平面上围成可行域,然后在可行域中找出(X,Y)使等值线最大。设f1(x)=7-X+1/X,f2(y)=9-Y+1/Y,那么:
Z=2+7X-X2+9Y-Y2
用上面的这个函数生成一个包含三个变量X、Y、Z的利润数据集PROFIT,然后用PLOT语句的CONTOUR选项就可以绘制出等值线图。程序如下:
libname study "d:\sasdata\mydir";
Data study.profit;
format z 5.1;
do x=0 to 9 by 0.2;
do y=0 to 9 by 0.1;
z=2+7*x-x*x+9*y-y*y;
output;
end;
end;
Proc plot data=study.profit formchar='|----|---';
plot y*x=z /contour ;
Run ;
用PROC PLOT过程PLOT语句选项CONTOUR,最多只能分成了10个层次,由Z的取值来决定所属的层次。第一层Z的取值范围-16.5~-11.0,第二层Z的取值范围-11.0~-5.5,…,第十层Z的取值范围33.0~38.5。每一层用一个不同的作图字符表示。由于生成的是低分辩率的图形,显示不清楚,我们改用PROC GCONTOUR过程来绘制高分辨率的层次图,最多可以绘制100层。程序如下:
Goptions reset=global gunit=pct cback=white border
htitle=6 htext=3 ftext=swissb colors=(back) ;
Proc Gcontour data=study.profit ;
plot y*x=z / nlevels=20
autolabel
xticknum=10
yticknum=10
nolegend ;
Title 'Profit Gcontour' ;
Run ;
程序的运行结果显示在GRAPH窗口中,见图21-6所示。
程序说明:NLEVELS=20选项定义层次图的层次数为20,AUTOLABEL选项定义层次线的标签为自动生成,如图中32.3、29.9、27.5等,XTICKNUM=10和YTICKNUM=10选项定义X和Y轴上刻度线的数目,NOLEGEND选项定义在层次图的下方不显示图例,若无此选项,将显示每一层次线Z的具体值。还有许多其它选项,如可定义各个对象的颜色、可选择网格线、垂直和水平参考线等等。
用等值线和可行域方法研究两个产品X和Y的混
展开阅读全文