eviews中的蒙特卡洛模拟程序文件

合集下载

蒙特卡洛模拟的实施步骤

蒙特卡洛模拟的实施步骤

蒙特卡洛模拟的实施步骤简介蒙特卡洛模拟是一种统计模拟方法,通过使用随机数生成器和概率分布函数来模拟和预测随机现象。

这种方法被广泛应用于金融、物理和工程领域,用于解决复杂的问题,如风险评估、资产定价、模拟实验等。

本文将介绍蒙特卡洛模拟的实施步骤,以帮助读者了解和应用这一方法。

步骤一:定义问题在使用蒙特卡洛模拟之前,首先需要明确和定义问题。

清晰地定义问题是蒙特卡洛模拟成功的关键。

问题的定义需要包括目标、变量和约束条件。

目标明确需要解决的问题,例如计算某个金融产品的风险价值或预测某个物理实验的结果。

变量确定与问题相关的变量,这些变量可能是输入和输出变量。

例如,在金融风险评估中,可能需要考虑利率、股票价格等变量。

约束条件定义问题的约束条件,这些条件可能是限制变量的范围或满足一定的条件。

例如,在物理实验中,可能需要考虑材料的物理性质或实验设备的限制。

步骤二:建立模型在蒙特卡洛模拟中,建立模型是非常重要的一步。

模型是通过利用生成的随机数和概率分布函数来模拟随机现象的数学描述。

随机数生成器选择合适的随机数生成器是蒙特卡洛模拟的关键。

随机数生成器需要能够生成服从特定概率分布的随机数。

常用的随机数生成器有伪随机数生成器和真随机数生成器。

概率分布函数根据问题的定义和变量的分布特征,选择合适的概率分布函数。

常用的概率分布函数有均匀分布、正态分布、泊松分布等。

根据变量的不同分布,生成符合相应分布的随机数。

步骤三:生成样本生成样本是蒙特卡洛模拟的核心步骤。

通过使用随机数生成器和概率分布函数,在合理的范围内生成大量的随机样本。

样本的数量越多,模拟结果的准确性越高。

设定样本量根据问题的要求和计算资源的限制,设定样本量。

通常情况下,样本量需要足够大才能保证结果具有可靠性。

生成随机样本使用随机数生成器和概率分布函数,生成符合要求的随机样本。

根据问题的定义和变量的分布特征,逐个生成样本。

步骤四:计算指标在得到符合要求的随机样本之后,需要计算所需的指标。

蒙特卡洛模拟步骤

蒙特卡洛模拟步骤

蒙特卡洛模拟步骤介绍蒙特卡洛模拟是一种基于概率的仿真方法,通过随机抽样和统计分析来解决复杂问题。

它得名于著名赌城蒙特卡洛,因为在蒙特卡洛赌场中使用了类似的概率方法。

蒙特卡洛模拟广泛应用于众多领域,如金融、物理学、工程学等,用于评估风险、预测结果等。

蒙特卡洛模拟步骤步骤一:定义问题在进行蒙特卡洛模拟之前,需要明确所要解决的问题。

问题应该具体明确,包括问题背景、目标和需要考虑的变量。

步骤二:建立模型在蒙特卡洛模拟中,需要建立一个模型来描述问题。

模型可以是数学模型、统计模型或者计算机模型。

模型应该能够描述问题中的各个变量之间的关系。

步骤三:确定参数分布在蒙特卡洛模拟中,需要确定模型中各个参数的概率分布。

参数分布可以根据实际数据来确定,也可以根据经验或专家知识来确定。

常见的参数分布包括正态分布、均匀分布等。

步骤四:生成随机样本蒙特卡洛模拟的核心是生成符合参数分布的随机样本。

可以使用随机数生成器来生成随机样本,确保样本的分布与参数分布一致。

步骤五:运行模拟在蒙特卡洛模拟中,需要运行模拟多次,以获取足够多的样本。

每次运行模拟时,根据随机样本和模型计算得到一个结果。

多次运行模拟的结果可以用于统计分析,得出问题的解。

步骤六:统计分析在蒙特卡洛模拟的最后,需要对多次模拟的结果进行统计分析。

可以计算均值、方差、置信区间等统计指标,以评估模拟结果的可靠性和稳定性。

步骤七:结果解读根据统计分析得到的结果,可以解读问题的答案。

可以得出问题的预测结果、风险评估等。

同时,还可以通过对结果的敏感性分析,评估不同变量对结果的影响。

蒙特卡洛模拟的应用举例例一:投资组合优化在金融领域,蒙特卡洛模拟可以用于投资组合优化。

通过随机生成不同资产的收益率,可以评估不同的投资组合的风险和收益。

通过多次模拟和统计分析,可以找到最佳的投资组合。

例二:工程设计在工程学中,蒙特卡洛模拟可以用于评估工程设计的可靠性。

通过随机生成不同变量的取值,可以模拟工程设计在不同条件下的性能。

monte carlo 模拟方法

monte carlo 模拟方法

