您好,欢迎来到年旅网。
搜索
您的当前位置:首页EViews命令和编程之怎样使用矩阵

EViews命令和编程之怎样使用矩阵

来源:年旅网
EViews命令和编程之怎样使用矩阵

一、申明矩阵(Declaring a Matrix) 二、给矩阵赋值(Assigning Matrix Values)

三、矩阵对象间复制数据(Copying Data Between Objects) 四、矩阵表达式(Matrix Expressions)

五、矩阵命令和函数(Matrix Commands and Functions)

六、矩阵的图形和统计观察(Matrix Graph and Statistics Views) 七、矩阵的输入与输出(Matrix input and output)

八、矩阵运算与循环操作(Matrix Operations versus Loop Operations) 九、矩阵对象自动变维(Automatic Resizing of Matrix Objects)

一、申明矩阵(Declaring a Matrix)

EViews提供了直接处理矩阵和向量中数据的工具。使用EViews的矩阵语言去执行哪些观察和过程都不能处理的计算。 使用矩阵命令语言可以建立和管理下列对象:

系数向量(Coef):在方程、系统、平板和状态空间里使用的列向量 矩阵(Matrix): 两维数组 行向量(Rowvector):行向量

数值常数变量(Scalar):数值常数变量(标量) scalar 对称矩阵(Sym): 对称矩阵(以下三角形式保存) 列向量(Vector): 列向量

称以上对象为矩阵对象,事实上其中右一些对象并不是矩阵。 以下讨论矩阵对象和矩阵语言。

一、申明矩阵(Declaring a Matrix)

在使用之前必须首先申明矩阵对象。对各种矩阵类型进行申明的语句,参见Command Reference by Object Type。

简要地说来,申明语句由对象关键字组成,对象关键字之后的括号是选项,申明矩阵的维数大小置于括号中。关键字之后既可以只接新建对象名,也可以接新建对象名和赋值语句。

不同的矩阵对象要求不同的维数信息。矩阵要求指定行数和列数。对称矩阵(sym)只需指定一个阶数,它既是行数也是列数。一个向量、行向量和系数向量要求指定元素的个数。数值常数变量(标量)不要求指定维数大小信息。如果申明矩阵对象时没有提供维数大小信息,EViews设定对象中只有一个元素。

如果申明中没有包含赋值语句,EViews将以0初始化所有的值。例如: matrix(3,3) xdata

matrix(3,10) xdata sym(9) moments vector(11) betas rowvector(5) xob

建立一个3 3的0矩阵对象XDATA1,3 10的矩阵XDATA,9 9的对称矩阵MOMENTS,一个11 1的列向量BETAS和一个1 5的行向量XOB。所有这些对象都被初始化为0。

改变矩阵对象的大小,可通过重复使用申明语句来实现。如果对一个已经存在的矩阵对象使用了赋值语句,将按照赋值语句的要求调整大小。例如: sym(10) bigz matrix zdata matrix(10,2) zdata zdata = bigz

第一次申明ZDATA只有一个元素,然后再次申明ZDATA是一个10 2的矩阵,在最后一个语句中重新申明了ZDATA的大小,以便它能够接纳10 10的矩阵对称矩阵BIGZ的值。

二、给矩阵赋值(Assigning Matrix Values)

有给矩阵元素赋值三种方式:

(1)将一些值赋给指定的矩阵元素(元素赋值) (2)用一个数值列表填充矩阵 (3)执行一个矩阵赋值语句

元素赋值(Element assignment)

给矩阵赋值最基本的方法是将一个值赋给矩阵指定行和指定列的一个元素。简单地键入矩阵名接着在括号中给出行下标和列下标,然后是等号和赋给矩阵单元的一个数值常数(标量)。 例如,申明了一个2 2的矩阵A: matrix(2,2) a

这第一个命令建立了一个2 2的A,并进行了初始化,所以全为0。再键入下面两行命令: a(1,1) = 1 a(2,1) = 4 于是得到:

通过程序中的循环语句可给大量的矩阵元素赋值: vector(10) y matrix (10,10) x

A的元素for !i = 1 to 10 y(!i) = !i for !j = 1 to 10 x(!i,!j) = !i + !j next next

下面介绍的填充过程,也是使用循环进行赋值的。

