雁茗轩 发表于 2012-4-15 01:45 
老师您好!我把模型估计出来了,想对残差做个ARCH-LM检验,检验时,总是出现要建立一个varest之类的东西, ...
library(tsDyn)
nan=read.table("cpo.txt", header = TRUE)
y=nan$CP
x=nan$Oil
mod=lstar(y,m=2,d=1,thVar=x,control=list(maxit=3000))
mod 
names(mod)
#[1] "str"      "coefficients"   "fitted.values"  "residuals"   "k"             
#[6] "model"    "model.specific"
#########Statistical Tests:
library(fGarch)
# Lagged Series:
     .tslagGarch = function (x, k = 1) {
         ans = NULL
         for (i in k) ans = cbind(ans, .tslag1Garch(x, i))
         indexes = (1:length(ans[, 1]))[!is.na(apply(ans, 1, sum))]
         ans = ans[indexes, ]
         if (length(k) == 1) ans = as.vector(ans)
         ans }
     .tslag1Garch = function (x, k) {
         c(rep(NA, times = k), x[1:(length(x) - k)]) }
     # Statistical Tests:
     cat("\n Residuals Tests:\n")
   
  r.s = mod$residuals
     ans = NULL
     # Normality Tests:
     jbtest = jarqueberaTest(r.s)@test
     ans = rbind(ans, c(jbtest[1], jbtest[2]))
     if (length(r.s) < 5000) {
         swtest = shapiro.test(r.s)
         if (swtest[2] < 2.6e-16) swtest[2] = 0
         ans = rbind(ans, c(swtest[1], swtest[2]))
     } else {
         ans = rbind(ans, c(NA, NA))
     }
     # Ljung-Box Tests:
     box10 = Box.test(r.s, lag = 10, type = "Ljung-Box")
     box15 = Box.test(r.s, lag = 15, type = "Ljung-Box")
     box20 = Box.test(r.s, lag = 20, type = "Ljung-Box")
     ans = rbind(ans, c(box10[1], box10[3]))
     ans = rbind(ans, c(box15[1], box15[3]))
     ans = rbind(ans, c(box20[1], box20[3]))
     box10 = Box.test(r.s^2, lag = 10, type = "Ljung-Box")
     box15 = Box.test(r.s^2, lag = 15, type = "Ljung-Box")
     box20 = Box.test(r.s^2, lag = 20, type = "Ljung-Box")
     ans = rbind(ans, c(box10[1], box10[3]))
     ans = rbind(ans, c(box15[1], box15[3]))
     ans = rbind(ans, c(box20[1], box20[3]))
     # Ljung-Box Tests - tslag required
     lag.n = 12
     x.s = as.matrix(r.s)^2
     n = nrow(x.s)
     tmp.x = .tslagGarch(x.s[, 1], 1:lag.n)
     tmp.y = x.s[(lag.n + 1):n, 1]
     fit = lm(tmp.y ~ tmp.x)
     stat = (n-lag.n) * summary.lm(fit)$r.squared
     ans = rbind(ans, c(stat, p.value = 1 - pchisq(stat, lag.n)) )
     # Add Names:
     rownames(ans) = c(
         " Jarque-Bera Test   R    Chi^2 ",
         " Shapiro-Wilk Test  R    W     ",
         " Ljung-Box Test     R    Q(10) ",
         " Ljung-Box Test     R    Q(15) ",
         " Ljung-Box Test     R    Q(20) ",
         " Ljung-Box Test     R^2  Q(10) ",
         " Ljung-Box Test     R^2  Q(15) ",
         " Ljung-Box Test     R^2  Q(20) ",
         " LM Arch Test       R    TR^2  ")
     colnames(ans) = c("Statistic", "p-Value")
     print(ans)
                                Statistic p-Value   
Jarque-Bera Test   R    Chi^2  2.378766  0.3044091 
Shapiro-Wilk Test  R    W      0.9891328 0.4601097 
Ljung-Box Test     R    Q(10)  6.890205  0.735768  
Ljung-Box Test     R    Q(15)  25.69184  0.0413892 
Ljung-Box Test     R    Q(20)  33.93066  0.02659757
Ljung-Box Test     R^2  Q(10)  9.998199  0.4406513 
Ljung-Box Test     R^2  Q(15)  10.39486  0.7941945 
Ljung-Box Test     R^2  Q(20)  13.69091  0.8458153 
LM Arch Test       R    TR^2   13.27055  0.3496864