monte carlo 模拟方法Monte Carlo模拟方法是一种通过随机抽样和统计分析来解决问题的数值计算方法。

它的名称来源于摩纳哥的蒙特卡洛赌场,因为模拟方法与赌博的不确定性和随机性相似。

在各个领域,Monte Carlo模拟方法被广泛应用于概率论、统计学、物理学、金融学等领域的计算问题中。

Monte Carlo模拟方法的基本思想是通过随机抽样来模拟系统的行为,从而对系统的特性进行估计。

其核心思想是通过大量的随机抽样来近似计算一个问题的解或概率。

与传统的解析方法相比,Monte Carlo模拟方法不需要求解复杂的方程式或模型,而是通过模拟随机事件的发生频率来得出结果。

Monte Carlo模拟方法的步骤主要包括以下几个方面:1. 定义问题:首先需要明确要解决的问题,并将其转化为数学模型或概率模型。

2. 设定输入参数:根据问题的特性,选择合适的参数,并确定它们的概率分布或可能取值范围。

3. 生成随机样本:根据输入参数的概率分布,使用随机数生成器生成一系列随机样本。

4. 模拟系统行为:根据生成的随机样本,模拟系统的行为,并记录感兴趣的结果或变量。

5. 统计分析:对模拟结果进行统计分析,得出问题的解、概率或其他感兴趣的统计量。

6. 改进模型:根据模拟结果,可以对模型进行调整或改进,进一步提高模拟结果的准确性。

Monte Carlo模拟方法的优势在于可以处理各种复杂的问题,尤其是那些无法通过解析方法求解的问题。

它不需要对问题进行简化或做出过多的假设,能够更好地反映实际系统的不确定性和随机性。

此外,Monte Carlo模拟方法还可以提供问题的概率分布、置信区间等信息,帮助决策者做出准确的决策。

Monte Carlo模拟方法的应用十分广泛。

在金融领域,它可以用于估计期权的价格、风险价值等。

在物理学中,它可以用于模拟粒子运动、能量传输等。

在统计学中,它可以用于估计参数的置信区间、假设检验等。

在工程领域,它可以用于分析系统的可靠性、优化设计等。

蒙特卡洛模拟方法

蒙特卡洛模拟方法

蒙特卡洛模拟方法蒙特卡洛模拟方法(Monte Carlo simulation)是一种基于随机过程的数值计算方法,通过生成大量随机数来模拟实际问题的概率分布和确定性结果。

它的原理是通过随机抽样和统计分析来近似计算复杂问题的解,适用于各种领域的问题求解和决策分析。

蒙特卡洛模拟方法最早于20世纪40年代在核能研究中出现,命名源于摩纳哥的蒙特卡洛赌场,因为其运作原理与赌场的概率计算类似。

它的核心思想是通过大量的重复实验来模拟问题的解空间,并基于统计原理对结果进行分析。

蒙特卡洛模拟方法的应用领域广泛,包括金融、工程、物理、统计学、风险管理等。

在金融领域,蒙特卡洛模拟方法可以用于模拟股票价格的变动,估计期权的价格和价值-at-risk(风险价值),帮助投资者进行风险管理和资产配置。

在工程领域,蒙特卡洛模拟方法可以用于模拟不同参数对产品性能的影响,优化产品设计和工艺流程。

在物理学中,蒙特卡洛模拟方法可以用于模拟粒子运动轨迹,研究核反应和量子系统的行为。

在统计学中,蒙特卡洛模拟方法可以用于估计未知参数的分布和进行概率推断。

1.明确问题:首先需要明确问题的目标和约束条件。

例如,如果要求估计一个金融产品的价值,需要明确产品的特征和市场环境。

2.设定模型:根据问题的特性,建立模型。

模型可以是概率模型、物理模型、统计模型等,用于描述问题的随机性和确定性因素。

3. 生成随机数:根据问题的特点,选择适当的随机数生成方法。

常见的随机数生成方法包括伪随机数生成器、蒙特卡洛(Monte Carlo)方法、拉丁超立方(Latin Hypercube)采样等。

4.进行实验:根据模型和随机数生成方法,进行大量的实验。

每次实验都是一次独立的抽样过程,生成一个样本,用于计算问题的目标函数或约束条件。

5.统计分析:对实验结果进行统计分析,得到问题的解或概率分布。

常用的统计分析方法包括均值、方差、最大值、最小值、分位数等。

还可以进行敏感性分析,评估输入参数对结果的影响程度。

蒙特卡洛模拟

蒙特卡洛模拟

蒙特卡洛模拟风险分析是我们制定的每个决策的一部分。

我们一直面对着不确定,不明确和变异。

甚至我们无法获得信息,我们不能准确的预测未来。

蒙特卡洛模拟( Monte Carlo simulation)让您看到了您决策的所有可能的输出,并评估风险,允许在不确定的情况下制定更好的决策。

什么是蒙特卡洛模拟( Monte Carlo simulation)蒙特卡洛模拟( Monte Carlo simulation)是一种计算机数学技术,允许人们在定量分析和决策制定过程中量化风险。