填充赋值(Fill assignment)

给矩阵元素赋值的第二种方法是,使用填充(fill)过程,即将一系列数值按指定的顺序去填充矩阵的每一个元素。根据缺省设置,填充过程是一列一列地进行填充,但是也可改变这种填充过程。

填充赋值的命令格式:矩阵对象名接句号,句号后接填充过程名fill,再接由逗号分隔的数值列表。下面是建立两个矩阵对象的例: vector(3) v

v1.fill 0.1, 0.2, 0.3

matrix(2,4) x

x.fill 1, 2, 3, 4, 5, 6, 7, 8

注意填充过程的默认填充顺序是按列填充。 如果下面语句替代上面最后一行:

x.fill(b=r) 1,2,3,4,5,6,7,8 选项b=r的意思是by row(按行) 执行后,得到的X矩阵对象是:

在有些情形下,企图用一组数值对矩阵元素进行重复地赋值。为此,采用选项1用数值列表重复循环填充直至矩阵被填满。于是, matrix(3,3) y

y.fill(l) 1, 0, -1 建立矩阵对象Y是:

矩阵赋值语句(Matrix assignment)

使用矩阵赋值语句可以将一个矩阵对象拷贝另一个矩阵里。矩阵赋值语句的命令格式: 目标矩阵名=矩阵表达式

矩阵表达式或者是一个数值常数,或者是一个矩阵,或者是一个返回矩阵对象的表达式。

EViews执行矩阵赋值语句赋值时遵循的规则,随着矩阵赋值语句表达式中矩阵的类型不同而有所不同。

赋值号右端是数值常数(标量)(Scalar values on the right-hand side)

如果一个数值常数(标量)出现在等号的右边,那么矩阵的每一个元素就被赋给了这个给定的数值。例如:

matrix(5,8) first scalar second vec(10) third first = 5 second = c(2) third = first(3,5)

由于在赋值语句中允许对矩阵进行初始化,所以可以将申明语句与赋值语句结合起来使用。 matrix(5,8) first = 5 scalar second = c(2) vec(10) third = first(3,5)

赋值号右端与左端有相同的对象类型(Same object type on right-hand side)

如果右边的源对象是一个矩阵或一个向量,且与左边的目标对象具有相同的类型,那么左边的目标对象将被重新定义维数使其与右边源对象的维数相同,以便把源对象中所有的元素拷贝到目标对象中。例如: matrix(10,2) zdata = 5

matrix ydata = zdata matrix(10,10) xdata = ydata

申明ZDATA为10 2的矩阵,每个矩阵元素被5填充。YDATA自动地调整大小为10 2,所有元素被ZDATA的元素填充。

注意,即使XDATA通过申明,是一个10 10的矩阵,但是通过右端的赋值,XDATA却成了一个元素为5的10 2的矩阵。因为上面的申明语句matrix(10,10) xdata = ydata等价于下面两行命令: matrix(10,10) xdata xdata = ydata

第一个申明矩阵XDATA 是10 10的,然后当它被YDATA填充时,自动调整为10 2的维数。

在更广泛的背景下进行赋值语句的讨论,会涉及到对象间的转换。一些情况下,转换是自动进行的,另一些情况下EViews为执行转换提供了一些辅助的工具。

三、矩阵对象间复制数据(Copying Data Between Objects)

除了前节中讨论的基本赋值语句之外,EViews提供大量的工具,以便复制数据到矩阵或者从矩阵将数据复制出来。

有时,企图在不同类型的矩阵对象之间移动数据。例如,希望从向量中获取数据,并把它至于一个矩阵中。EViews有许多内置的规则,保证这类转换自动进行。

有时,又企图在矩阵对象与EViews的序列或组之间移动数据。Eviews中有一系列的工具允许在类型不同的对象间进行数据转换。 从矩阵对象复制数据(Copying data from matrix objects) 使用赋值语句,数据可以在不同类型的矩阵对象之间进行传递。如果可能的话,EViews将调整目标对象的大小,以便目标对象含有与等号右边源对象有相同信息。

处理Y=X表达式的基本规则综述如下: (1)Y的类型保持不变。

