R - 拟合约束的AutoRegression时间序列

时间:2013-12-06 10:10:13

标签: r constraints linear-regression

我有一个时间序列,我需要适应AR(自动回归)模型。

AR模型的格式为:

x(t) = a0 + a1*x(t-1) + a2*x(t-2) + ... + aq*x(t-q) + noise.

我有两个约束:

  1. 当lag.max = 50时找到最佳AR适合度。
  2. 所有系数的总和a0 + a1 + ... + aq = 1
  3. 我写了下面的代码:

        require(FitAR)
        data(lynx) # my real data comes from the stock market.
        z <- -log(lynx)
    
        #find best model
        step <- SelectModel(z, ARModel = "AR" ,lag.max = 50, Criterion = "AIC",Best=10)
        summary(step) # display results
    
        # fit the model and get coefficients
        arfit <- ar(z,p=1, order.max=ceil(mean(step[,1])), aic=FALSE)
    
        #check if sum of coefficients are 1
        sum(arfit$ar)
        [1] 0.5784978
    

    我的问题是,如何添加约束:所有系数的总和= 1?

    我看了this question,但我没有意识到如何使用它。

                          **UPDATE**
    

    我想我设法解决了我的问题如下。

      library(quadprog)
    
      coeff <- arfit$ar
      y <- 0
      for (i in 1:length(coeff)) {
        y <- y + coeff[i]*c(z[(i+1):length(z)],rep(0,i))
        ifelse (i==1, X <- c(z[2:length(z)],0), X <- cbind(X,c(z[(i+1):length(z)],rep(0,i))))
      }
    
      Dmat <- t(X) %*% X
    
      s <- solve.QP(Dmat , t(y) %*% X, matrix(1, nr=15, nc=1), 1, meq=1 )
      s$solution
      # The coefficients should sum up to 1
      sum(s$solution)
    

0 个答案:

没有答案