这项技术被专家们用于各种不同的领域,比如财经,项目管理,能源,生产,工程,研究和开发,保险,石油&天然气,物流和环境。

蒙特卡洛模拟( Monte Carlo simulation)提供给了决策制定者大范围的可能输出和任意行动选择将会发生的概率。

它显示了极端的可能性-最的输出,最保守的输出-以及对于中间路线决策的最可能的结果。

这项技术首先被从事原子弹工作的科学家使用;它被命名为蒙特卡洛,摩纳哥有名的娱乐旅游胜地。

它是在二战的时候被传入的,蒙特卡洛模拟( Monte Carlo simulation)现在已经被用于建模各种物理和概念系统。

蒙特卡洛模拟( Monte Carlo simulation)是如何工作的蒙特卡洛模拟( Monte Carlo simulation)通过构建可能结果的模型-通过替换任意存在固有不确定性的因子的一定范围的值(概率分布)-来执行风险分析。

它一次又一次的计算结果,每次使用一个从概率分布获得的不同随机数集。

根据不确定数和为他们制定的范围,蒙特卡洛模拟( Monte Carlo simulation)能够在它完成计算前调用成千上万次的重复计算。

蒙特卡洛模拟( Monte Carlo simulation)产生可能结果输出值的分布。

通过使用概率分布,变量能够拥有不同结果发生的不同概率。

概率分布是一种用来描述风险分析的变量中的不确定性的更加可行的方法。

EVIEWS蒙特卡洛

EVIEWS蒙特卡洛

第四篇 用EIVEWS 做蒙特卡洛实验(Monte Carlo )怎么样用EVIEWS 做蒙特卡洛实验①呢? 本篇将以Gujarati 的《计量经济学》(Basic Econometrics )第三章最后一个习题3.26为例,进行详细的说明。

希望通过做这个实验,我们能够加深对于这方面的理解:最小二乘估计量具有无偏性质。

一、交待一下要做的事情:(一)先来看一下3.26原题(方便一下没有这本书的小朋友):回到表3.2中所列的10个X 值(这10个值分别是:80,100,120,140,160,180,200,220,240,260。

我加注)。

令125β=和20.5β=。

假定(0,9)i u N ,即i u 遵从均值为0、方差为9的正态分布。

用这两个参数值去产生100个样本,求出1β和2β的100个估计值,然后对这些估计值描图。

从这一蒙特卡罗研究中,你能得出什么结论?(当然是无偏性了哈哈,不过描图以后还发现应该是正态分布的)。

(二)蒙特卡洛实验的步骤:Gujarati 在正文3.9已经举例描述过,该实验的步骤如下: 1. 假定参数有如下的真值:120β=、20.6β=。

2. 选定样本大小,比方说25n = 。

3. 每次观测值固定一个X 值,这样共有25个X 值。

4. 从一张随机数表选出25个数值,且称它们为i u (当今的统计包大多含有内在随机数发生器)。

5. 1β,2β和X 和i u 已知,便可利用(3.9.1)得到25个i Y 值。

[(3.9.1)就是:12i i i Y X u ββ=+⋅+]6. 现在利用如此产生的25个i Y 值,对在第3步中所选的25个X 值做回归,求出最小二乘法估计量1β)和2β)。

7. 假使重复这一实验99次,每次都用相同的1β,2β和X 。

当然,i u 在每次实验中都有所变化,因而在总共的100次实验中,就产生1β,2β的各100个值。

8. 取这100个估计值的均值,并称它们为1β)、2β)。

直接蒙特卡洛模拟方法

直接蒙特卡洛模拟方法

直接蒙特卡洛模拟方法蒙特卡洛模拟方法(Monte Carlo simulation)是一种基于概率和统计方法的数值模拟技术,通过随机抽样和概率模型来解决复杂的问题。

它可以模拟各种问题的随机性和不确定性,适用于金融、经济、工程、物理等各种领域。

下面将详细介绍蒙特卡洛模拟的基本原理、步骤和应用。

蒙特卡洛模拟的基本原理是通过随机抽样来模拟一个系统或问题的不确定性。

首先,需要确定一个合适的概率模型,该模型可以以随机变量和概率分布的形式描述系统或问题的不确定性。

然后,通过生成大量的随机数样本,通过计算这些样本的统计特征来近似计算问题的解。

蒙特卡洛模拟的基本步骤如下:1.定义问题:明确需要解决的问题和目标。

2.定义概率模型:建立一个合适的概率模型,用于描述问题的不确定性。

这包括对输入变量和输出变量的概率分布进行建模。

3.生成随机数样本:根据概率模型,生成大量的随机数样本。

这些样本需要符合概率分布的特性。

4.进行模拟计算:使用生成的随机数样本,进行模拟计算。

对每个样本进行计算,并记录计算结果。

5.统计分析:对模拟计算的结果进行统计分析,得到问题的解的近似值。

这可以包括计算均值、方差、分位数等。

6.模型验证与调整:根据模拟计算得到的近似解,与真实的解进行对比,验证模型的准确性。