(2)目标对象Y(如果可能)将采取源对象X的维数;否则EViews将发出出错。于是,将向量赋给一个矩阵,将调整矩阵的大小使矩阵的维数大小与向量相同;但是将一个矩阵赋值给一个向量则将产生错误。 (3)将X中的数据将复制到Y中。 对以上规则的特别例外:

(1)如果X是一个数值常数(标量),那么Y保持原来的大小并被X的值填充。

(2)如果X和Y都是列向量或都是行向量,那么Y将变成与X一样的类型。

参见矩阵对象自动调整大小(Automatic Resizing of Matrix Objects)总结表中矩阵对象标准转换规则。 下面是一些解释矩阵赋值的简单的例子: vector(3) x x(1) = 1 x(2) = 2 x(3) = 3 vector y = x matrix z = x

Y是一个3个元素的列向量,被赋给了与X相同的维数和数值。Z是一个3 1的矩阵,包含了与X一样的内容:Z(1,1)=1, Z(2,1)=2, Z(3,1)=3。EViews自动调整Z 的大它与X的维数相一致。 自动调整大小的例子: vector(7) y = 2 scalar value = 4

matrix(10,10) w = value w = y

matrix(2,3) x = 1 rowvector(10) t = 100 x = t

W是10 10数值等于4 的矩阵,但是它后来被重新设置为7 1数值等于2的矩阵。X最后是1 10数值等于100的矩阵。 类似地,考察命令: vector(7) y = 2 rowvector(12) z = 3 coef(20) beta y = z z = beta

命令执行完毕以后,Y是长度为12的行向量,每个元素的数值等于原始的行向量Z的数值3。原始的行向量Z最后变为长度为20的列向量,包含的数值是系数向量BETA的原始值0。

在一些情况下 EViews不能执行给定的赋值操作,因为调整大小的操作没有定义。例如,假设X是2 2的矩阵,赋值语句如下: vector(7) y = x

将得到一个错误。EViews不能够将一个向量转变为一个矩阵,因此没有办法将矩阵X的4个元素赋给向量Y。其它一些无效赋值语句的例子包括将矩阵的值赋给一个数值常数变量(标量),或者将对称矩阵的值赋给向量。也就是Eviews不能将右边的高维矩阵对象经过转换赋给左边的、低维的矩阵对象。

从矩阵对象中复制部分数据(Copying data from parts of matrix objects)

除了对象间标准的数据转换规则之外,EViews还提供了一些函数从矩阵对象中抽取一部分进行赋值。注意,调用这些函数要引用矩阵对象,有可能还要引用一些参数,这些函数将返回一个可用于赋值的矩阵对象。 用于矩阵对象转换的命令和函数详见帮助文件中的Matrix Command and Function Reference。这里,通过例题阐述一些典型的操作。 首先,假设从矩阵拷贝数据到向量。下面从M1和SYM1中拷贝数据到向量V1、V2、V3和V4中。

matrix(10, 10) m1 sym(10) sym1

vector v1 = @vec(m1)

vector v2 = @columnextract(m1,3) vector v3 = @rowextract(m1,4) vector v4 = @columnextract(sym1,5)

这里,@vec函数建立了100元素的列向量,它是矩阵M1一列堆在另一列之上……这样堆砌形成的。V2是10个元素的列向量,抽取M1的第3列构成。V3是10个元素的行向量,抽取M1第4行构成。@vec(矩阵各列堆砌形成列向量)、 @rowextract(从矩阵中抽取一行)和@columnextract(从矩阵中抽取一列)函数也可以使用于对称矩阵对象上。V4是10个元素的列向量,它是抽取SYM1第5列构成的。 使用@subextract(从矩阵中抽取一个子矩阵)函数也可从一个矩阵拷贝部分数据到另一个维数比较小的矩阵中。例如: matrix(20,20) m1=1

matrix m2 = @subextract(m1,5,5,10,7) matrix m3 = @subextract(m1,5,10)

matrix m4 = m1

矩阵M2是6 3的矩阵,是M1的子矩阵,以M1矩阵包括5行5列为左上角、以10行7列为右下角。M3是抽取M15行10列到M1的最后一个元素(10行10列)构成的16 11的矩阵。@subextract函数,如果只指定了一个端点(左上角端点),那么默认最后一个单元为右下角端点。矩阵M4是抽取M1全部元素构成的矩阵。M2和M3都是比M1小的子矩阵。

