1、 1计算计量经济学 计量经济学家和金融分析师 GAUSS 编程与应用 林光平 著 2序 计算计量经济学是应用经济学的一个新兴领域 它着重研究计量经济学方法在计算方面的应用 计量经济学家和金融分析师 GAUSS 编程与应用 GPE 最初是教师 学生联合项目开发出的成果 旨在寻找一个更为有效的进行计量经济学计算的方法 具体的方式是笔者先编写计量经济学程序并在课堂教学中讲授 学生学习相关专题的材料 然后写出使用该程序和学习 G AUSS 的心得体会 众所周知 学习计量经济学的障碍之一是进行计算机编程 试想在费了九牛二虎之力理解新的计量经济学概念的时候 有谁还情愿同时再学一种新的编程语言呢 这或许就是
2、那些诸如 RATS SHAZAM EVIEWS 和 TSP 等 易用型 软件包在教学和研究中大行其道的原因但这些封装的软件包缺乏灵活性 限制了使用者在进行高级建模时的发挥空间 GPE 是一个在 GAUSS 程序环境下运行的计量经济学软件包 您使用 GUASS 语言写出简单的代码 就可以与 GPE 中的经济计量程序实现互动 在学习 GPE 和计量经济学的过程中 您可以按照自己的节奏和将来的发展计划来学习 GUASS 编程规则和技巧 当然 熟悉 GPE 要花一些时间 更遑论要熟练运用 GUASS 语言了 该 GPE 项目旨在为常用的课程提供一些使用软件包和 GUASS 语言的例证 GPE 最早开发
3、于 1991 年 到现在已经经过了几次更新和修订 第一个版本 1995 年夏初推出 代码名字是 LSQ 其功能只限于最小二乘估计和预测 本书以及附送的光盘反映了正在进行中的工作的主要修订 包括线性和非线性回归模型 联立线性方程组和时间序列分析 现在 拿在您手中的就是 GPE 产品 学习它的最好的方法就是研 读本书 把每一课的程序都敲进去并加以运行 同时研究程序范例和输出的结果 为了您使用方便 所有课程和数据的文件都可以在附送的光盘里找到 在使用 GPE 软件包教授计量经济学的几年里 许多学生对 GPE 中的想法和程序作出了有益的贡献 其中有价值的意见和建议已经融入本书的写作中 特别应该说明的是
4、 最早的LSQ 版本是笔者与 Lani Pennington 的一个联合项目 他给出了该项目的外形 我还要特别感谢 Geri Manzano, Jennifer Showcross, Diane Malowney, Trish Atkinson 和 Seth Blumsack, 他们在编写和校对众多手稿与程序最初版本的过程中付出了辛劳 同样 我还要感谢我的家人给予我的一贯的理解和支持 3目录 序 2 目录 .3 第一章 导论 7 为什么选择 GAUSS?.7 什么是 GPE? 8 如何使用 GPE?. 10 第二章 GAUSS基础 .10 开始使用 . 12 GAUSS 语言入门 20 创建和
5、编辑 GAUSS 程序 23 第 2.1 节 正式开始 24 输入 /输出文件和数据转换 . 26 第 2.2 节 输入 /输出文件 .29 第 2.3 节 数据转换 31 GAUSS 内嵌函数 32 第 2.4 节 数据分析 37 执行流程控制 38 自己编写函数 41 用户词典 . 45 GPE 软件包 46 第三章 线性回归模型 .48 最小二乘估计 48 第 3.1 节 简单回归 48 第 3.2 节 残差分析 51 第 3.3 节 多元回归 53 生产函数估计 55 第 3.4 节 科布 道格拉斯生产函数 56 第 3.5 节 结构性变化的检验 61 第 3.6 节 残差诊断 64
6、第四章 虚拟变量 .68 季节性变动 68 第 4.1 节 季节性虚拟变量 68 第 4.2 节 虚拟变量陷阱 72 结构性变动 73 第 4.3 节 结构性变动的检验 虚拟变量法 74 第五章 多重共线性 .78 多重共线性的识别 . 78 第 5.1 节 条件数和相关矩阵 78 第 5.2 节 多重共线性的 Theil 度量 80 4第 5.3 节 方差膨胀因子 VIF.82 对多重共线性的修正 . 83 第 5.4 节 岭回归法和主元素法 84 第六章 非线性优化 .87 求解数学函数 87 第 6.1 节 单变量纯量值函数 88 第 6.2 节 双变量纯量值函数 91 估计概率分布 9
7、2 第 6.3 节 估计概率分布 94 第 6.4 节 混合概率分布 98 统计回归模型 100 第 6.5 节 最小化平方和函数 101 第 6.6 节 最大化对数似然函数 103 第七章 非线性回归模型 107 非线性最小二乘估计 .107 第 7.1 节 CES 生产函数 .108 最大似然估计 109 第 7.2 节 Box-Cox 变量变换 111 非线性模型的统计推断 116 第 7.3 节 非线性模型的假设检验 117 第 7.4 节 货币需求方程的似然比检验 120 第八章 离散和受限应变量 123 二元选择模型 123 第 8.1 节 经济学教育的概率单位模型 .125 第
8、8.2 节 经济学教育 的对数单位模型 .130 受限应变量模型 131 第 8.3 节 婚外恋的托比分析 .133 第九章 异方差 137 与异方差一致的协方差矩阵 .137 第 9.1 节 与异方差一致的协方差矩阵 .137 加权最小二乘法 140 第 9.2 节 对异方差的 Goldfeld-Quandt 检验和修正 140 第 9.3 节 对异方差的 Breusch-Pagan 和 White 检验 .143 非线性最大似然估计 .144 第 9.4 节 乘法形式的异方差 .145 第十章 自相关 150 与自相关一致的协方差矩阵 .150 第 10.1 节 与异方差 自相关一致的协方
9、差矩阵 .150 自相关的识别 154 第 10.2 节 自相关的检验 .154 自相关的修正 157 第 10.3 节 Cochrane-Orcutt 迭代程序 158 第 10.4 节 Hildreth-Lu 网格寻找程序 161 第 10.5 节 高阶自相关 .162 5自回归和移动平均模型介绍 .166 第 10.6 节 ARMA(1,1) 误差结构 166 非线性最大似然估计 .170 第 10.7 节 非线性 ARMA 模型估计 .171 第十一章 分布滞后模型 178 滞后因变量模型 178 第 11.1 节 带滞后因变量的自相关检验 .178 第 11.2 节 工具变量估计法
10、.182 多元滞后模型 185 第 11.3 节 Almon 滞后模型再探 186 自回归分布滞后模型 .189 第 11.4 节 Almon 滞后模型再思考 .189 第十二章 广义矩估计法 192 概率分布的广义矩估计 192 第 12.1 节 概率分布 .193 计量经济模型的广义矩估计 .196 第 12.2 节 非线性理性预期模型 .201 线性广义矩 205 第 12.3 美国消费函数的广义矩估计 206 第十三章 联立方程组 .208 线 性回归方程组 208 第 13.1 节 克莱因模型 I.210 第 13.2 节 克莱因模型 I 再表述 215 貌似无关的回归方程组 (SU
11、R) .217 第 13.3 节 Berndt-Wood 模型 .218 第 13.4 节 扩展的 Berndt-Wood 模型 .222 非线性最大似然估计法 225 第 13.5 节 克莱因模型 I 再探 .226 第十四章 单根和协整 .231 单根检验 .232 第 14.1 节 修正的 Dickey-Fuller 单根检验 .233 协整回归检验 241 第 14.2 节 协整检验 Engle-Granger 方法 .242 第 14.3 节 协整检验 Johansen 方法 248 第十五章 时间序列分析 251 自回归和移动平均 ARMA 模型 .251 第 15.1 节 债券收
12、益 ARMA 分析 .253 第 15.2 节 美国通货膨胀的 ARMA 分析 .256 自回归条件异方差 ARCH .257 第 15.3 美国通货膨胀的 ARCH 模型 .260 第 15.4 德国马克 英镑汇率的 ARCH 模型 .263 第十六章 组合数据 .269 固定影响模型 269 第 16.1 节 单向组合数据分析 哑变量法 .272 6随机影响模型 275 第 16.2 节 单向组合数据分析 偏差法 .278 第 16.3 节 双向组合数据分析 .282 貌似无关的回归方程组 SUR .284 第 16.4 节 投资需求的组合数据分析 偏差法 .285 第 16.5 节 投资
13、需求的组合数据分析 SUR 法 .288 第十七章 最小二乘预测 292 经济增长预测 292 第 17.1 节 事后预测和预测误差统计量 .293 第 17.2 节 事前预测 .299 跋 303 附录 A GPE控制变量 .305 输入控制变量 305 通用目的的输入控制变量 .305 用于估计的输入控制变量 .306 用于预测的输入控制变量 .314 输出控制变量 315 用于估计的输出控制变量 .315 用于预测的输出控制变量 .316 附录 B GPE应用程序 319 应用程序 B-1: GMM.GPE 319 应用程序 B-2: JOHANSEN.GPE .321 应用程序 B-3
14、: PANEL1.GPE .322 应用程序 B-4: PANEL2.GPE .324 附录 C 统计表 329 表 C-1: 基于 t-统计量的 Dickey-Fuller 单根检验临界值表 .329 表 C-2: 基于 F-统计量的 Dickey-Fuller 单根检验临界值表 .331 表 C-3: 用于回归残差的 Dickey-Fuller 协整 t-统计量 tr临界值表 332 表 C-4: 基于响应面估计的单根和协整检验临界值表 .333 表 C-5: Johansens 协整似然比检验统计量临界值表 .335 参考文献 .337 索引 .339 导论 7第一章 导论 计量经济学家
15、和金融分析师 GAUSS 编程与应用 GPE 是用 GAUSS 语言编写的计量经济学程序软件包 本书内容是 GAUSS 编程进行经济计量分析以及 GPE 应用 为了探求应用计量经济学的计算方面 我们采用 GAUSS 的编程环境和 GPE 软件包 大家或许知道 GAUSS 是专为矩阵运算和处理设计的程序语言 适合高级统计和经济计量运算 许多大学和研究机构在计量经济学课程中使用 GAUSS 不过 对于那些没有计算机编程经验的人来说 GAUSS 是一门比较难以学习和掌握的语言 GPE 旨在搭建一架 GAUSS 强大功能和它带给学习者巨大压力之间的桥梁 使用 GPE 可以方便而快捷地同时熟悉 GAUS
16、S 的编程环境以及计量经济学的分析技巧 本书的目的就是让读者能够轻松地使用 GAUSS 工具进行计量经济学分析 单纯读教科书或单 纯写 GAUSS 程序都不可能学好计量经济学 你必须通过使用本书的示例 实现与课本和计算机的互动 这就是本书 做中学 learning by doing的要旨 为什么选择 GAUSS GAUSS 是与 C 语言或 Pascal 语言类似的编程语言 GAUSS 程序作用于矩阵 矩阵是它完全编程环境的基础 GAUSS 程序灵活性好 可以极为方便地应用于各种矩阵计算 GAUSS 有 400 多个内部指令 从文件输出 / 输入 I/O 图形到高阶矩阵运算都包含其中 借助这些
17、内部指令和程序 众多的 GAUSS 词库和应用软件包可以实施准 确和有效的计算 词库和软件包的使用将复杂的编程细节隐藏起来 通过一组扩展程序和控制变量简化了界面 GAUSS 出版质量图库 Publication Quality Graphics 本身就是一个库它通过在定义好的图形程序上一组控制变量的处理 扩展了主系统 什么是 GPE GPE 是进行线性和非线性回归的一个 GAUSS 软件包 适用于经济计量分析与应用 GPE包含许多计量经济学程序 这些程序受控于几组全程变量 它涵盖了大部分基本的计量经济学计算 如单变量线性方程估计和预测 联立线性方程组 非线性模型和时间序 列分析等 除了计量经济
18、学计算之外 GPE 没有为使用者提供数据输入 - 输出界面 也没有提供数据转换程序 这两种操作功能以及其他一些提供 GPE 和 GAUSS 编程环境互动的功能 将在下一章 - GAUSS 基础 中进行讨论 GAUSS 环境下 GPE 软件包的使用将在第三章线性最小二乘估计时开始介绍 这也是全书其余部分的基础 导论 8应用 GPE 本书和 CDROM 光盘是以 GAUSS 最新的 Windows 版本为基础开发出来的 1 在使用 GPE 软件包之前 它必须与 GAUSS 软件一起正确安装 按照光盘上的指导安装 GPE 确保其版本号与 GAUSS 的版本号相匹配 2 GPE 安装完毕后 在 GAU
19、SS 目录中应该有名为 GPE2.GCG 的 GPE 编译程序 GPE2.GCG 是二进制编码文件 要求使用正确的 GAUSS 版本 此外 还会自动建立 GPE 子目录 保存全部章节的程序和数据文件 GPE 是所有实证练习的工作目录 在逐章进行练习的过程中 程序文件可能被重写 并增加输出结果文件 如果想恢复原状 只须重新安装 GPE 所有 GPE 练习程序都直接指向安装过程中创建的 GPE 子目录 使用缺省的 GPE 子目录会比较方便 因为所有的练习程序和数据文件都已经安装在那里供 你调用 也许你希望建立自己的工作磁盘来编写每一个章节的练习 如果你不介意打字的话 使用一个工作盘不仅便于携带而且
20、便于使用 你只需要在每节练习程序中将原来的 GPE 子目录的指向改为自己的工作盘所在的软驱 假定为 a: 也就是说 你要在每一个练习开始时 将gpe 改为 a : 当然你也需要将所需的数据文件拷到你的工作盘上 我们推荐使用工作磁盘 特别是在实验室环境中使用 GAUSS 的情况下 需要重点说明的是 本书不是一本 GAUSS 使用手册或文献汇编 对于那些内容需要参考Aptech Systems 公司提供的 GAUSS W indows 版用户指南 和 GUASS 语言参考 同时 本书也不是一本计量经济学教材 这里介绍的许多用于计量经济学计算的基本公式不过是为了运行算法和程序 许多计量经济学教材都对
21、技巧进行了详细介绍 本书更多的是一本关于如何执行经济计量方法的计算方面的书 本书给出了逐步使用 GPE 和 GAUSS的指导 并提供解释和程序编码示例 GAUSS 程序编码用小块显示 并逐段解释 每一块或每一节都为经济数据分析和计量应用提供了方便的实例练习 这些例子中的大部分都可以原样不动地用于不同的计算机平台 本书中的约 定 为了将我们的注释和你自己打出的字体区分开 正如在你的显示屏上看到的那样 所有的程序编码和结果用等宽 Curier 字体 为了引用方便 程序的每一行以数字标明 Window界面中的菜单项 目录路径 文件名和按键组合用 黑体 显示 为了阅读方便 使用下面的图标 另外给出的注
22、释和附加信息 引起编程错误的常见差错警告 1 本书的写作基于 GAUSS 的 Windows 4.0 版本 2 GPE也适用于 GAUSS 较早的版本 导论 9GAUSS 和 GPE 具体的提示或评论 3. 3 感谢 Aptech Systems 公司允许本书使用其 GAUSS 3.2 版 数字之锤 图标 . GAUSS 基础 10第二章 GAUSS 基础 GAUSS 是一门高级计算机语言 适用于解决以数学和矩阵为导向问题 它可以对任何数学 统计和计量 经济学模型求解 GAUSS 是一门计算机语言 因此它是灵活的 但与那些计量经济学软件包如 EVIES SHAZM 和 TSP 相比 也难学得多
23、 本章我们从 W indows 系统下的 GAUSS 学起 在学习了怎样进入和退出 GAUSS 后 我们介绍更多有关 GAUSS 语言本身的知识 在本章最后 介绍 GPE GAUSS 编程与应用系统软件包 简单描述其在经济计量分析和实用中的能力 开始使用 可用下面方法中的一种启动 GAUSS 的 Windows 版本 : 点击桌面上的快捷方式 GAUSS 的图标 点击左下角的 开始 按钮 从 程序 菜单中选择并运行 GAUSS 使用浏览器或资源管理器找到 GAUSS 目录 4 运行文件 GAUSS.EXE 可用下面方法中的一种退出 GAUSS 的 Windows 版本 在菜单上选择并点击 文件
24、 / 退出 点击 GAUSS 主窗口右上角的 关闭 按钮 带 X 的方盒 Windows 界面 如果你是初次进入 GAUSS 的编程环境 就需要花一点时间熟悉 GAUSS 的 W indows 界面从菜单中选择 帮助 / 内容 学习 GAUSS 及其 Windows 界面有关的内容 帮助 / 参考 提供了类别和字母顺序列表的 GAUSS 语言 参考 理解菜单栏 工具栏 在菜单栏下方 和状态栏 在主窗口底部 对开始 GAUSS 编程是非常重要的 这方面 GAUSS W indows 版用户指南 是一本较好的参考书 简言之 GAUSS 的 W indows 版以两种模式运行 命令 Command
25、和编辑 Edit 每种模式都有自己的窗口 命令输入 - 输出窗口 或命令模式 运行单行命令或程序文件它通常被称为 交互式 模式 编辑窗口 或编辑模式 用来修改或编辑程序和数据文件使用菜单栏的 文件 / 新建 按钮创建一个文件 通过菜单栏的 文件 / 打开 按钮可以打开和编辑一个已有文件 命令输入 - 输出窗口只有一个 但你可以打开任意多个编辑窗口用来处理程序 数据和输出结果等 每个编辑窗口都把目录路径和文件名作为窗口名 以表明内容的来源 点击菜单栏中的 运行 按钮 再点击 运行主文件 或 运行活动文件 就可以执4 GAUSS 目录指你在自己的计算机上成功安装 GAUSS 软件的路径 假定 C
26、是引导盘 执行默认安装后 GAUSS的目录应该是 C:GAUSS C:GAUSS40 4.0 版 或 C:GAUSSLT 4.0 Light版 下文中 GAUSS 目录指 C:GAUSS GAUSS 基础 11行一个程序 程序运行结果可以显示在命令输入 - 输出窗口 也可以显示在单独的输出窗口 如果在菜单栏中选择了 Window/Output Window 同时处理多个程序和数据文件时 GAUSS 会记录运行中的计划的发展过程 下面就是 GAUSS 的命令窗口和编辑窗口的屏幕显示样式 因为不同的计算机使用的 W in dows 启动配置不同 所以你的屏幕上看到的可能会与下面的窗口略有区别 你可
27、能希望设置符合个人口味的编程环境 这可以通过菜单栏的 配置 Configure 按钮 改变程序设置和窗口特征 在 GAUSS 编程环境下 你也可以在调试窗口下跟踪和调试程序文件 在开发大型程序时 这一点非常有用 但本书中没有包括这部分内容 GAUSS 基础 12GAUSS 语言入门 5 本章的余下的内容讨论 GAUSS 语言基础 对象是以前没有或有很少计算机编程知识的读者 这里只介绍 GAUSS 编程的基本知识 之后讨论对经济计量分析有用的更高级的话题我们期望读者通过阅读 GAUSS 语言编写的程序 不断提高熟练程度 如果你急于用计量经济学软件包 GPE 完成手边的工作 可以跳过本章直接阅读下
28、一章有关线性回归模型和最小二乘估计的内容 不过 我们仍然建议在以后你空闲的时候 还是应该回过头来粗略浏览一下有关 GAUSS 语言的内容 刚才我们已经看到 GAUSS 命令可以在命令模式或编辑模式中编写 命令模式按照代码写作的顺序一行一行的执行 简单的 GAUSS 命令可以在命令窗口的 快捷按钮后逐行输入并 执行 按回车或 Enter 键 刚开始的时候 为了介绍 GAUSS 的基本命令和语句 我们会停留在命令输入 - 输出窗口中 使用命令或互动模式 如果输出窗口处于打开状态 关闭它 矩阵 是运算的 基本对象 GAUSS 是将 广义的 矩阵作为变量的少数语言之一 并且它知道矩阵的内容是什么规模有
29、多大 GAUSS 的基本运算 如加法 乘法 都是针对矩阵进行的 可以解决很多令人头痛的问题 很多经济学和计量经济学计算所需要的程序都涉及矩阵 因此 GAUSS被证明是一种非常有效的执行和计算的语言 首先 每行 GAUSS 语句必须以分 号 结尾 考虑下面的 GAUSS 表达式 C = A + B; 如果 A 和 B 是纯量 1 行 1 列的矩阵 C 也是标量 等于它们的和 如果 A 和 B 是等长的行向量 C 就是长度相同的行向量 其每个元素都是 A 和 B 中对应元素的和 最后如果 A 和 B 都是 3 4 的矩阵 则 C 也是 3 4 的矩阵 每个元素等于 A 和 B 中相应元素的和 简言
30、之 符号 + 表示 运行矩阵加法 但是 如果 A 和 B 大小不一致会怎么样GAUSS 会出现如下错误提示 (0) : error G0036 : matrices are not conformable 所以 + 实际含义是 如果能够 运行矩阵加法 如果不能 请提示错误 类似的规则和解释适用于 - 减法 和 * 乘法 等矩阵运算 5 该小节的写作基于威廉姆 F夏普为其斯坦福大学的金融课程所写的数学运算软件 MATLAB 的入门材料 参见 http:/www.stanford.edu/wfsharpe/ mia/mat/mia_mat3.htm 这里作者感谢夏普教授有益的评论和建议 GAUSS
31、 和 MATLAB都是矩阵编程语言 二者语法上很相像 GAUSS 基础 13赋值语句 与很多程序语言相同 GAUSS 采用表达式形式为变量赋值 变量名放在等号左边 表达式在等号右边 表达式计算的结果赋给变量 在 GAUSS 中 无须宣称就可给变量赋值如果变量在前面已经被赋予了一个值 数字或字符串 则新的值会覆盖原值 如此一来如果 A 和 B 都是 20 30 的矩阵 则语句 C = A + B; 会生成一个名字为 C 的变量 它也是 20 30 的矩阵 其每个元素都是 A 和 B 相应元素的和 如果 C 已经存在并且 比如说是一个 20 15 的矩阵 则它将被新的 20 30 的矩阵代替 所以
32、 GAUSS 中的矩阵变量在规模上并非一成不变 因此 不像其他一些语言 在GAUSS 中无须对变量 事先 或 重新定义维数 此类情形的发生可以不经使用者的任何明显操作 变量名称 GAUSS 环境不区分大小写 除了在双引号当中 变量名用大写 小写或将两者混合使用都没有差别 变量名最长为 32 个字符 可以包括字母 数字和下划线 变量名必须以字母或下划线开头 因此 Personal DisposableIncome 和 personaldisposableincom e是两个相同的变量名 尽管使用较长的变量名容易读 但是小的拼写错误就可能把程序弄糟 拼错了变量名 你可能走运 比如 系统会提示变量没
33、有被定义 也可能背运比如 你会把新值赋给一个新的变量而不是你希望的原来的那个变量 在编程语言中 总是有些权衡 在 GAUSS 中不必事先宣称变量 这减少了很多麻烦 但也增加了有害的和隐蔽的错误潜入程序的几率 . 变量显示 任何时候如果你希望看到变量的内容 只需要输入其名称 尽管在矩阵很大时 显示结果会超出命令或输出窗口 GAUSS 系统会尽量使显示结果更好看 记住你也可以自己调整窗口大小 如果变量 比如说是 X 以前没有被定义也没有被赋值 屏幕上就会出现如下信息 Undefined symbols: x (0) 除非你具体要求显示赋值语句的结果 否则 GAUSS 不会自动显示 因此 如果输入
34、C = A + B; 此时 尽管 C 已经被赋值为 A 与 B 的和 C 的值并不显示出来 但如果输入 C; GAUSS 基础 14或者 等同地输入 尽管 稍嫌罗嗦 print C; GAUSS 就会显示 C 的值 当然 如果 C 是一个 20 30 的矩阵 显示结果会令人生畏 如果对 C 不感兴趣 想看一下 A 加 B 的结果 只要输入 A + B; 也就是说 如果表达式不带赋值符 = 就相当于一个隐含的打印语句 注意 数值显示的方式依据指定的具体格式而定 如果不具体指定 在缺省情况下 GAUSS 对数值的显示为 16 个字段 并精确到小数点后第 7 位 创建 矩阵 如果矩阵很小 可以在命令
35、窗口中直接输入其初始值 例如 a = 3; b = 1 2 3; c = 4, 5, 6; d = 1 2 3, 4 5 6; 这里 a 是纯量 b 是 1 3 的 行向量 c 是 3 1 的 列向量 d 是 2 3 的 矩阵 因此 输入 d; 则输出 : 1.0000000 2.0000000 3.0000000 4.0000000 5.0000000 6.0000000 矩阵的表达方式很简单 同一行数值用空格隔开 不同行用逗号隔开 所有数值被包在大括号中 用常数创 建矩阵的另外一种方法是使用 GAUSS 的内部命令 let 给定维数 就会建立起相应大小的矩阵 下面的语句就创建了一个 2 3
36、 的矩阵 let d2,3 = 1 2 3 4 5 6; 注意 d 的维数表示在方括号而不是大括号中 如果没有给定维数 就会产生一个列向量 GAUSS 基础 15let d = 1 2 3 4 5 6; 如果使用大括号 那么加不加 let 都可以 也就是说 下面的两种表述会产生相同的矩阵 d let d = 1 2 3, 4 5 6; d = 1 2 3, 4 5 6; 由矩阵生成矩阵 创建 矩阵的一般方法可以扩展到矩阵的合并与连接 例如 a = 1 2; b = 3 4; c = ab; print c; 给出的是一个行向量 : 1.0000000 2.0000000 3.0000000 4
37、.0000000 而 a = 1 2 3; b = 4 5 6; d = a|b; print d; 则创建了一个 2*3 的矩阵 1.0000000 2.0000000 3.0000000 4.0000000 5.0000000 6.0000000 这种方式可以很容易地将矩阵 粘 在一起 而且任何阅读程序人理解起来都会觉得简单明了 当然 矩阵的大小必须相互匹配 如果不是 GAUSS 会作出提示 GAUSS 基础 16注意 如果把变量放入大括号中 比如 c = a b; 或 d = a,b; 系统不会运行 并提示出现语法错误 使用矩阵的一部分 我们常常要引用矩阵的一部分 在这方面 GAUSS
38、提供了简单有效 的方法 要引用矩阵的一部分 在矩阵名字后面使用方括号 其中指定要引用的部分 最简单的例子是只想要一个元素 例如 以前面的矩阵 d 为例 d1,2; 等于 2.0000000 而 : d2,1; 等于 4.0000000 每个例子中 括号中第一个表达式代表指定的行 或几行 第二个表达式代表指定的列 或几列 如果矩阵本身就是一个向量 只要给定一个表达式就可以代表要引用的元素 但通常情况下 明确指定行 列信息是比较明智的做法 当引用的 矩阵元素超过一个时 GAUSS 功能的强大之处就会显现出来 用一个圆点放在第一个表达式处 代表 所有的行 放在第二个表达式处 代表 所有的列 这样一来
39、 d1,.; 等于 GAUSS 基础 171.0000000 2.0000000 3.0000000 也就是说 d1,.生成的矩阵包含 d第一行的所有元素 而 d.,2; 等于 2.0000000 5.0000000 即 d.,2生成的矩阵包含 d 第二列的所 有元素 实际上 只要引用的行数或列数有效用这种格式可以使用任何一个表达式 比如 d2,2:3; 等于 5.0000000 6.0000000 而 d2,3:2; 等于 6.0000000 5.0000000 方括号中的表达式也可以是变量 如 z = 2,3; d2,z; 等于 GAUSS 基础 185.0000000 6.0000000
40、 再看一个有用的 例子 d1:2, 2:3; 等于 2.0000000 3.0000000 5.0000000 6.0000000 这个结果与下面的表述产生的结果相同 d.,2:3; 请试运行下面表达式 : d.,1 3; 记住 在引用矩阵时 . 是通配符 因此在引用矩阵 行或列时 可以用来表示 随便什么 元素 字符串 GAUSS 善于处理数字 当然 GAUSS 也可以处理文本 但这不是其核心 一个变量在 GAU SS 中要么是数字型 要么是字符型 字符串与其他变量相似 只是它里边的元素被解读为 ASCII 数字 因此 32 代表空格 65 代表大写字母 A 等等 将一串字符括在双引号中 就建
41、立了一个字符串变量 比 如 stg = “This is a string“; 名为 stg 的变量被赋值为一串字符 this is a string 既然一个字符串变量实际上是一行数字向量 那么就可以通过建立一个字符串的列表来创建一个行或列都是字符串的矩阵 与所有标准矩阵相同 字符串矩阵的每个元素也要求不超过 8 个字符 也就是 32 个字节的 长度 要显示字符串矩阵 变量名称前面必须冠以 $ 符号 比如 x = “ab“, “cd“; print $x; 结果为 ab GAUSS 基础 19cd 而 x = “ab“ “cd“; print $x; 结果为 : ab cd 为了了解在变量名
42、称前加入 $ 符号的重要性 输入 print x; 看看 GAUSS 给出什么结果 矩阵运算与 数组 运算 矩阵运算 指矩阵乘法等 标准运算过程 , 而 数组运算 指元素与元素之间的运算 . 矩阵运算 矩阵转置只须在矩阵名称后加一单引号 ( ) 比如 x = 1 2 3; print x; 运行结果为 : 1.0000000 2.0000000 3.0000000 两个同样大小的矩阵相加 , 使用加 + 号 , 相减则用减 - 号 . 如果要将矩阵 反转则用矩阵的转置 比如 A 是 3 4 矩阵 B 是 4 3 矩阵 则 C = A + B; 运行后系统显示 (0) : error G0036
43、 : matrices are not conformable 而 C = A + B; GAUSS 基础 20will get you a new 3 4 matrix C. 会得到一个 3 4 的矩阵 C GAUSS 中也有一些不同大小的矩阵相加减的情况 如果一个矩阵是纯量 它就会被加到另外一个矩阵的每个元素上 或从另一个矩阵的每个元素上减去 如果一个矩阵是行向量 其大小与另一个矩阵的列数匹配 则该行向量会与后者所有行对应元素相加或相减同样 如果一个是列向量 其大小与另一个矩阵的行数匹配 则列 向量会与另一矩阵所有列对应元素相加或相减 比如 x = 1 2 3; y = 1 2 3, 4
44、5 6, 7 8 9; x + y; 结果为 2.0000000 4.0000000 6.0000000 5.0000000 7.0000000 9.0000000 8.0000000 10.000000 12.000000 而 x + y; 运行结果为 2.0000000 3.0000000 4.0000000 6.0000000 7.0000000 8.0000000 10.000000 11.000000 12.000000 这种情况也正是我们所谓的 数组运算 或者说是我们下面要探讨的 元素间的一致性GAUSS 不对矩阵加法 减法 和数组加法 减法 加以区别 矩阵乘法用星号 * 表示 星
45、号是编程 语言中惯用的乘法算符 矩阵乘法运算遵循线性代数的法则 相乘的两个矩阵的内部维数必须相等 如果不相等 系统会给出提示唯一的例外是当其中一个矩阵是纯量另外一个不是纯量的情况 此时矩阵的每个元素分别与纯量相乘 得到一个与非纯量矩阵大小相同的新矩阵 关于矩阵除法 GAUSS 提供了两个符号 可以迅速求解联立方程组或线性回归问题 对于这一点 我们将在后面讲到相关问题时一并讨论 数组运算 为了表示数组 元素与元素之间 的乘法运算 要在标准运算符后加一个句号 圆点比如 GAUSS 基础 21x = 1 2 3; y = 4 5 6; x.*y; 结果为 4.0000000 10.000000 18
46、.000000 即是两个行向量 x 与 y 之间的 点积 也可以用一个矩阵的元素除以另一个矩阵对应的元素 产生一个同样大小的矩阵 如 C = A ./ B; 上面的例子中 两个运算对象中的一个可以是纯量 或者两个矩阵必须具备 元素间的一致性 将矩阵中的每个元素都取平方 便可以很方便的证明这一点 比如 x = 1 2 3; x.2; 结果为 1.0000000 4.0000000 9.0000000 GAUSS 数组运算包括乘法 .* 除法 ./ 和幂运算 . 由于幂运算显然元素之间的运算 所以符号 . 与符号 的作用相同 数组的加减法在前面讨论过 它们使用与矩阵加减法相同的运算符 + 和 -
47、矩阵的逻辑和关系运算 GAUSS 提供六个关系算符 LT 或 大于 GE 或 = 大于 或 等于 EQ 或 = 等于 NE 或 /= 不等于 GAUSS 基础 22需要注意的是双等号和单等号的区别 A=B 读作 A 等于 B 而 A=B 读作 将 B 的值赋给 A 前者表示逻辑关系 后者是赋值语句 字母与字母之间或字符串与字符串之间进行比较 要在运算符前面加上 $ GAUSS 在遇到关系算符时 如果表达式为 真 就生成 1 假 则生成 0 因此 x = 1 3; print x; 结果为 0.0000000 关系运算符也可以用来进行具备元素间一致性的矩阵之间的比较 如果要比较两个矩阵的元素 关
48、系运算符前要加圆点 . 如果运算符之前不加圆点 . 系统运行结果总是一个纯量 1 真 或 0 假 如果在关系运算符前加了 . 运算就在元素之间进行 结果是一个矩阵 在关系为真的位置元素为 1 否则为 0 例如 A = 1 2, 3 4; A 2; 结果为 0.0000000 这是因为 A 中至少有一个 元素不比 2 大 而 A . 2; 结果为 0.0000000 0.0000000 1.0000000 1.0000000 类似地 , GAUSS 基础 23A = 1 2, 3 4; B = 3 1, 2 2; A B; 结果为 0.0000000 而 A . B; 结果为 0.0000000 1.0000000 1.0000000 1.0000000 你也可以进行逻辑运算 这里我们只顺便列出常用的逻辑运算符 not and or 如果逻辑运算符前加 . 代表在两个矩阵的相应元素间进行逻辑比较 结果是元素为 1 或 0 的矩阵 运算符在矩阵的元素与元素间起作用 并且遵循一般的逻辑原则 把非零元素作为 真 零元素作为 假 加以处理 类似于其他更为平常一些的编程语言 关系运算符和逻辑运算符经常用于 if 语句 在下面介绍 和纯量变量 但 GAUSS 使之用于矩阵运算 为为统计和计量经济学的应 用提供