如果有必要,可以对模型进行调整和改进。

蒙特卡洛模拟方法可以应用于各个领域的问题,下面以金融领域为例进行介绍。

在金融领域,蒙特卡洛模拟方法常常用于风险评估和投资决策。

例如,我们可以使用蒙特卡洛模拟模拟股票价格的随机变动,来评估投资组合的风险和回报。

具体步骤如下:1.定义问题和目标:比如,我们想要评估一个投资组合在未来一年的收益。

2.定义概率模型:通过历史数据,我们可以建立股票价格的概率模型,比如使用几何布朗运动模型描述股票的价格变动。

3.生成随机数样本:根据概率模型,生成大量的随机数样本,模拟未来一年的股票价格变动。

4.进行模拟计算:对每个样本,计算投资组合的收益。

eviews中的蒙特卡洛模拟程序

eviews中的蒙特卡洛模拟程序

eviews中的蒙特卡洛模拟程序模拟程序案例例 1,在做抛掷一枚质地均匀的硬币的试验中发“正面朝上”的事件(用 1 表示)和“正面朝下”的事件 A (用 0 表示)的情况。

历史上一些学者得到的具体试验结果如下:现在需要利用 eviews 来模拟上述三位学者的实验。

算法分析:上述三学者的实验均为二项分布的实验,可以直接利用 eviews 产生二项分布随机数的函数@rbinom (n ,p ). 编程如下:workfile binom u 1 2048 series result for !i=0 to 1 smpl 1 2048 series x x(1)=0for !cou=1 to 2048x(!cou)=@rbinom(!i,0.5) next next x.hist2004006008001,0001,200例 2(投掷骰子)(1)投掷一颗质地均匀的骰子,令 X 表示其出现的点数,分析各点数出现的频率的稳定性及变化规律;(2)利用统计的方法,根据“频率的稳定性”规律求投掷一枚质地不均匀的骰子出现某点数的概率;(3)演示随机变量 X 的数学期望的统计意义。

算法分析:根据逆变换法产生来自分布函数F (x )的随机数,就要求出 F-1(y ),其中 F-1(y )=inf{x :F (x )≥y}.0≤y ≤1.质地均匀的骰子各点数出现的频率的分布函数是 F (x )=p (x ≥x )=(i=1)/6,i-1≤x <i ,i=1,2,…,7 可求得F-1(y )=inf{x:F (x )≥y}.0≤y ≤1=i-1,(i-1)/6≤y <i/6,i=1,…,6因而,可先由产生均匀分布随机数的函数 @runif (0,1)抽取 y 值,再来计算 F-1(y )值即可。