使用colplace、 rowplace和 matplace命令也能从一个矩阵拷贝数据到另一个矩阵。例如: matrix(100,5) m1 = 0 matrix(100,2) m2 = 1 vector(100) v1 = 3 rowvector(100) v2 = 4 matplace(m1,m2,1,3) colplace(m1,v1,3) rowplace(m1,v2,80)

matplace(矩阵置放)命令是将引用的第二个矩阵在指定位置放置到第一个引用的矩阵中。命令matplace(m1,m2,1,3)将M2放置到M1中,m2的左上角放置到m1的1行3列上。colplace(m1,v1,3)命令将V1放置到M1的第3列上。rowplace(m1,v2,80)命令将V2放置到M1的第80行。Colplace称为列放置命令,rowplace称为行放置命令。

在矩阵对象和其它对象之间拷贝数据(Copying data between matrix objects and other objects )

上一节讨论了在矩阵之间,矩阵与向量之间,或矩阵与数值常数变量(标量)之间的数据拷贝技术。下面讨论矩阵与其它对象,例如矩阵与序列或组之间的数据拷贝技术。

注意原始序列或组对象与矩阵对象之间存在两大主要的差别: 第一,涉及序列或组的操作必须使用当前工作文件样本信息,而矩阵操作则不必参照工作文件当前样本区间;

第二,在两类对象之间如何处理缺失信息(NA)上存在很大差别。 直接赋值(Direct Assignment)

直接赋值是从序列或组对象拷贝数据到矩阵对象中最容易的方法。目标矩阵置于等号的左边,进行转换的序列或组放在等号的右边。

如果把序列放在右边,EViews形成的向量中只包括当前样本的观察值。如果把组放在等号的右边,EViews形成一个矩阵,也只包含当前样本观察值。

虽然很简单,但是这种方法存在两个基本的约束条件。第一,EViews只拷贝当前样本的观察值;第二,如果在序列或者组中的序列存在缺失数据,这些缺失数据将会放置到矩阵中去。于是,如果样本包含了20个观察值,但是序列或组包含了缺失数据,那么向量或矩阵的维数将少于20。下面要介绍的STOMNA则可以将NA保留到矩阵中。例如: smpl 1963:3 1993:6 fetch hsf gmpyq group mygrp hsf gmpyq vector xvec = gmpyq matrix xmat = mygrp

这些语句建立了向量XVEC和具有两列的XMAT矩阵。它们分别包含了1963:3 1993:6序列或组中没有缺失数据的观察值。注意,如果GMPYQ中缺失了1970:01的观察值,HSF中缺失了1980:01的观察值,那么这两个序列中有两个观察值被拒绝于矩阵XMAT之外。

执行矩阵赋值时,引用序列的元素就如同引用向量的元素一样,即把给定的下标数值置于名称后面的括号中。下标数值I引用的是从工作文件范围开始序列的第I个元素。例如,年度工作文件的范围是1961到1980,那么表达式GNP(6)引用的是1966年GNP的值。这些序列元素表达式可以用来将指定序列的序列值赋给矩阵元素,或者将矩阵的值赋给指定的序列元素。例如, matrix(5,10) x series yser = nrnd x(1,1) = yser(4) yser(5) = x(2,3) yser(6) = 4000.2

将YSER的第4个值赋给X(1,1),再用X(2,3)的值和数值常数4000.2分别赋给YSER的第5个和第6个元素。

在矩阵赋值运算中,允许引用序列元素如同引用向量元素一样,但是,一般说来,不能用序列去替代向量。如果使用序列去替代向量,大多数向量和矩阵运算会出现错误。例如,我们不能用一个序列名去执行一个行放置(rowplace)命令。

必须注意,当我们不是进行矩阵赋值时,序列名后括号中的数值指的是对整个序列进行滞后/领先的运算。因此,在在生成序列,或在方程、系统和模型的设定中,GNP(6)代表的是领先6期的一个序列。若要要引用GNP序列指定的元素,则应当采用@elem函数。 使用@convert 进行复制(Copy using @convert)

@convert函数接受一个序列或组对象,@convert可有样本选项,该函数返回一个向量或矩阵。如果没有指明样本,@convert就采用工作文件的范围作为序列或组转换为矩阵对象的范围。样本决定了哪些序列元素将包含在矩阵对象中。例如, smpl 61 90

