全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
26297 13
2014-11-16
在R运行为
ar2sim<-arima.sim(list(order=c(2,0,0),ar=c(.278,.366)),n=50) #生存真实的AR(2)模型。
fit1<-arima(ar2sim,c(1,0,0 )) ;
fit2<-arima(ar2sim,c(2,0,0 )) ;
fit3<-arima(ar2sim,c(3,0,0 )) ;
fit4<-arima(ar2sim,c(4,0,0 )) ;
fit5<-arima(ar2sim,c5,0,0 )) ;
fit6<-arima(ar2sim,c(6,0,0 )) ;
fit7<-arima(ar2sim,c(7,0,0 )) ;
fit8<-arima(ar2sim,c(8,0,0 )) ; # AR(1)…AR(8)去拟合这个真实模型
问题1:能否使用一个循环语句实现以上操作?且每次拟合都能提取出AIC,AICC,BIC值。(如fit1$aic,fit1$aicc,fit1$bic)
问题2:以上是一次生存AR(2)真实模型,然后用 AR(1)…AR(8)去拟合,如何生存1000次AR(2)真实模型,然后 AR(1)…AR(8)去拟合,且每次拟合都能提取出AIC,AICC,BIC值?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-11-16 22:48:10
楼主为何不用eviews做,用eviews实现ARIMA的阶数的判定很简单的额,采取AR还是MA或者ARIMA的模型都有判断标准的额
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-11-17 06:12:16
一时手痒按照你的要求写了两个函数,如下
#question 1
#general case
ar2.sim <- function(theta1,theta2,n,p)
{
  ar2sim<-arima.sim(list(order=c(2,0,0),ar=c(theta1,theta2)),n=n)
  sim.AIC<-numeric(p)
  for (i in 1:p)
  {
    sim.AIC<-arima(ar2sim,c(i,0,0))$aic
  }
  return(sim.AIC)
}
#your example
ar2.sim(theta1=.278,theta2=.366,n=50,p=8)
system.time(ar2.sim(.278,.366,50,8))

#question 2
#general case
ar2.sim.multiple <- function(theta1,theta2,n,p,R)
{
  ans <- replicate(R,ar2.sim(theta1,theta2,n,p))
  mean.AIC <- apply(ans,1,mean)
  return(list(ans,mean.AIC))
}
#your example
ar2.sim.multiple(theta1=.278,theta2=.366,n=50,p=8,R=1000)
  注释1:其中theta1,theta2是AR(2)model里面的两个参数,n是生成时间序列的样本量,p是你要fit的诸多AR(p)model 里面p的上限,R是第二问里面simulate的次数。

  注释2:因为arima的返回值里面貌似只包括aic,所以我只做了aic部分,aicc和bic我还要在研究一下。
  注释3:第二问的返回值由两部分组成,第一部分是一个pxR的大矩阵,包含了所有simulate出来的aic,我私自揣测你需要的应该是1000次simulate的均值,所以用apply对矩阵进行行求平均,得到了8个1000次simulate的aic的平均值,比较有参考意义,而且我自己也run过代码,发现在R=100的情况下,AR(2)即真实模型的AIC最小,完全make scense.
  注释4:因为R做loop的效率惨不忍睹,所以你要做R=1000的simulation,估计code会run很久,请耐心等待。

  如果有什么问题,欢迎和我交流~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-11-17 16:34:22
谢谢oscar0525 回复!
> ar2.sim(theta1=.278,theta2=.366,n=50,p=8)
[1] 140.9363
#以上结果出来应该是8个值的向量,即用AR(1),...,AR(8)拟合真实的AR(2),每次拟合得到AIC值,怎么仅一个值。

# bic值可用以下公式计算(但是AICC值暂没有做出,应该离算出不远了)

ar2test<-arima.sim(list(order=c(2,0,0),ar=c(.278,.366)),n=50)
ar2testfit<-arima(ar2test,order=c(2,0,0))
bic=AIC(ar2testfit, k = log(length(ar2test)))
#使用library(forecast)  再用summary(ar2testfit),可用看见AIC,AICC,BIC值,但是就 ar2testfit$aic
有具体值, 而ar2testfit$aic,  ar2testfit$aic是NULL。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-11-17 22:12:00
wuxi 发表于 2014-11-17 16:34
谢谢oscar0525 回复!
> ar2.sim(theta1=.278,theta2=.366,n=50,p=8)
[1] 140.9363
不好意思,复制粘贴出来的代码总是错的,和我写的不一样,楼下的就对了,每次复制粘贴都会少一部分东西,不知道怎么回事。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-11-17 22:15:45
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群