程序实现:workfile binom u 1 1000smpl 1 1000series xseries yseries a1series a2series a3series a4series a5series a6for !i=1 to 1000a1(!i)=1/6a2(!i)=2/6a3(!i)=3/6a4(!i)=4/6a5(!i)=5/6a6(!i)=1x(!i)=@runif(0,1)if x(!i)<a1(!i) then y(!i)=1else if x(!i)>=a1(!i) and x(!i)<a2(!i) then y(!i)=2 else if x(!i)>=a2(!i) and x(!i)<a3(!i) then y(!i)=3 else if x(!i)>=a3(!i) and x(!i)<a4(!i) then y(!i)=4 else if x(!i)>=a4(!i) and x(!i)<a5(!i) then y(!i)=5 else if x(!i)>=a5(!i) and x(!i)<a6(!i) then y(!i)=6 else y(!i)=7endifendifendifendifendifendifnexty.hist40801201602001.通过已知总体模型得到多组样本数据,进行多次回归,验证回归结果的特征、性质 最小二乘法的无偏性workfile mc u 1 10 vector(10) v1v1.fill 80, 100,120,140,160,180,200,220,240,260 mtos(v1,x) !b1=25 !b2=0.5 matrix(100,2) f for !k=1 to 100 series u=3*nrnd series y=!b1+!b2*x+u equation eq.ls y=c(1)+c(2)* x f(!k,1)=c(1) f(!k,2)=c(2) next show fexpand 1 100 smpl 1 100 mtos(f,gr)freeze ser01.qqplot freeze ser01.hist freeze ser02.qqplot freeze ser02.hist matrix(1,2) mm(1,1)=@mean(ser01) m(1,2)=@mean(ser02) show m.46.47.48.49.50.51.52.53.54.55Quantiles of SER02Q u a n t i l e s o f N o r m a lQuantiles of SER01Q u a n t i l e s o f N o r m a l蒙特卡洛模拟程序:(最终调试成功)'store monte carle results in a series 'checked 4/1/2004'set workfile range to number of monte carle replicationswfcreate mcarle u 1 100'create data series for x'note: x is fixed in repeated samples'only first 10 observations are used (remaining 90 obs missing)series xx.fill 80,100,120,140,160,180,200,220,240,260'set true parameter values!beta1=2.5!beta2=0.5'set seed for random number generatorrndseed 123456'assign number of replications to a control variable !reps=100'begin loopfor !I=1 to !reps'set sample to estimation samplesmpl 1 10'simulate y data (only for 10 obs)series y=!beta1+!beta2*x+3*nrnd'regress y on a constant and xEquation eq1.ls y c x'set sample to one observationsmpl !I !i'and store each coefficient estimate in a series series b1=eq1.@coefs(1)series b2=eq1.@coefs(2)next'end of loop'set sample to full samplesmpl 1 100'show kernel density eatimate for each coef freeze(gra1) b1.distplot kernel'drow vertical dashline at true parameter value gra1.draw(dashline,bottom,rgb(156,156,156)) !bet a1show gra1freeze(gra2) b2.distplot kernel'draw vertical dashline at true parameter value gra2.draw(dashline,bottom,rgb(156,156,156)) !bet a2show gra2一元回归参数的分布:Subroutine moni (scalar n, scalar sum, scalar param1, scalar param2, scalar type)For !m=1 to nX(!m)=@rnd*100NextFor !n=1 to sumIf type=0 thenFor !m=1 to nU(!m)=@nrndNextEndifIf type=1 thenFor !m=1 to nIf @rnd<0.5 thenU(!m)=@rndElseU(!m)=@rnd*(-1)EndifNextIf type=2 thenU(1)=@nrndFor !m=2 to nU(!m)=u(!m-1)+@nrndNextEndifIf type=3 thenFor !m=1 to nIf @rnd<0.5 thenU(!m)=@nrndElseU(!m)=@nrnd*2EndifNextEndifFor !m=2 to nY(!m)=param1+param2*x(!m)+u(!m) NextEquation eq.ls y c xB1(!n)=eq.@coefs(1)B2(!n)=eq.@coefs(2)EndsubWorkfile moni u 1 10000 Series b1Series b2Series xSeries ySeries uCall moni(100,10000,20,0.8,3) B1.histB2.hist生成季度虚拟变量的程序:wfcreate dumtest q 1970 1990%start = "1972:1"%end = "1979:4"for !i = @dtoo(%start) to @dtoo(%end) %obsstr = @otod(!i)if (@mid(%obsstr, 5, 1) = ":") then%name = "d_" + @left(%obsstr, 4) + "_" +@mid(%obsstr, 6)else%name = "d_" + %obsstrendifsmpl @allseries {%name} = 0smpl {%obsstr} {%obsstr}series {%name} = 1next下面这个执行不了:!n=10000wfcreate cao u 1 !nmatrix(!n,18) mgroup gfor %1 r0 b0 t0 dw0 r20 f0 r1 b1 t1 dw1 r21 f1 r2 b2 t2 dw2 r22 f2series {%1}=0g.add {%1}nextfor !k=1 to !nsmpl 1 122for %1 y0 x0 y1 x1 y2 x2series {%1}=@rnormnextsmpl 2 122x1=x1(-1)+@rnormy1=y1(-1)+@rnormsmpl 2 122x2=2*x2(-1)-x2(-2)+@rnormy2=2*y2(-1)-y2(-2)+@rnormsmpl 1 122for %1 %2 %3 1 y0 x0 7 y1 x1 13 y2 x2 m(!k,{%1})=@cor({%2},{%3}) equation eq.ls {%2} c {%3}m(!k,{%1}+1)=eq.c(2)m(!k,{%1}+2)=eq.@tstats(2)m(!k,{%1}+3)=eq.@dwm(!k,{%1}+4)=eq.@r2m(!k,{%1}+5)=eq.@fnextnextsmpl 1 !Tmtos(m,g)for %1 t0 t1 t2series cao_{%1}=@abs({%1})>=2freeze(statby_{%1}){%1}.statby(nomean,nostd)cao_{%1}nextfor %1 r0 b0 t0 dw0 r20 f0 r1 b1 t1 dw1 r21 f1 r2 b2 t2 dw2 r22 f2freeze(hist_{%1}) {%1}.histnext伪回归相关系数模拟(不行)workfile corr u 1 500series resultfor !i=1 to 500smpl 1 100series x=nrndseries y=nrndseries xxseries yyscalar sum1=0scalar sum2=0for !counter=1 to 100sum1=sum1+x(!counter) sum2=sum2+y(!counter)xx(!counter)=sum1yy(!counter)=sum2nextnextscalar r=@cor(xx,yy)result(!i)=r时变贝塔系数的模拟(执行不了):' BETA.PRG (3/7/2007)' Time varying beta' demonstrates several ways' to obtain beta between assets' 1) constant beta' 2) rolling beta by regression/moving cov/var ' 3) using state space' 4) using multivariate ARCH' Checked 3/20/2007'change path to program path%path = @runpathcd %path' load workfileload fx.wf1' dependent variables of series must be continuoussmpl @allseries y1 = @pch(index)series y2 = @pch(jy)'------------------------------------------------------------------------' calculate the constant beta using OLS'------------------------------------------------------------------------smpl 1990 @lastequation constant_beta.ls y2 c y1series beta_const=c(2)'------------------------------------------------------------------------' calculating time varying beta with rolling regression' for a bi-variate case can use moving cov/var instead' of OLS regression'------------------------------------------------------------------------!ssize = 200seriesbeta_roll=@movcov(y1,y2,!ssize)/@movvar(y1,!ssi ze)' code for running a rolling regression:' commented out right now'!length = @obs(y1)'equation roll_beta.ls y2 c y1'show roll_beta'for !i = 1 to !length-!ssize+1' smpl @first+!i-1 @first+!i+!ssize-2' equation roll_beta.ls y2 c y1' smpl @first+!i+!ssize-2 @first+!i+!ssize-2' beta_roll = roll_beta.@coefs(2)'next'------------------------------------------------------------------------' calculate beta with State Space' via a time-varying coefficient for Y1'------------------------------------------------------------------------smpl 1990 @lastsspace ssbetassbeta.append y2=c(1)+sv1*y1+[var=exp(c(2))] ssbeta.append @state sv1 = sv1(-1)ssbeta.mlssbeta.makestates beta_*rename beta_sv1 beta_ss'------------------------------------------------------------------------' calculate beta with system ARCH' by estimating the covariance and variance of' the two series using Multivariate ARCH'------------------------------------------------------------------------system arbetaarbeta.append y1 = c(1)arbeta.append y2 = c(2)arbeta.arch @Diagvech c(indef) arch(1,indef) garch(1,indef)arbeta.makegarch(name=arch)series beta_arch = arch01_02/arch01'------------------------------------------------------------------------' display the different betas'------------------------------------------------------------------------group betas_ls_roll beta_const beta_rollgroup betas_roll_ss_arch beta_roll beta_ss beta_archshow betas_ls_roll.lineshow betas_roll_ss_arch.line在生成服从某种分布(标准正态分布白噪声序列)的随机序列的基础上 生成各种ARIMA 序列:AR(1)、MA(1)、ARMA(1,1)、ARIMA(1,1,1)⏹Workfile random2 u 1 1000 ⏹Series u=@nrnd ⏹U(1)=0 ⏹Series x1 ⏹X1(1)=0 ⏹Series x2 ⏹X2(1)=0 ⏹Series x3 ⏹X3(1)=0 ⏹Series x4 ⏹X4(1)=0 ⏹Smpl 2 1000 ⏹x1=0.8*x1(-1)+u ⏹X2=u+0.8*u(-1) ⏹X3=0.8*x3(-1)+u+0.8*u(-1) ⏹X4=x4(-1)+x3 ⏹Smpl @all ⏹group my x1 x2 x3 ⏹show my.line-8-44812⏹workfile simu u 1 1000 ⏹series x1=@runif(0,1) ⏹series x2=@runif(0,1) ⏹series x3=@runif(0,1) ⏹group g x1 x2 x3 ⏹g.line ⏹g.bar ⏹scat x1 x2 ⏹sort x1 ⏹genr y=10+2*x1 ⏹y.line ⏹freeze y ⏹y.hist ⏹scalar yy=@mean(y) ⏹scalar yy1=@skew(y) ⏹ scalar yy3=@kurt(y) 0.00.20.40.60.81.0X1X 2。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模拟程序案例例 1,在做抛掷一枚质地均匀的硬币的试验中发“正面朝上”的事件(用 1 表示)和“正面朝下”的事件 A (用 0 表示)的情况。