group groupx inv gdp m1 vector v = @convert(gdp) matrix x = @convert(groupx)

X是一个30 3的矩阵。第1列包含INV序列的数据,第2列包含GDP,第3列包含M1的数据。正如直接赋值语句一样,@convert函数也拒绝转换序列或组中任一序列中的缺失数据。如果在上面这个例题中,INV在1970和1980含有缺省数据,那么向量V含有30个元素,矩阵X则是28 3的矩阵。如果在后续运算中要求V的 行数与X的行数相等,这将导致出错。

采用@convert函数比采用直接赋值有两个主要的优点: 第一,@convert是一个函数,可以出现在矩阵表达式中; 第二,可选形式参数指定哪个范围的样本参与转换。 例如,

sample s1.set 50 90

matrix x = @convert(grp,s1)

sym y = @inverse(@inner(@convert(grp,s1))) 采用样本对象S1设置的范围进行转换。

使用stom、 stomna 和 mtos 复制(Copy using stom, stomna, and mtos)

EViews还提供了三个序列与矩阵之间直接进行数据转换的命令,而且转换时可以既控制样本范围也可以处理NA数据。

stom (Series TO Matrix)接受一个序列或一个矩阵对象并拷贝数据到一个向量或矩阵,既可以采用当前工作文件范围也可以指定样本范围进行这种转换。如同直接赋值一样,拒绝序列中的或组中任一序列的缺失数据参与转换。 例如:

sample smpl1.set 1950 1995 smpl 61 90

group group1 gnp gdp money vector(46) vec1 matrix(3,30) mat1 stom(gdp,vec1,smpl1) stom(group1,mat1)

将stom与@convert相比较,stom是一个命令不能包含在矩阵表达式中,与@convert更不同的是目标向量或矩阵必须是已经存在而且具有适当的维数。

stomna (Series TO Matrix with NAs)与stom的操作相同,不同之处在于stomna允许缺失数据参与转换。序列相关样本的元素直接照原样地复制到目标向量或矩阵中。于是, smpl 1951 2005 vector(55) gvector stom(gdp,gvector)

总是建立55个元素的GVECTOR向量,包含1951到2005年的GDP数据,包括了NA数据。

mtos (Matrix TO Series) 接受一个矩阵或向量拷贝它们的数据到一个已经存在的序列或组对象中,拷贝被时可采用当前样本或指定样本。例如,

mtos(mat1,group1) mtos(vec1,resid) mtos(mat2,group1,smpl1)

如同stom一样,要求目标序列或组对象已经存在,由样本范围给定的目标维数应与源向量或矩阵的维数相匹配。

四、矩阵表达式(Matrix Expressions)

矩阵表达式指的是采用数算符或关系运算符、函数和括号的,包含了矩阵对象的表达式。下面将更详细地讨论矩阵函数,在一些例题中将验证一些相关的结论。例如: @inner(@convert(grp,s1)) mat1*vec1

@inverse(mat1+mat2)*vec1

mat1 > mat2

EViews在计算表达式值时遵循下列优先等级的规则: 可以采用多对括号来明确矩阵表达式中的优先等级。 如果不采用括号,遵循以下优先等级进行计算: 1. 反号运算符和函数 2. 乘、除运算符 3. 加、减运算符

4. 比较运算符: >=, >, <=, <, <> 例如,

@inverse(mat1+mat2)+@inverse(mat3+mat4) vec1*@inverse(mat1+mat2)*@transpose(vec1)

在第一个表达式中,矩阵MAT1 和MAT2相加后求逆;矩阵MAT3 和MAT4相加后求逆;最后两个逆矩阵相加。在第二个表达式中,矩阵MAT1 和MAT2相加后求逆后,利用结果计算VEC1的二次型。 矩阵运算(Matrix Operators)

EViews为矩阵对象提供了标准数算。

取反符号(-)是一元运算符

取反符号(-)改变矩阵对象中每一个元素的符号,得到一个具有相同维数的矩阵或向量。例如: matrix jneg = -jpos 以下是二元运算符: 加 (+)

