eviews中的蒙特卡洛模拟程序.docx
《eviews中的蒙特卡洛模拟程序.docx》由会员分享,可在线阅读,更多相关《eviews中的蒙特卡洛模拟程序.docx(15页珍藏版)》请在冰豆网上搜索。
![eviews中的蒙特卡洛模拟程序.docx](https://file1.bdocx.com/fileroot1/2022-10/12/ed48ad73-dcc7-4562-93cd-f6cbfb2ca3bd/ed48ad73-dcc7-4562-93cd-f6cbfb2ca3bd1.gif)
eviews中的蒙特卡洛模拟程序
模拟程序案例
例1,在做抛掷一枚质地均匀的硬币的试验中发“正面朝上”的事件(用1表示)和“正面朝下”的事件A(用0表示)的情况。
历史上一些学者得到的具体试验结果如下:
现在需要利用eviews来模拟上述三位学者的实验。
算法分析:
上述三学者的实验均为二项分布的实验,可以直接利用eviews产生二项分布随机数的函数@rbinom(n,p).
编程如下:
worku12048
seriesresult
for!
i=0to1
smpl12048
seriesx
x
(1)=0
for!
cou=1to2048
x(!
cou)=@rbinom(!
i,0.5)
next
next
x.hist
例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)值即可。
程序实现:
worku11000
smpl11000
seriesx
seriesy
seriesa1
seriesa2
seriesa3
seriesa4
seriesa5
seriesa6
for!
i=1to1000
a1(!
i)=1/6
a2(!
i)=2/6
a3(!
i)=3/6
a4(!
i)=4/6
a5(!
i)=5/6
a6(!
i)=1
x(!
i)=@runif(0,1)
ifx(!
i)i)theny(!
i)=1
elseifx(!
i)>=a1(!
i)andx(!
i)i)theny(!
i)=2
elseifx(!
i)>=a2(!
i)andx(!
i)i)theny(!
i)=3
elseifx(!
i)>=a3(!
i)andx(!
i)i)theny(!
i)=4
elseifx(!
i)>=a4(!
i)andx(!
i)i)theny(!
i)=5
elseifx(!
i)>=a5(!
i)andx(!
i)i)theny(!
i)=6
elsey(!
i)=7
endif
endif
endif
endif
endif
endif
next
y.hist
1.通过已知总体模型得到多组样本数据,进行多次回归,验证回归结果的特征、性质
最小二乘法的无偏性
worku110
vector(10)v1
v1.fill80,100,120,140,160,180,200,220,240,260
mtos(v1,x)
!
b1=25
!
b2=0.5
matrix(100,2)f
for!
k=1to100
seriesu=3*nrnd
seriesy=!
b1+!
b2*x+u
equationeq.lsy=c
(1)+c
(2)*x
f(!
k,1)=c
(1)
f(!
k,2)=c
(2)
next
showf
expand1100
smpl1100
mtos(f,gr)
freezeser01.qqplot
freezeser01.hist
freezeser02.qqplot
freezeser02.hist
matrix(1,2)m
m(1,1)=@mean(ser01)
m(1,2)=@mean(ser02)
showm
蒙特卡洛模拟程序:
(最终调试成功)
'storemontecarleresultsinaseries
'checked4/1/2004
'setworktonumberofmontecarlereplications
wfcreatemcarleu1100
'createdataseriesforx
'note:
xisfixedinrepeatedsamples
'onlyfirst10observationsareused(remaining90obsmissing)
seriesx
x.fill80,100,120,140,160,180,200,220,240,260
'settrueparametervalues
!
beta1=2.5
!
beta2=0.5
'setseedforrandomnumbergenerator
rndseed123456
'assignnumberofreplicationstoacontrolvariable
!
reps=100
'beginloop
for!
I=1to!
reps
'setsampletoestimationsample
smpl110
'simulateydata(onlyfor10obs)
seriesy=!
beta1+!
beta2*x+3*nrnd
'regressyonaconstantandx
Equationeq1.lsycx
'setsampletooneobservation
smpl!
I!
i
'andstoreeachcoefficientestimateinaseries
seriesb1=eq1.@coefs
(1)
seriesb2=eq1.@coefs
(2)
next
'endofloop
'setsampletofullsample
smpl1100
'showkerneldensityeatimateforeachcoef
freeze(gra1)b1.distplotkernel
'drowverticaldashlineattrueparametervalue
gra1.draw(dashline,bottom,rgb(156,156,156))!
beta1
showgra1
freeze(gra2)b2.distplotkernel
'drawverticaldashlineattrueparametervalue
gra2.draw(dashline,bottom,rgb(156,156,156))!
beta2
showgra2
一元回归参数的分布:
Subroutinemoni(scalarn,scalarsum,scalarparam1,scalarparam2,scalartype)
For!
m=1ton
X(!
m)=@rnd*100
Next
For!
n=1tosum
Iftype=0then
For!
m=1ton
U(!
m)=@nrnd
Next
Endif
Iftype=1then
For!
m=1ton
If@rnd<0.5then
U(!
m)=@rnd
Else
U(!
m)=@rnd*(-1)
Endif
Next
Endif
Iftype=2then
U
(1)=@nrnd
For!
m=2ton
U(!
m)=u(!
m-1)+@nrnd
Next
Endif
Iftype=3then
For!
m=1ton
If@rnd<0.5then
U(!
m)=@nrnd
Else
U(!
m)=@nrnd*2
Endif
Next
Endif
For!
m=2ton
Y(!
m)=param1+param2*x(!
m)+u(!
m)
Next
Equationeq.lsycx
B1(!
n)=eq.@coefs
(1)
B2(!
n)=eq.@coefs
(2)
Next
Endsub
Worku110000
Seriesb1
Seriesb2
Seriesx
Seriesy
Seriesu
Callmoni(100,10000,20,0.8,3)
B1.hist
B2.hist
生成季度虚拟变量的程序:
wfcreatedumtestq19701990
%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_"+%obsstr
endif
smpl@all
series{%name}=0
smpl{%obsstr}{%obsstr}
series{%name}=1
next
下面这个执行不了:
!
n=10000
wfcreatecaou1!
n
matrix(!
n,18)m
groupg
for%1r0b0t0dw0r20f0r1b1t1dw1r21f1r2b2t2dw2r22f2
series{%1}=0
g.add{%1}
next
for!
k=1to!
n
smpl1122
for%1y0x0y1x1y2x2
series{%1}=@rnorm
next
smpl2122
x1=x1(-1)+@rnorm
y1=y1(-1)+@rnorm
smpl2122
x2=2*x2(-1)-x2(-2)+@rnorm
y2=2*y2(-1)-y2(-2)+@rnorm
smpl1122
for%1%2%31y0x07y1x113y2x2
m(!
k,{%1})=@cor({%2},{%3})
equationeq.ls{%2}c{%3}
m(!
k,{%1}+1)=eq.c
(2)
m(!
k,{%1}+2)=eq.@tstats
(2)
m(!
k,{%1}+3)=eq.@dw
m(!
k,{%1}+4)=eq.@r2
m(!
k,{%1}+5)=eq.@f
next
next
smpl1!
T
mtos(m,g)
for%1t0t1t2
seriescao_{%1}=@abs({%1})>=2
freeze(statby_{%1}){%1}.statby(nomean,nostd)cao_{%1}
next
for%1r0b0t0dw0r20f0r1b1t1dw1r21f1r2b2t2dw2r22f2
freeze(hist_{%1}){%1}.h