历史上一些学者得到的具体试验结果如下:现在需要利用 eviews 来模拟上述三位学者的实验。

算法分析:上述三学者的实验均为二项分布的实验,可以直接利用 eviews 产生二项分布随机数的函数rbinom (n ,p ). 编程如下:workfile binom u 1 2048 series result for !i=0 to 1 smpl 1 2048 series x x(1)=0for !cou=1 to 2048 x(!cou)=rbinom(!i,0.5) next next x.hist2004006008001,0001,200例 2(投掷骰子)(1)投掷一颗质地均匀的骰子,令 X 表示其出现的点数,分析各点数出现的频率的稳定性及变化规律;(2)利用统计的方法,根据“频率的稳定性”规律求投掷一枚质地不均匀的骰子出现某点数的概率;(3)演示随机变量 X 的数学期望的统计意义。

算法分析:根据逆变换法产生来自分布函数F (x )的随机数,就要求出 F-1(y ),其中 F-1(y )=inf{x :F (x )≥y}.0≤y ≤1.质地均匀的骰子各点数出现的频率的分布函数是 F (x )=p (x ≥x )=(i=1)/6,i-1≤x <i ,i=1,2,…,7 可求得F-1(y )=inf{x:F (x )≥y}.0≤y ≤1=i-1,(i-1)/6≤y <i/6,i=1,…,6因而,可先由产生均匀分布随机数的函数 runif (0,1)抽取 y 值,再来计算 F-1(y )值即可。