将两个类型和维数都相同的相加,得到具有相同类型和维数大小的矩阵。例如: matrix(3,4) a matrix(3,4) b matrix sum = a + b

可以将一个方阵与维数相同的对称阵(sym)相加。对称阵的上三角等于下三角。加一个数值常数变量(标量)到矩阵对象,即将数值常数与矩阵或向量的每一个元素相加。

减 (-)

减的结果与加的结果相同。例如: matrix(3,4) a matrix(3,4) b matrix dif = a - b

从一个矩阵对象中减一个数值常数变量(标量),即从矩阵对象的每一个元素中减去这个数值常数变量(标量)。 乘(*)

可以将两个矩阵对象相乘,第一个矩阵的列数应等于第二个矩阵的行数。例如: matrix(5,9) a matrix(9,22) b matrix prod = a * b

这个例子中,乘积结果PROD是一个5行22列的矩阵。

进行相乘运算的两个之一或者两个都可以是对称阵。注意,两个对称阵相乘的结果是一个矩阵,但不一定是对称阵。@inner函数(内积函数)得到的是一个方阵与自身转置相乘的结果棗一定是对称阵。 一个矩阵或对称阵左乘一个向量,矩阵的列数应与向量元素的个数相等,相乘结果得到一个向量,向量的维数与矩阵的行数相等。 例如:

matrix(5,9) mat vector(9) vec

vector res = mat * vec 在这个例子中,RES有5个元素。

一个行向量左乘一个矩阵或对称阵(条件:行向量元素个数等于矩阵的行数),得到一个行向量,维数等于原矩阵的列数。例如: rowvector rres matrix(5,9) mat rowvector(5) row rres = row * mat

在这个例子中。RRES有9个元素。

一个矩阵对象被标量乘。原矩阵的每一个元素与这个数值常数变量(标量)相乘。结果是一个与原矩阵类型和维数相同的矩阵。数值常数变量(标量)可左乘矩阵也可右乘矩阵。例如: matrix prod = 3.14159*orig matrix xxx = d_mat*7 除(/)

一个矩阵除以一个数值常数变量(标量)。例如: matrix z = orig/3

矩阵对象ORIGD的每一个元素被3除。 比较运算符(=, >, >=, <, <=, <>)

两个相同类型和相同维数的矩阵可以使用比较运算符对它们进行比较。比较结果是一个逻辑值。每个相应的元素配对进行比较检验,如果任一对检验失败,那么返回0或false;否则返回1或true。 例如:

if result <> value then run crect endif

比较结果有可能是:第一个矩阵不大于,不小于,不等于第二个矩阵。例如: vector(2) v1 vector(2) v2 v1(1) = 1 v1(2) = 2 v2(1) = 2 v2(2) = 1

因为V1的第一个元素小于V2的第一个元素,V1不大于V2。又因为V1的第二个元素大于V2的第二个元素,V1不小于V2。所以,两个向量是不相等的。

五、矩阵命令和函数(Matrix Commands and Functions)

EViews提供了大量的处理矩阵对象内容的命令和函数。这些命令和函数粗略地分为4个大类:

1.常用命令和函数(Utility Commands and Functions) 2.矩阵代数函数(Matrix Algebra Functions)

3.描述统计量函数(Descriptive Statistics Functions)

4.矩阵元素函数(Element Functions)

常用命令和函数为建立矩阵、管理矩阵和给矩阵赋值提供了支持。已经介绍过@convert函数和stom命令,它们都是从序列或组对象中将数据转换到向量或矩阵的。

矩阵代数函数允许进行普通的矩阵代数操作和计算。可以使用这些内置的函数去计算特征根(eigenvalues)、特征向量( eigenvectors )和矩阵行列式的值(determinants of matrices),去求矩阵的逆矩阵,去求解线性方程组和执行奇异值的分解。

描述统计量函数计算矩阵对象数据的综合统计量。可以计算矩阵中所有元素的平均数、中位数、最大值、最小值和方差。

矩阵元素函数允许建立一个新矩阵,新矩阵的元素是另一个矩阵每一个元素的函数值。在序列表达式中有效的大多数函数都可以应用与矩阵对象。例如,计算矩阵每个元素的指数值或对数值,或向量每个元素的累计正态分布函数值。

函数与命令(Functions versus Commands)

