一时手痒按照你的要求写了两个函数,如下
#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的次数。