问题

数理背景不强,如何有效的自学科学计算(计算经济学)?

回答
你提到“数理背景不强”,但想自学“科学计算(计算经济学)”,这其实是一个很有挑战但完全可以实现的学习路径。很多人一开始都不是数学或计算机的“天才”,但通过系统的方法和坚持,一样能在这些领域取得不错的成绩。关键在于找到适合你的节奏和方法。

我尽量详细地和你聊聊怎么一步步来,让你觉得这是一个人在分享经验,而不是冷冰冰的指导。

首先,我们得明确一下“计算经济学”到底是什么鬼?

简单来说,计算经济学就是用计算方法来研究经济学问题。以前我们研究经济,可能更多的是理论推导,画图,或者用一些简化的模型。但现在,经济系统越来越复杂,数据也越来越多,我们没办法靠脑子或笔头完全搞明白。所以,计算经济学就应运而生了,它用电脑来模拟、分析和解决这些复杂问题。

比如:

模拟市场行为: 很多经济学家会写程序来模拟成千上万的个体(比如消费者、公司)在市场中的互动,看看最后会形成什么样的结果。这比简单的数学模型要真实得多。
预测经济走势: 利用大量的经济数据,通过机器学习、大数据分析等方法来预测未来的经济增长、通货膨胀等等。
政策评估: 模拟某个经济政策(比如加税、减息)会对经济产生什么影响,从而帮助决策者做出更好的选择。
金融建模: 风险管理、资产定价、投资策略等等,很多都离不开复杂的计算。

那么,数理背景不强怎么办?是不是就没戏了?

完全不是!“数理背景不强”可以理解为你目前对高等数学、线性代数、概率统计等知识掌握得还不够扎实,或者觉得它们枯燥难懂。这很正常,很多人都是这样过来的。但好消息是,在学习计算经济学时,很多数学知识是在应用中学习的,也就是说,你会在解决具体问题的过程中,慢慢理解和掌握它们。你不需要一开始就去啃一本厚厚的《高等数学全集》。

我的建议是,循序渐进,把学习过程拆分成几个阶段,并且保持耐心和持续的输出(也就是去“做”)。



第一步:打好基础——从编程入手,而不是数学

你可能觉得奇怪,为什么不先学数学?因为对于计算经济学来说,编程是你的工具,是你把经济学思想变成现实的桥梁。数学是你的“语言”,但如果你连笔都不会用,光知道有很多漂亮的词汇有什么用?而且,很多编程语言自带的库(比如Python的NumPy, SciPy)已经封装了很多数学运算,你不需要自己去实现。

推荐语言:Python

为什么是Python?
语法简洁易懂: 相对于C++、Java,Python的语法更接近英语,容易上手,学习曲线比较平缓。
科学计算生态强大: Python拥有非常强大的第三方库,专门用于科学计算、数据分析和机器学习,比如:
NumPy: 提供了高效的多维数组对象和数学函数,是进行数值计算的基础。
SciPy: 构建在NumPy之上,提供了更多高级的科学计算工具,比如优化、积分、插值、信号处理、线性代数等等。
Pandas: 数据处理和分析的利器,处理表格型数据(类似Excel)非常方便。
Matplotlib/Seaborn: 用于数据可视化,画图非常直观,是理解数据和结果的关键。
Statsmodels: 提供了很多统计模型,包括回归分析等。
Scikitlearn: 非常流行的机器学习库,后面你可能会用到。
社区活跃: 遇到问题,很容易在网上找到答案和帮助。
应用广泛: 不仅限于经济学,在数据科学、人工智能、Web开发等领域都非常流行。

如何学习Python?

1. 找一个好的在线课程或教程:
Codecademy: 提供交互式的Python入门课程。
Coursera/edX: 上面有很多知名大学(如MIT, Stanford)提供的Python课程,有些是免费的( audit模式)。推荐搜索“Python for Everybody” (密歇根大学),这个系列非常适合初学者。
廖雪峰的Python教程: 如果你习惯看中文文档,这个教程非常详细和系统。
官方文档和书籍: 等你入门后,可以参考Python官方文档,或者一些入门书籍。