一般说来,函数总是接受一个形式变量,返回一个结果。形式变量就是调用函数让函数返回函数值的自变量。函数容易识别,函数名以符号@打头。

调用函数有两种基本的方法:

第一,将返回结果赋给EViews对象。这些对象然后可用于其它EViews表达式中,如果在后续计算中要运用这个结果的话。例如, matrix y = @transpose(x)

将矩阵X的转置传递给矩阵Y。因为Y是一个标准的EViews矩阵,它可以用在所有常见的表达式中。

第二,将函数作为矩阵表达式的一部分。因为函数返回的结果是立等可用的,如果在将来的使用中也不会再用到它们,那么就没有必要赋给一个命名对象,而是将函数作为表达式的一部分。例如,这个命令 scalar z = vec1*@inverse(v1+v2)*@transpose(vec1)

使用了函数@inverse和函数@transpose的结果来构造申明表达式,并将表达式的值赋给了Z。在后续计算中这些表达式里的函数结果是不可用的。

作为对比,一个命令接受对象名和表达式作为形式变量,并对命名对象进行操作。但是,命令不返回值。同时,命令也不以字符@为前导,且必须在一行中地表示出来,而不是作为矩阵表达式的一部分。例如,为了将序列X传递到向量V1,应当键入: stom(x,v1)

因为命令不返回任何值,所以命令不能在矩阵表达式中使用。

NA的处理(NA Handling)

如上所述,在从序列或组对象传递数据到矩阵对象的大多数方法中将自动的抽掉包含了缺失数据及其对应的其他观察值。似乎在处理矩阵数据不会遇到缺省数据NA的麻烦。事实上,矩阵数据处理过程中存在遇到要处理包含了缺失数据的矩阵的可能性。

例如,使用stomna命令可以屏避自动抽掉NA数据,将序列中的NA传递给矩阵。此外,一些元素操作可将缺失数据NA作为标准矩阵运算的生成结果。例如,使用@log函数对每一个矩阵元素取对数,对哪些含有非正数的元素@log函数将生成缺失数据NA。

EViews处理包含NA数据的矩阵时遵循两条简要的规则:

(1)对于所有的运算、命令和函数,除了描述统计量函数,EViews使用整个矩阵对象进行操作,按要求对NA进行处理。

(2)对于描述统计量,Eviews执行描述统计量计算时会自动地抽掉NA。这条规则的意义如下:

矩阵运算在处理缺失数据NA时会在适当的位置生成NA。将两个含有NA的矩阵相加,将得到一个在对应单元含有NA的矩阵。含有NA的两个矩阵相乘得到在对应行和对应列含有NA的矩阵。

所有矩阵代数函数和命令在处理缺失数据NA时将生成NA,因为对于缺失数据NA,这些运算是未定义的。例如,含有NA矩阵的Cholesky因子分解也将含有NA。

所有常用函数和命令在处理缺失数据NA时将照常进行。因为他们把NA看作与任何其它数值一样。例如,采用colplace拷贝向量的内容到矩阵中,将把包括NA在内的内容放置到目标矩阵中。

所有矩阵元素函数在处理缺失数据NA时将在适当的位置繁殖NA。对矩阵取绝对值,那么将得到这样一个矩阵,在原非缺失数据的单元得到原数据的绝对值,在原缺失值单元得到NA。

描述统计量函数在处理缺失数据NA时总是基于矩阵非缺失数据的一个子集进行计算的。因此,采用@obs函数就可求出有多少观察值参与了描述统计量的计算。

六、矩阵的图形和统计观察(Matrix Graph and Statistics Views)

除了数值常数变量(标量)而外的所有矩阵对象都有窗口和观察。例如,可以显示10 5矩阵Z的每一列的线形图或柱形图: z.line z.bar(p)

矩阵的每一列对应矩阵的行编号画出线性趋势图和柱形图。

此外,还可对矩阵的每一列计算描述统计量,以及列间的相关系数矩阵和协方差矩阵: z.stats z.cor z.cov

EViews按列执行非共同数据删除原则(即各列不因其他列存在缺失而删除相应位置的观察值,而是各自删除缺失数据),所以每列组统计量是按照该列最大可能观察值集合计算的。

显示和打印这些观察的命令格式参见: Command Reference by Object Type。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务