如何用R做向量自回归模型

Python011

如何用R做向量自回归模型,第1张

请问如何用R做向量自回归模型(VAR)

要实现以下的几个步骤,数据集已经有了,请高手们可以介绍下相关的函数吗?

halfyear_vector=data.frame(hsi_ir_h_ts,cenlhkl_ir_h_ts,m2_h_ts,ue_h_ts,cpi_h_ts,exp_h_ts,gdp_h_ts)

halfyear_vector=ts(halfyear_vector,start=c(1995,1),frequency=2)

halfyear_vector

plot(halfyear_vector,plot.type="single",lty=1:7,col=1:7)

title("key indicators")

legend("topleft",c("hsi_ir_h_ts","cenlhkl_ir_h_ts","m2_h_ts","ue_h_ts","cpi_h_ts","exp_h_ts","gdp_h_ts"),lty=1:7,col=1:7)

#稳定性检验

for (i in 1:7)

{

print(kpss.test(halfyear_vector[,i],null="Level"))

print(kpss.test(halfyear_vector[,i],null="Trend"))

print(kpss.test(diff(halfyear_vector[,i]),null="Level"))

print(kpss.test(diff(halfyear_vector[,i]),null="Trend"))

}

#需求一:进行ADF检验

#格兰杰因果检验

granger.test(halfyear_vector,p=7)

#需求二:进行指标共线性判断

#需求三:进行VAR阶数判断

#VAR模型拟合

halfyear_VAR=VAR(halfyear_vector,p=3,type="both")

halfyear_VAR

#需求四:价模型的稳定性、自相关性,异方差检验

#需求五:导出VAR模型

#VAR模型预测

halfyear_VAR_Predict=predict(halfyear_VAR,n.head=1,ci=0.9999)

plot(halfyear_VAR_Predict)

#需求六:计算95%,99%,99.9%分位数的预测取值

------------

DM小菜鸟

本帖最后由 DM小菜鸟 于 2015-2-26 15:27 编辑

1. 用tseries包里面的adf.test()

2. 可以计算X矩阵的秩qr(X)$rank,如果不是满秩的,说明其中有Xi可以用其他的X的线性组合表示;也可以计算条件数kappa(X),k<100,说明共线性程度小,如果100<k<1000,有较强的多重共线性,k>1000,存在严重的多重共线性。可以进行逐步回归,用step()命令,比如你一开始的模型是fm,step(fm)就可以了

3. adf.test()里面就可以设滞后项的判断,adf.test(x, alternative = c("stationary", "explosive"),

k = trunc((length(x)-1)^(1/3)))

AIC准则——

计算AIC统计量,模型的残差平方和(SS)除以样本容量(n),再取对数,加上2倍的解释变量个数(k)除以样本容量.

AIC=log(SS/n)+2*k/n

寻找某一k值是AIC达到极小值,则k就是最优滞后阶数。

SC准则——

SC=log(SS/n)+log(n)*k/n

4. R里有两种检验方法是常用的,LiMcLeod{portes}可以进行多元的Portmanteau Q检验。。。protest{portes}可以进行一元的Portmanteau Q检验,把函数中的参数SquaredQ=T

还可以把序列平方之后再检验自相关性。。。也相当于进行了异方差检验。。。

自相关检验可以通过ACF图,函数是acf{stats},或者单位根检验ur.df{urca}进行ADF检验或者ur.pp{urca}进行PP检验,或者进行白噪声检验Box.test{stats},相当于检验了序列的二阶自相关性。。。

{}里面的是package的名字

vars包。

函数的定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同。

传统定义是从运动变化的观点出发,而近代定义是从集合,映射的观点出。

1、向量是用于存储数值型,字符型或者逻辑型数据的一维数组。执行组合功能的函数为c(),可以用来创建向量。向量可根据位置进行索引,需要用[]。

2、矩阵是一个二维数组,每个元素都拥有相同的模式,可通过函数matrix()创建矩阵。

3、数组是一个可以在两个以上维度存储数据的数据对象。例如,如果创建尺寸(2,3,4)的数组,那么就是创建4个矩形矩阵每个2行3列。数组只能存储数据类型。

4、矩阵和数组一样都只能包含一种数据类型,当有多种模式的数据时,使用数据框就更为方便。数据框可以用函数data.frame () 创建。

5、$  被用来选取一个给定数据框中的某个特定变量。

6、attach()绑定数据集,detach()解除数据集。

7、with:attach,detach最好在单独的数据框内使用,在多个同名对象最好不要使用,函数with(),可以再具有多个同名对象的数据框内使用,但是必须加入花括号{},这样就无须担心名称冲突了,但是它也有局限性,赋值仅在此函数的括号内生效。