2. 动手实践,敲代码!
不要只看不练! 教程里讲到的每一个例子,都要自己动手敲一遍,理解每行代码的作用。
做小练习: 完成教程中的练习题。如果没练习题,就自己想一些简单的问题来解决,比如:
写一个程序计算一个数列的和。
写一个程序判断一个数是奇数还是偶数。
写一个程序找出列表中的最大值。
遇到bug不要怕: 这是学习过程中最正常不过的事情了。学会看报错信息,尝试理解它在说什么,然后去搜索解决办法。

重要提示: 在这个阶段,你不需要成为Python编程大师。目标是能够熟练地编写简单的脚本,使用基本的数据结构(列表、字典),理解函数和控制流(if/else, for/while循环),并开始接触NumPy和Pandas来处理数据。



第二步:同步数学基础——应用驱动,而非理论灌输

在学习Python的过程中,你会遇到一些需要数学概念的地方。这时,你再有针对性地去学习这些数学知识会更容易理解。我们不是要成为数学家,而是要成为一个“会用数学解决问题的经济学家”。

你需要重点关注的数学领域(与计算经济学强相关的):

1. 线性代数(Linear Algebra):
为什么重要? 经济模型很多都可以用矩阵来表示,比如投入产出模型、计量经济学中的回归分析等。线性代数帮你理解向量、矩阵运算,以及如何高效地处理大量数据。
学习什么? 向量、矩阵、矩阵加减乘法、矩阵转置、行列式、矩阵的逆、线性方程组(Ax=b)、特征值和特征向量。
如何学?
视频教程: Khan Academy (可汗学院) 的线性代数课程非常棒,讲解清晰易懂。3Blue1Brown的《线性代数的本质》系列视频用可视化方式解释概念,超级推荐!
配合Python实践: 在NumPy中练习矩阵乘法、求逆、解线性方程组等操作。比如,用`np.dot()`进行矩阵乘法,`np.linalg.solve()`解线性方程组。这会让你立刻看到数学的实际应用。
阅读相关经济学教材的附录或章节: 一些经济学教材(尤其是计量经济学)会有专门的数学附录或章节,介绍必要的数学工具,并且会有结合经济学例子的讲解。

2. 微积分(Calculus):
为什么重要? 经济学中充满了优化问题(最大化利润、最小化成本),这都离不开导数和积分。比如,如何找到函数的最大值或最小值。
学习什么? 导数(理解其含义,求导法则)、偏导数(处理多个变量的情况)、链式法则、积分(理解其含义,基本积分公式)、多元函数优化(找到极值点,拉格朗日乘子法——这个可能稍微进阶一点,但理解概念很重要)。
如何学?
视频教程: Khan Academy 的微积分课程。3Blue1Brown的《微积分的本质》系列视频也非常有助于理解概念。
配合Python实践: SciPy库提供了数值积分和求导的功能。你可以用它来计算复杂函数的积分或导数。更重要的是,一些优化算法(比如梯度下降法)本质上就是利用导数来寻找最优解。

3. 概率论与数理统计(Probability and Statistics):
为什么重要? 经济数据往往包含随机性,经济现象也经常用概率模型来描述。统计学是处理和分析这些数据的核心工具。
学习什么? 概率的基本概念、随机变量、概率分布(离散和连续)、期望、方差、中心极限定理、统计推断(估计、假设检验)、回归分析的基本概念(最小二乘法)。
如何学?
视频教程: Khan Academy 的概率与统计课程。
阅读经济学教材中的计量经济学章节: 这是将统计学与经济学结合起来学习的最佳途径。理解什么是回归分析,如何解释回归系数,Rsquared的含义。
Python实践: 使用Pandas处理数据,NumPy进行数值计算,Matplotlib/Seaborn可视化数据分布和关系。Statsmodels库可以帮你做简单的回归分析。你可以尝试用收集到的真实经济数据(比如GDP、通胀率)来做一些描述性统计分析和简单的回归。

