请问R语言里有没有做非线性VAR模型的包?

Python013

请问R语言里有没有做非线性VAR模型的包?,第1张

这里分享一下R语言实现VAR和SVAR的整个流程。

主要步骤包括:

1.单位根检验

2.确定滞后阶数

3.格兰杰因果检验

4.模型稳定性检验

5.脉冲响应

6.方差分解

(Johansen协整检验,如果需要的话)

整个过程用到的R语言的扩展包有:

library(zoo)

library(vars)

library(tseries)

首先,数据是下面的样子:

ps:数据是时间序列类型,可以通过下面方法将dataframe转成时间序列类型

data = ts(data)

1.单位根检验

#对data的第一列进行单位根检验

adf.test(data[,1])

2.滞后阶数确定

VARselect函数结果包括AIC、HQ、SC和FPE准则

#参数y为时间序列数据,lag.max为最大滞后阶数

#参数type值包括const截距,trend趋势,both同时包含截距和趋势,none不包含截距和趋势

VARselect(y=data, lag.max = 10, type = c("const"))

3.格兰杰因果检验

格兰杰因果检验有两个方法,第一个是在构造模型之前,第二个是在构造模型之后在模型的基础上进行格兰杰因果检验。

(1)构造模型之前格兰杰因果检验

#函数格式:grangertest(yt~xt)

eg:

grangertest(Value~BCI)

(2)构造模型之后格兰杰因果检验

#函数格式:causality(VARModel,cause)

eg

var =  VAR(data ,p = 2, type = "const")

causality(var,cause=c('Count','Value'))

ps:在这里如果想要构建SVAR模型的话,需要根据实际情况构建两个矩阵amat和bmat,然后使用这两个矩阵来构建SVAR模型:

svar = SVAR(var,Amat = amat,Bmat = bmat)

4.模型稳定性检验

#这里使用“OLS-CUSUM”,它给出的是残差累积和,在该检验生成的曲线图中,残差累积和曲线以时间为横坐标,

#图中绘出两条临界线,如果累积和超出了这两条临界线,则说明参数不具有稳定性。

sta = stability(var, type = c("OLS-CUSUM"), h = 0.15, dynamic = FALSE, rescale = TRUE)

plot(sta)##结果稳健

5.脉冲响应

#标题栏说明,这是BCI(或者其他变量)对各个变量(包括BCI自身)的脉冲响应

(1)VAR脉冲响应

var.irf<-irf(var,n.head=10)

plot(var.irf)

(2)SVAR脉冲响应

svar.irf<-irf(svar,n.ahead = 100)

plot(svar.irf)

6.方差分解

#反映了各变量的贡献率

(1)VAR方差分解

fevd1<-fevd(var, n.ahead = 10)

fevd1$Count

(2)SVAR方差分解

fevd2<-fevd(svar, n.ahead = 10)

fevd2$Value

ps:有时候需要进行Johansen协整检验

#Johansen协整检验,

#对r=0(不存在协整关系)的检验统计量大于临界值,表明拒绝原假设

yJoTest = ca.jo(data, type = c("trace"), ecdet = c("none"), K = 2)

summary(yJoTest)

网页链接

R 有几种用于制作图形的系统,但 ggplot2 是最优雅和最通用的系统之一。与大多数其他图形包不同,ggplot2 具有基于图形语法的底层语法,它允许您通过组合独立组件来组合图形。如果想要更加了解ggplot2,请阅读 ggplot2: Elegant Graphics for Data Analysis ,可以从 https://ggplot2-book.org/getting-started.html 学习本书

所有的图都由数据data,想要可视化的信息,映射mapping(即数据变量如何映射到美学属性的描述)组成

1. 图层(layers) 是几何元素和统计变换的集合。几何对象,简称 geoms ,代表你在图中实际看到的东西:点、线、多边形等等。 统计转换,简称 stats ,总结数据:例如,装箱和计数观察,以创建一个直方图,或拟合一个线性模型。

2. Scales 将数据空间中的值映射到美学空间中的值。这包括颜色、形状和大小的使用。Scale还绘制图例和轴,这使得从图中读取原始数据值成为可能(反向映射)。

3. 坐标(coords) 或坐标系统描述如何将数据坐标映射到图形的平面。它还提供了轴和网格线来帮助读取图形。我们通常使用笛卡尔坐标系,但也可以使用其他一些坐标系,包括极坐标和地图投影。

4. 刻面(facet) 指定如何拆分数据子集并将其显示为小倍数。这也被称为条件反射或网格/格子。

5. theme 控制更精细的显示点,如字体大小和背景颜色。

ggplot2有许多参数,可根据需求自行选取,具体参数详情可见 https://ggplot2.tidyverse.org/reference/index.html

基础绘图:由 ggplot(data,aes(x,y))+geom_ 开始,至少包含这三个组件,可以通过"+"不断的添加layers, scales, coords和facets。

Geoms :几何对象,通常,您将使用geom_函数创建层,以下为常用的图形:

geom_bar() :直方图,条形图

geom_boxplot() :box图

geom_density() :平滑密度估计曲线

geom_dotplot() :点图

geom_point() :点图

geom_violin() :小提琴图

aes(),颜色、大小、形状和其他审美属性

要向绘图添加其他变量,我们可以使用其他美学,如颜色、形状和大小。

