雁茗轩 发表于 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