学习策略:

目标导向: 在学习数学时,始终想着它能帮你解决什么经济学问题。比如,学习导数是为了理解“边际效应”。学习矩阵是为了处理“投入产出表”。
先理解概念,再学计算: 不要死记硬背公式。尝试去理解每个数学概念的几何意义或经济学意义。
Python是你的计算器和实验台: 利用Python来验证你的数学理解。计算一个函数在某点的导数,或者模拟一个简单的概率分布。



第三步:结合经济学理论,开始实践计算经济学

当你对Python有初步了解,并对一些基础数学概念有所认识后,就可以开始真正将它们应用到经济学问题上了。

方向选择(刚开始可以先选一个方向深入):

计量经济学 (Econometrics): 这是很多计算经济学研究的基础,它教你如何用统计方法来量化经济关系,检验经济理论。
宏观经济模拟 (Macroeconomic Modeling/Simulation): 建立经济模型来模拟经济的运行,比如ISLM模型、DSGE模型等(这些模型会用到微分方程、动态规划等,后期可以深入)。
微观经济模拟/计算社会科学 (AgentBased Modeling / Computational Social Science): 模拟大量“智能体”(Agent)的个体行为,以及它们之间的互动如何涌现出宏观现象。这非常适合“数理背景不强”但对复杂系统感兴趣的人。
金融计量/计算金融 (Financial Econometrics / Computational Finance): 应用统计和计算方法分析金融市场。

学习方法:

1. 阅读经典教材(选择适合你的):
计量经济学:
《计量经济学导论:现代观点》(Wooldridge) 是一本非常经典的教材,虽然内容不少,但讲解很清晰,并且很多例子都用了STATA或R的命令,你可以尝试把它翻译成Python。
《应用计量经济学:使用R和Python》(Dietary, F. & LopezdeSilanes, F.) 这本书直接使用Python和R来讲解计量经济学,非常适合你。
计算经济学/AgentBased Modeling:
《AgentBased and IndividualBased Modeling: A Practical Introduction》 by Steven F. Railsback and Eric Higgs:偏向于建模思想和方法,非常易懂。
《经济学中的计算方法》(Computational Methods in Economics) by H. Scott Gordon:讲解了一些基础的计算方法在经济学中的应用。
《计算经济学导论》(Introduction to Computational Economics) by Leonard W.G. Stroomer:更偏向模型和理论的计算实现。

2. 找开源代码和项目:
GitHub是你的宝库。搜索“computational economics python”、“agent based model python”、“econometrics python”等关键词,你会找到很多开源项目和代码示例。
尝试理解这些代码是如何实现的,它们使用了哪些经济学模型和数学工具。

3. 做小项目,边学边用:
从简单项目开始:
复现经济学教材中的例子: 很多教材都会有数据和简单的模型,尝试用Python和NumPy/Pandas/Statsmodels去复现它们。比如,做一个简单的线性回归分析。
模拟简单的市场: 创建几个“买家”和“卖家”的智能体,让他们根据简单的规则进行交易,看看市场价格会如何波动。
可视化经济数据: 下载一些公开的经济数据(比如世界银行、IMF、中国国家统计局网站),用Matplotlib/Seaborn画出趋势图、散点图,进行初步的探索性数据分析。
循序渐进地增加复杂度: 当你掌握了基础后,可以尝试更复杂的模型,比如一个简单的动态随机一般均衡(DSGE)模型(需要接触数值方法求解微分方程),或者一个稍微复杂点的AgentBased Model。

4. 参与在线社区或论坛:
Stack Overflow:解决编程和技术问题的地方。
经济学相关的Subreddits(如r/economics, r/econometrics, r/computable_economics):可以提问、交流和学习。
一些数据科学或经济学爱好者建立的QQ群或微信群(如果能找到的话)。



一些心态和方法的建议:

耐心和毅力是关键: 学习一个新领域,尤其是计算经济学,需要时间和努力。不要因为遇到困难就轻易放弃。把它当作一个马拉松,而不是短跑。
享受过程,找到乐趣: 尝试将学习过程变得有趣。比如,用代码模拟一个你关心的经济现象,或者可视化你最感兴趣的经济数据。当你在“玩”的时候,学习会更高效。
不要害怕犯错: 错误是学习过程中最好的老师。每次解决一个bug,你都会学到更多。
建立学习习惯: 每天或每周固定投入一定的时间来学习和练习。即使每天只有半小时,坚持下去也会有很大的收获。
多交流,多提问: 不要孤军奋战。遇到问题大胆地去问,即使你觉得问题很“傻”。很多人都经历过这个阶段。
循序渐进,不要贪多求全: 不要试图一次性掌握所有东西。先打好编程基础,再同步学习相关数学,最后结合经济学理论实践。每个阶段有自己的重点。
关注“为什么”,而不仅仅是“怎么做”: 理解经济学模型背后的逻辑,以及为什么需要用到某种数学工具或编程方法,会让你学得更深入。

举个例子,如何学习“回归分析”:

1. 经济学理论: 在经济学教材里了解“回归分析”的作用,比如解释消费如何随收入变化,或者通胀如何随货币供应量变化。理解“相关性不等于因果性”等概念。
2. 数学基础: 回顾一下线性代数中的线性方程组(Ax=b),以及最小二乘法背后的思想(如何找到一条直线,使得所有数据点到这条直线的竖直距离的平方和最小)。
3. Python编程:
用NumPy实现简单的线性回归(自己写求解最小二乘法的公式)。
用Pandas读取CSV格式的数据集(比如美国劳工统计局的数据)。
用Statsmodels库来做回归分析,并学习如何解读输出结果(系数、p值、Rsquared)。
用Matplotlib或Seaborn画出数据散点图和回归拟合线。

通过这样一个具体的小项目,你就在实践中同时掌握了经济学概念、数学方法和Python工具的使用。



总结一下你的自学路径可能就像这样:

1. 零基础 → Python入门: 学习Python基础语法、数据结构、函数。
2. Python入门 → NumPy & Pandas进阶: 学会用它们处理和分析数据。
3. 边学Python边补数学: 学习与计算经济学强相关的线性代数、微积分、概率统计基础,并在Python中实践。
4. 结合经济学理论: 阅读计量经济学教材,理解模型和方法。
5. 动手实践: 从复现教材例子开始,做小项目,解决具体经济学问题。

这个过程可能需要几个月到一年甚至更长的时间,取决于你的投入程度和学习效率。但请相信,只要方法得当,并且持之以恒,你一定能在这个领域有所斩获。计算经济学是一个充满趣味和实用价值的领域,祝你学习愉快!

网友意见

user avatar

看到这是三年前的问题,想必题主已经解决。最近在学这方面的东西,说说自己的浅见。跟作者背景相同,宏观方向,本硕金融,数理背景不强,除了平时做DSGE用到dynare之外,还需要其他的一些数值工具。但我通过寻找资料发现,需要学的数值方法并不太多,主要有以下几种:


  • Log-linear approximation
  • Perturbation Methods
  • Projection Methods
  • Value function Iteration (Iteration methods)