按照属性定义

它们的工作方式与 x 和 y 相同,aes():

aes(displ, hwy, colour = class) #按照某个属性着色

aes(displ, hwy, shape = drv) #按照某个属性定义

aes(displ, hwy, size = cyl) #按照某个属性定义

整体自定义

geom_xxx(colour =自定义颜色)

geom_xxx(shape=形状编号)

geom_xxx(size =编号大小定义 0-10)

注意根据需求按照aes()还是geom进行添加属性

以下为R语言中各shape形状编号

scale控制如何将数据值转换为视觉属性的细节。

labs()和lims() 是对标签和限制进行最常见调整。

labs() ,主要对图形进行调整,注释等

labs()括号内参数:title主标题,subtitle副标题,caption右下角描述,tag左上角

xlab() ,x轴命名

ylab() ,y轴命名

ggtitle() ,标题

lims()

xlim() , xlim(a,b) 限制坐标(a,b)

ylim() , ylim(a,b) 限制坐标(a,b)

scale_alpha() 透明度尺度

scale_shape() , 搭配aes(shape=某个属性)使用

参数:name ,solid =T/F是否填充

scale_size()搭配aes(size=某个属性)使用

参数:name,range =c(0, 10)

1.适用于发散和定性的数据

a. scale_colour_brewer() ,scale_colour_brewer(palette =" "),scale_colour_brewer(palette ="Green ")

palette来自RcolorBrewer包,所有面板:

b. scale_colour_manual()

scale_colour_manual(values=c( )) 可以 自定义颜色 ,常用的参数

values可直接定义颜色,但是建议使用命名向量,例如

values=c("8" = "red", "4" = "blue", "6" = "darkgreen", "10" = "orange")

PS:注意在aes(colour=factor()),一定要把因素转换为factor型,否则无效

2.适用于连续的值,渐变颜色

a. scale_colour_gradient()

scale_colour_gradient (low =" ",high=" "),根据值大小定义颜色,创建两个颜色梯度(低-高),

b. scale_colour_gradient2()

scale_colour_gradient2(low = " ",mid = " ",high = " ")创建一个发散的颜色梯度(低-中-高)

c. scale_colour_gradientn()

创建一个n色渐变,scale_colour_gradientn(colours =许多R语言中的颜色面板),

默认坐标系是笛卡尔 coord_cartesian()

一般不会修改

facet_grid() ,在网格中布置面板

facet_grid(rows = vars() ) cols或rows = vars(因素),图形按列或行分割

facet_wrap()

facet_wrap(vars( ), ncol =n) , ncol或者nrow,分为多少行多少列

theme_bw() ,可以覆盖所有主题,背景变为白色,我们在文章中所用的图片大都需要该背景。

或者用 theme_classic() ,同时去除了网格线

theme() ,修改主题的组件,里面涉及多个参数,根据需求调整

常见参数:

legend.position,图例的位置,包括 "left" 左, "right" 右, "bottom" 下, "top" 上和"none",不显示

R语言中的dplyr包非常神奇,里面包含很多的函数,今天我们就来介绍下窗口函数的应用。

窗口函数应用

mtcars %>% group_by(cyl) %>% mutate(rank= min_rank(desc(mpg)))

mtcars %>% group_by(cyl) %>% mutate(mpg_max = max(mpg))

原来的明细还保留,同时每个分组的统计值算出来了,是不是很方便

1.2 批量操作

同时若你嫌麻烦一个个地对变量进行操作,还可以使用mutate_each函数对数据框中的变量批量操作,通过调整funs(即functions)和vars(variables)参数控制functions的数量,以及参与变形的variables,这里控制variables的技巧与select函数相似。

#对每个变量进行排名

mtcars%>%mutate_each(funs(dense_rank))

mpg cyl disp hp drat wt qsec vs am gear carb

1 16 2 13 11 16 9 6 1 2 24

2 16 2 13 11 16 12 10 1 224

3 19 16 615 7 22 2 221

4 17 2 16 115 1624 2 111

5 13 3 23 156 18 10 1 112

#对disp的变量进行排名

mtcars%>%mutate_each(funs(dense_rank,min_rank),disp)

mpg cyl disp hp dratwt qsec vs am gear carb dense_rank min_rank

1 21.0 6 160.0 110 3.90 2.620 16.46 0 144 13 13

2 21.0 6 160.0 110 3.90 2.875 17.02 0 144 13 13

3 22.8 4 108.0 93 3.85 2.320 18.61 1 141 6 6

4 21.4 6 258.0 110 3.08 3.215 19.44 1 031 16 18

5 18.7 8 360.0 175 3.15 3.440 17.02 0 032 23 27

6 18.1 6 225.0 105 2.76 3.460 20.22 1 031 15 17

7 14.3 8 360.0 245 3.21 3.570 15.84 0 034 2327

#对除了disp的变量进行排名

mtcars%>%mutate_each(funs(dense_rank,min_rank),-disp)

2、transmute

返回值中不包含原数据集变量,只保留计算转换后的变量。

mtcars%>%mutate(wt_log=log(wt))

mtcars%>%transmute(wt_log=log(wt))

mtcars %>%mutate(displ_l = disp / 61.0237)

mtcars %>%transmute(displ_l = disp / 61.0237)