8、列表是一些对象的有序集合。

9,、数据导入 read.table(),其中header = T,代表第一行为变量名称,不作为数据,header = F相反。sep代表数据分隔符,txt为"\t",csv为","。

10、table函数,用 table() 函数统计因子各水平的出现次数(称为频数或频率)。

>sex = c("女","女","女","男","男")

>table(sex)

>sex

  男 女

  2 3

求众数

>aim = table(sex)[table(sex)==max(table(sex))]

>aim

  女

   3

> max(table(sex))

[1] 3

> table(sex)==max(table(sex))

  sex

  男    女

  FALSE TRUE

11、 无尺度网络: 是指在某一复杂的 系统 中,大部分节点只有少数几个连结,而某些节点却拥有与其他节点的大量连结。这些具有大量连结的节点称为“集散节点”,所拥有的连结可能高达数百、数千甚至数百万。这一特性说明该网络是无尺度的,因此,凡具有这一特性的网络都是无尺度网络。

12、options(stringsAsFactors = F)

#在调用as.data.frame的时,将stringsAsFactors设置为FALSE可以避免character类型自动转化为factor类型。

13、class():查看数据结构:vector、matrix、array、dataframe、list。

14、str():作用用英语来表示是:check classification of viriables,一般用于检查数据框当中有哪些数据。

15、mode() :查看数据元素类型。

16、typeof() :查看数据元素类型,基本等同于mode(),比mode()更为详细。

17、example():假设有一个函数foo,example("foo"),函数foo的使用示例。

18、apropos():列出名称中含有foo的所有可用函数。apropos("foo",mode="function")。

19、data():列出当前已加载包中所含的所有可用示例数据集。

20、ls():列出当前工作空间中的对象。

21、rm():移除(删除)一个或多个对象。

22、history(#):显示最近使用过的#个命令(默认值为25)。

23、options():显示或设置当前选项。有一个收藏文件有介绍options的功能。

24、boxplot():生成盒型图。

25、sum():计算和。sum(x,na.rm = TRUE)。

26、median():计算中位数。

27、cbind():以列结合变量。cbind(x,y,z)。

28、rbind():以行结合变量。

29、vector():以向量形式结合数据。vector(length = 10)。

30、rep():以矩阵形式结合数据。rep(c(1,,2,3),each = 10)

31、seq():生成一个有序的数列。seq(1,10)。

32、dim():矩阵或者cbind输出的维数。dim(Mydata)。

33、scan():从ascii文件中读取数据。scan(file = "test.txt")。

34、write.table():把一个变量写入到ascii文件。write.table(Z,file = "test.txt")。

35、order():确定数据的顺序。order(x)。

36、merge():合并两个数据框。merge(x,y,by = "ID")。

37、str():显示一个对象的内部结构。str(Mydata)。

38、factor():定义变量作为因子。factor(x)。

39、tapply():tapply(X = Veg$R,INDEX = Veg$Transect,FUN = mean).tapply函数根据第二个变量(Transect)的不同水平对第一变量(R)进行了求平均值运算。还可以求sd,var,length等操作。R语言初学者指南P75详细介绍了这个函数。

40、下一页介绍了sapply和lapply。

41、summary():计算基本信息。

42、table():计算列联表,统计因子各水平的出现次数(频数或频率)。table(x,y)。

43、plot():y对x的图形。pch形状,col颜色。

44、par():par(mfrow = c(2,2),mar = c(3,3,2,1))

mfrow生成一个具有4个面板的图形窗口。mar选项指定每个图形周围空白的大小,底部、左侧、顶部、右侧。

45、paste():将变量连接成字符串。paste("a","b",sep = "")。

46、log(): log = "x",log = "y",log = "xy",生成对数轴。

47、%in%:

a<-c(1,3,13,1443,43,43,4,34,3,4,3)

b<-c(1,13,11,1313,434,1)

a%in%b

# 返回内容# 

[1] TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

# 取反操作

!(a%in%b)

48、sort()函数是对向量进行从小到大的排序

rank()函数返回的是对向量中每个数值对应的秩

order()函数返回的值表示位置,依次对应的是向量的最小值、次小值、第三小值……最大值等(位置索引)

arrange()函数(需加载dplyr包)针对数据框,返回基于某列排序后的数据框,方便多重依据排序。

49、subset(): df <- data.frame( a = 1:10, b = 2:11, c = 3:12 )

df <- subset(df, select = c(a,c)) #选取列a和c

df <- subset(df, select = -c(a,c) ) #去除列a和c