虽然也会有Parameterized expectations和Minimum Weighted Residual Methods等方法,但可能是适用面相对狭窄,不如上面的几种常见。针对上面的一些计算方法,我找到了一些资料(根据题主的要求,我尽量提供用matlab编写的程序):


  1. Log-linear approximation 这种方法最为常用,dynare做的也很成熟。但如果题主想追根究底,Blanchard and Kahn (1980), Uhlig (1999), Sims (2000), Klein (2000) 都是一手的论文。Uhlig有专门的matlab语言程序包,Klein的网站上也有用matlab编写的求解linear/quadratic difference equations的程序
  2. Perturbation Methods 里面的比较成熟的研究主要是:Uribe and Schmitt-Grohe (2004)这篇文章非常好读也比较经典,更良心的是,可以在作者的主页找到相应的matlab程序包(一阶和二阶),程序注释很全,非常平易近人。除此之外还有两个人不可忽视,一个是Fabrice Collard,另一个是Jesús Fernández-Villaverde,这一点将在后面说明。
  3. Projection Methods,我对这一方法不太熟悉。但Jesús Fernández-Villaverde以及Heer and Maußner (2009) 和 DeJong and Dave (2011) 中都有所涉猎,详细将在后文说明。
  4. Value function Iteration,在这里强烈推荐Fabrice Collard的notes,用57页详细讲解了动态规划,从确定性到随机,从值函数迭代到政策函数迭代,还有插值等改进求解的方法,甚至连如何simulation和处理constraints都手把手教给你。最关键的是,所有方法都带有相应的matlab程序,你说良不良心!!!如果没有时间直接读SLP,参考Nicola Pavoni的Lecture notes补充一些理论基础,Pavoni用一章讲了DP用到的数学基础,比SLP要全很多(Pavoni是经济学也是数学博士,应该是比较靠谱的)。

上面主要是针对具体的方法写的一些paper以及code,当然还有textbooks将这些内容结合起来:

  1. Judd的Numerical Methods in Economics,我看到在问题的评论里有人提到这本书,在我不知道如何入门这一领域的时候,一个教授也向我建议过此书,不过正如题主所说,这本书唯一的问题就是没有code(可能有,但作者的网站一直说他的archive遭到了破坏,一些code丢失了-_-),所以在描述具体操作的时候,可能就过于抽象,难以理解。不过这本书的地位难以撼动,理论翔实,作者也是computational的大牛。
  2. Miranda and Fackler的Applied Computational Economics and Finance,这本书有一个开挂级别的matlab程序包compecon,在作者Fackler的网站上可以找到,关于这个程序包的威力,知乎有人介绍过。对于这本书,大概可以看作这个package的manual?貌似没有太多的理论部分。
  3. Marimon and Scott的Computational Methods for the Study of Dynamic Economies,这本书是一个论文集(Sargent为此书作序),主要包含了线性和非线性方法,Uhlig (1999) 就收录其中,这本书很好的一点是,在每一章的末尾,作者都会给出相应的程序说明(类似于README),想必在作者的网站可以找到相应的代码。
  4. Heer and Maußner的Dynamic General Equilibrium Modelling, Computational Methods and Applications。这本书之前被我忽视掉了,一开始没有了解数值方法的时候在想这本书到底在讲些什么!但后来了解到数值计算之后才发现这本书简直良心,作者简直是手把手教你怎么应用里面的方法(一些numerical方面的优化和改进),并且有很多作者的私货,可以说是干货满满。但是,但是,唯一有点可惜的是,这本书的主力语言是Gauss和Fortran,但作者“辩解”说Gauss很像matlab的,你可以很容易移植。(手动白眼)
  5. DeJong and Dave的 Structural Macroeconomics,这本书第二版的4,5章包含了我一开始列出的方法,如果没有时间的话,可以读着一部分当作intro,作者貌似提供了Gauss的代码。


除了Textbook之外,也有一些大牛的notes值得参考:

  1. Jesús Fernández-Villaverde在其网站上公布了讲课的ppt,比如,他与大佬Christiano在NBER开过一个mini course,主要讲Computational Tools and Macroeconomic Applications。给力的一点是,NBER的网站上可以找到他们的讲课视频!!简直要哭了好嘛,能见到动态版的大佬,还是给我们讲Computational Tools,不过有点纠结的是Fernández-Villaverde的Spain式英语实在是折磨听力,Christiano大佬的则十分清晰。
  2. Fabrice Collard在前面提过,可以说是良心大佬了,他在自己的官网上用notes的形式讲解了一系列非线性方法,并且还包含了Numerical differentiation and integration等作者需要的东西以及bisection和newton等常见的非线性求解方法。并且,作者竟然在每个notes后面附上了matlab的code,反正我是第一次见notes后面带code。可以说是良心大大的好(已经词穷….)。

以上是我暂时想到的,有新的内容再补充。转载请注明出处。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有