R语言编程学习之函数与模型:VAR与SVAR和爬虫(图)

R语言编程学习之函数与模型:VAR与SVAR和爬虫(图)
SVAR模型与VAR模型在模型设定形式上的区别是,VAR模型只包含变量的滞后项,而SVAR模型还包含了变量的当期项。SVAR模型还可以避免联立方程模型可能产生的偏倚问题。因此我们今天给出SVAR在R软件中的使用说明。需要特别说明的是,今天我们并非给出一个新的函数以简化SVAR参数设定,因为我们所使用的vars包中VAR()函数和SVAR函数的参数设定已经十分简洁了。
1. 函数说明
vars包(可以通过TaskView查看具有相似函数的其它包)中的函数很多,按照VAR的分析程序可以分为估计和检验两类函数:估计函数有VAR()和SVAR()函数;检验函数有VARselect()、irf()、fevd()等,分别用于模型选择、脉冲响应和方差分解。同时,vars包还提供了arch.test()、causality()、normality.test()、serial.test()、stability()等函数用于模型检验。

R语言编程学习之函数与模型:VAR与SVAR和爬虫(图)

2. 案例与使用说明
#####data1包含内生变量,data2包含外生变量,下面直接给出了data1和data2的原始数据
#####VARselect()函数给出了不同滞后阶数模型的信息值,其中y设定内生变量数据集,exogen设定外生变量数据集,lag.max设定最大滞后阶数,我们设定为6,type设定确定性部分的类型,可选择的包括const截距,trend趋势,both同时包含截距和趋势,none不包含截距和趋势
> VARselect(y=data1,lag.max=6,type="const",exogen=data2)
$selection
AIC(n)  HQ(n)  SC(n) FPE(n) 
4      4      4      5
$criteria
1           2            3    4    5    6
AIC(n)     9.588271    10.07365     7.637841 -Inf -Inf -Inf
HQ(n)      9.579220    10.06007     7.619740 -Inf -Inf -Inf
SC(n)     10.437931    11.34814     9.337162 -Inf -Inf -Inf
FPE(n) 16817.321879 41461.93286 12450.487405  NaN    0    0
#####VAR()函数给出了VAR的估计结果,我们将其保存在变量rvar中。VAR()函数设定的参数包括,y为内生变量,exogen为外生变量,ic为可选的信息准则,p为滞后阶数,type为确定性部分,其与VARselect()函数相同。我们通过names()函数查看rvar中VAR()的回归结果。由于VAR()保存为S3类型,可以直接通过$调用,如rvar$varresult调用第一个list。
> rvar=VAR(y=data1,p=3,type="const",exogen=data2,ic=c("AIC","SC","HQ","FPE"))
> names(rvar)
[1] "varresult"    "datamat"      "y"            "type"         "p"            "K"           
[7] "obs"          "totobs"       "restrictions" "call"        
#####SVAR()函数给出了SVAR的估计结果,我们将其保存在变量rsvar中。在使用SVAR估计之前,我们需要定义A矩阵,即模型内生变量的当期影响。需要说明的是,由于内生变量方程中不可能与自身的当期值相关,因此A矩阵的对角线全部为1,其它为带估计参数。我们首先定义了一个全部为NA的3*3矩阵(3个内生变量),然后将对角线元素全部设定为1,保存在amat变量中。SVAR()需要设置的参数包括已经回归的VAR()对象,即上一步中的rvar,定义的A矩阵,即amat,估计方法选择的是直接使用极大似然估计“direct”。同样的,我们可以通过names()查看估计结果的名称,其中包括A矩阵和B矩阵的系数及系数标准误。SVAR的关键在于Amat矩阵,如果已经知道某些变量不存在当期相关,则可以通过amat[i,j]=0将该元素固定。
> amat=matrix(NA,3,3)
> amat[1,1]=amat[2,2]=amat[3,3]=1
> rsvar=SVAR(x=rvar,estmethod="direct",Amat=amat,Bmat=NULL,)
#####irf()和fevd()函数的设置相似,需要设置VAR()或者SVAR()估计对象,我们使用的是保存在rvar中的VAR()估计对象。irf()函数需要设定冲击变量和相应变量的名称,我们可以通过names()函数查看内生变量数据集中的变量名,n.ahead设定冲击响应的时期数,如果不设置则默认全部内生变量都进行分析。fevd()的参数设置与此一致。注意,irf()和fevd()返回的是脉冲响应和方差分解的数值,而不是图形。我们通过plot()函数简单的呈现。
> rirf=irf(rvar,impulse="m1",response="cpii",n.ahead=20)
> names(rirf)
[1] "irf"        "Lower"      "Upper"      "response"   "impulse"    "ortho"      "cumulative"
[8] "runs"       "ci"         "boot"       "model"     
> rfevd=fevd(rvar,n.ahead=20)
> names(rfevd)
[1] "m1"   "gdp"  "cpii"
> plot(rirf$irf$m1,type="l")
#####因果分析函数、异方差检验函数和正态性检验函数均是以VAR()或者SVAR()的回归结果为基础,因此我们以保存了VAR()回归结果的变量rvar尽心说明。
> causality(rvar)
> arch.test(rvar,lags.single=5,lags.multi=2)
> normality.test(rvar)

最后说明,在vars包中也包含进行VEC和SVEC分析的函数,使用方法与VAR和SVAR一样。钢铁是怎样炼成的(http://www.simayi.net/duhougan/6680.html)读后感400字心得体会,同时,MTS包中也提供了进行VAR、SVAR和VARX等分析的函数。进行多变量自回归分析的函数包可以在TaskView中进行查看。

R语言 函数与模型:爬虫
网络数据的价值不言而喻。越来越多的研究开始利用各种程序语言从网络爬取数据。爬取网页数据有两个难题——解析网页和文本提取。对“规矩”网页进行解析是很简单的事情:在edge浏览器中选择F12开发人员工具或者在Google Chrome中选择page view source都可以直接浏览网页代码。R中有现存的包进行网页解析,我推荐的是rvest包,因为不需要进行太多参数设置即可完成工作。配合管道函数%>%可以使网页结点解析更加简单。我们的任务就是在一堆代码中找到需要的数据,并查看数据前后的结点,<>和</>表示结点的开始和结束(在爬取数据的时候甚至都不需要知道结点符号表示的含义)。爬取数据的难点在于对解析出来的字符对象进行文本分割和提取,这需要爬虫的作者(使用爬虫的人)掌握基本的文本分析技巧。我的经验是,直接对字符进行定位,并根据起止位置分割。
爬虫的基本框架是:
网页解析
结点提取
字符串清洗和分割
提取并保存目标文本
翻页(循环)

猜你喜欢

转载自blog.csdn.net/minemi/article/details/81222138