程序实现:workfile binom u 1 1000smpl 1 1000series xseries yseries a1series a2series a3series a4series a5series a6for !i=1 to 1000a1(!i)=1/6a2(!i)=2/6a3(!i)=3/6a4(!i)=4/6a5(!i)=5/6a6(!i)=1x(!i)=runif(0,1)if x(!i)<a1(!i) then y(!i)=1else if x(!i)>=a1(!i) and x(!i)<a2(!i) then y(!i)=2 else if x(!i)>=a2(!i) and x(!i)<a3(!i) then y(!i)=3 else if x(!i)>=a3(!i) and x(!i)<a4(!i) then y(!i)=4 else if x(!i)>=a4(!i) and x(!i)<a5(!i) then y(!i)=5 else if x(!i)>=a5(!i) and x(!i)<a6(!i) then y(!i)=6 else y(!i)=7endifendifendifendifendifendifnexty.hist40801201602001.通过已知总体模型得到多组样本数据,进行多次回归,验证回归结果的特征、性质 最小二乘法的无偏性workfile mc u 1 10 vector(10) v1v1.fill 80, 100,120,140,160,180,200,220,240,260 mtos(v1,x) !b1=25 !b2=0.5matrix(100,2) f for !k=1 to 100 series u=3*nrndseries y=!b1+!b2*x+uequation eq.ls y=c(1)+c(2)* x f(!k,1)=c(1) f(!k,2)=c(2) next show fexpand 1 100 smpl 1 100 mtos(f,gr)freeze ser01.qqplot freeze ser01.hist freeze ser02.qqplot freeze ser02.hist matrix(1,2) mm(1,1)=mean(ser01) m(1,2)=mean(ser02) show m.46.47.48.49.50.51.52.53.54.55Quantiles of SER02Q u a n t i l e s o f N o r m a lQuantiles of SER01Q u a n t i l e s o f N o r m a l蒙特卡洛模拟程序:(最终调试成功)'store monte carle results in a series 'checked 4/1/2004'set workfile range to number of monte carle replications wfcreate mcarle u 1 100 'create data series for x'note: x is fixed in repeated samples'only first 10 observations are used (remaining 90 obs missing) series xx.fill 80,100,120,140,160,180,200,220,240,260 'set true parameter values !beta1=2.5 !beta2=0.5'set seed for random number generator rndseed 123456'assign number of replications to a control variable !reps=100 'begin loop for !I=1 to !reps'set sample to estimation sample smpl 1 10'simulate y data (only for 10 obs) series y=!beta1+!beta2*x+3*nrnd 'regress y on a constant and x Equation eq1.ls y c x'set sample to one observation smpl !I !i'and store each coefficient estimate in a seriesseries b1=eq1.coefs(1)series b2=eq1.coefs(2)next'end of loop'set sample to full samplesmpl 1 100'show kernel density eatimate for each coeffreeze(gra1) b1.distplot kernel'drow vertical dashline at true parameter valuegra1.draw(dashline,bottom,rgb(156,156,156)) !beta1show gra1freeze(gra2) b2.distplot kernel'draw vertical dashline at true parameter valuegra2.draw(dashline,bottom,rgb(156,156,156)) !beta2show gra2一元回归参数的分布:Subroutine moni (scalar n, scalar sum, scalar param1, scalar param2, scalar type) For !m=1 to nX(!m)=rnd*100NextFor !n=1 to sumIf type=0 thenFor !m=1 to nU(!m)=nrndNextEndifIf type=1 thenFor !m=1 to nIf rnd<0.5 thenU(!m)=rndElseU(!m)=rnd*(-1)EndifNextEndifIf type=2 thenU(1)=nrndFor !m=2 to nU(!m)=u(!m-1)+nrndNextEndifIf type=3 thenFor !m=1 to nIf rnd<0.5 thenU(!m)=nrndElseU(!m)=nrnd*2EndifNextEndifFor !m=2 to nY(!m)=param1+param2*x(!m)+u(!m) NextEquation eq.ls y c xB1(!n)=eq.coefs(1)B2(!n)=eq.coefs(2)NextEndsubWorkfile moni u 1 10000Series b1Series b2Series xSeries ySeries uCall moni(100,10000,20,0.8,3)B1.histB2.hist生成季度虚拟变量的程序:wfcreate dumtest q 1970 1990%start = "1972:1"%end = "1979:4"for !i = dtoo(%start) to dtoo(%end)%obsstr = otod(!i)if (mid(%obsstr, 5, 1) = ":") then%name = "d_" + left(%obsstr, 4) + "_" + mid(%obsstr, 6) else%name = "d_" + %obsstrendifsmpl allseries {%name} = 0smpl {%obsstr} {%obsstr}series {%name} = 1next下面这个执行不了:!n=10000wfcreate cao u 1 !nmatrix(!n,18) mgroup gfor %1 r0 b0 t0 dw0 r20 f0 r1 b1 t1 dw1 r21 f1 r2 b2 t2 dw2 r22 f2 series {%1}=0g.add {%1}nextfor !k=1 to !nsmpl 1 122for %1 y0 x0 y1 x1 y2 x2series {%1}=rnormnextsmpl 2 122x1=x1(-1)+rnormy1=y1(-1)+rnormsmpl 2 122x2=2*x2(-1)-x2(-2)+rnormy2=2*y2(-1)-y2(-2)+rnormsmpl 1 122for %1 %2 %3 1 y0 x0 7 y1 x1 13 y2 x2m(!k,{%1})=cor({%2},{%3})equation eq.ls {%2} c {%3}m(!k,{%1}+1)=eq.c(2)m(!k,{%1}+2)=eq.tstats(2)m(!k,{%1}+3)=eq.dwm(!k,{%1}+4)=eq.r2m(!k,{%1}+5)=eq.fnextnextsmpl 1 !Tmtos(m,g)for %1 t0 t1 t2series cao_{%1}=abs({%1})>=2freeze(statby_{%1}) {%1}.statby(nomean,nostd)cao_{%1}nextfor %1 r0 b0 t0 dw0 r20 f0 r1 b1 t1 dw1 r21 f1 r2 b2 t2 dw2 r22 f2 freeze(hist_{%1}) {%1}.histnext伪回归相关系数模拟(不行)workfile corr u 1 500series resultfor !i=1 to 500smpl 1 100series x=nrndseries y=nrndseries xxseries yyscalar sum1=0scalar sum2=0for !counter=1 to 100sum1=sum1+x(!counter)sum2=sum2+y(!counter)xx(!counter)=sum1yy(!counter)=sum2nextnextscalar r=cor(xx,yy)result(!i)=r时变贝塔系数的模拟(执行不了):' BETA.PRG (3/7/2007)' Time varying beta' demonstrates several ways' to obtain beta between assets' 1) constant beta' 2) rolling beta by regression/moving cov/var' 3) using state space' 4) using multivariate ARCH' Checked 3/20/2007'change path to program path%path = runpathcd %path' load workfileload fx.wf1' dependent variables of series must be continuous smpl allseries y1 = pch(index)series y2 = pch(jy)'------------------------------------------------------------------------' calculate the constant beta using OLS'------------------------------------------------------------------------smpl 1990 lastequation constant_beta.ls y2 c y1series beta_const=c(2)'------------------------------------------------------------------------' calculating time varying beta with rolling regression' for a bi-variate case can use moving cov/var instead ' of OLS regression'------------------------------------------------------------------------!ssize = 200series beta_roll=movcov(y1,y2,!ssize)/movvar(y1,!ssize) ' code for running a rolling regression:' commented out right now'!length = obs(y1)'equation roll_beta.ls y2 c y1'show roll_beta'for !i = 1 to !length-!ssize+1' smpl first+!i-1 first+!i+!ssize-2' equation roll_beta.ls y2 c y1' smpl first+!i+!ssize-2 first+!i+!ssize-2' beta_roll = roll_beta.coefs(2)'next'------------------------------------------------------------------------' calculate beta with State Space' via a time-varying coefficient for Y1'------------------------------------------------------------------------smpl 1990 lastsspace ssbetassbeta.append y2=c(1)+sv1*y1+[var=exp(c(2))] ssbeta.append state sv1 = sv1(-1)ssbeta.mlssbeta.makestates beta_*rename beta_sv1 beta_ss'------------------------------------------------------------------------' calculate beta with system ARCH' by estimating the covariance and variance of' the two series using Multivariate ARCH'------------------------------------------------------------------------system arbetaarbeta.append y1 = c(1)arbeta.append y2 = c(2)arbeta.arch Diagvech c(indef) arch(1,indef) garch(1,indef)arbeta.makegarch(name=arch)series beta_arch = arch01_02/arch01'------------------------------------------------------------------------' display the different betas'------------------------------------------------------------------------group betas_ls_roll beta_const beta_rollgroup betas_roll_ss_arch beta_roll beta_ss beta_archshow betas_ls_roll.lineshow betas_roll_ss_arch.line在生成服从某种分布(标准正态分布白噪声序列)的随机序列的基础上生成各种ARIMA序列:AR(1)、MA(1)、ARMA(1,1)、ARIMA(1,1,1)⏹Workfile random2 u 1 1000⏹Series u=nrnd⏹U(1)=0⏹Series x1⏹X1(1)=0⏹Series x2⏹X2(1)=0⏹Series x3⏹X3(1)=0⏹Series x4⏹X4(1)=0⏹Smpl 2 1000⏹x1=0.8*x1(-1)+u⏹X2=u+0.8*u(-1)⏹X3=0.8*x3(-1)+u+0.8*u(-1)⏹X4=x4(-1)+x3⏹Smpl all⏹ group my x1 x2 x3 ⏹ show my.line -8-44812⏹workfile simu u 1 1000 ⏹series x1=runif(0,1) ⏹series x2=runif(0,1) ⏹series x3=runif(0,1) ⏹group g x1 x2 x3 ⏹g.line ⏹g.bar ⏹scat x1 x2 ⏹sort x1 ⏹genr y=10+2*x1 ⏹y.line ⏹freeze y ⏹y.hist ⏹scalar yy=mean(y) ⏹scalar yy1=skew(y) ⏹ scalar yy3=kurt(y)0.00.20.40.60.81.0X1X 2。

相关文档
最新文档