[R-SIG-Finance] Independence test rugarch package
philippe
philippe.kappeler at hotmail.com
Sat Apr 26 08:43:01 CEST 2014
Hi Alexios,
Thanks for the quick response. I downloaded the package from "bitbucket" and
retested. The test now reports values for the UC test, where before I
received NaN for a confidence level 0f 0.95 (p=0.05) and rolling windows
500, 1000, 1500. The rolling window of 2000 was working fine before and
still does. So this is fine and thanks.
But now the CC test returns NaN's at all windows, whereas before window 2000
was working. I copy pasted again the function (.LR.cc) out of getAnywhere
and rerun the function in a sort of "traceback mode". I note that T11 is
still equal to N, which in my eyes is still incorrect as the
which(VaR.ind==1) results show. Please advise me if I misunderstood or
overlooked something.
Thank you very much.
The code slightly updated is again.
###############
require(devtools)
install_bitbucket("rugarch","alexiosg")
ret <- CHF
seq <- 2000 #alternativly 500, 1000, 1500
#Normal Distribution VaR
VaRdistn <- function(ret, prob=.05) {
ans <- -qnorm(prob, mean=0, sd=sd(ret))
signif(ans, digits=7)
}
### VaR
p <- c(0.05, 0.01, 0.005, 0.001) # confidence values for VaR
act <- ret[(seq+1):length(ret)] # actual return
VaRmatrix <- matrix(nrow=length(ret)-seq, ncol=length(p))
for (i in 1:nrow(VaRmatrix) ) {
VaRmatrix[i,]<- sapply(X=p, FUN=VaRdistn,ret=ret[i:(seq+i-1)] )
colnames(VaRmatrix) <- c("0.05", "0.01", "0.005", "0.001")
}
#### RUGARCH package (getAnywhere(.LR.cc))
VaR <- -VaRmatrix[,1] #change column and p value respectively to 2 for 0.01,
3 for 0.005 and 4 for 0.001
p <- 0.05
actual <- act
#function (p, actual, VaR)
#{
VaR.ind = ifelse(actual < VaR, 1, 0)
N = sum(VaR.ind)
TN = length(VaR.ind)
T00 = sum(c(0, ifelse(VaR.ind[2:TN] == 0 & VaR.ind[1:(TN -
1)] == 0, 1, 0)))
T11 = sum(c(0, ifelse(VaR.ind[2:TN] == 1 & VaR.ind[1:(TN -
1)] == 1, 1, 0)))
T01 = sum(c(0, ifelse(VaR.ind[2:TN] == 1 & VaR.ind[1:(TN -
1)] == 0, 1, 0)))
T10 = sum(c(0, ifelse(VaR.ind[2:TN] == 0 & VaR.ind[1:(TN -
1)] == 1, 1, 0)))
T0 = T00 + T01
T1 = T10 + T11
pi0 = T01/T0
pi1 = T11/T1
pe = (T01 + T11)/(T0 + T1)
stat.ind = -2 * ((T00 + T10) * log(1 - pe) + (T01 + T11) *
log(pe)) + 2 * (T00 * log(1 - pi0) + T01 * log(pi0) +
T10 * log(1 - pi1) + T11 * log(pi1))
#stat.uc = .LR.uc(p = p, TN = TN, N = N)
#stat.cc = stat.uc + stat.ind
#return(list(stat.cc = stat.cc, stat.uc = stat.uc, N = N,
# TN = TN))
#}
#### your results out of R-studio console #######
> N
[1] 163
> T00
[1] 3048
> T00
[1] 3048
> T11
[1] 163
> T01
[1] 0
> T10
[1] 0
> which(VaR.ind == 1)
[1] 10 55 106 117 151 174 178 186 191 213 227 238 246 302
334 368 373 388 395 438 486 496 497 503
[25] 544 581 606 614 623 637 655 664 670 672 697 722 727 754
767 771 778 815 818 835 864 874 880 901
[49] 999 1000 1025 1031 1086 1100 1151 1159 1168 1184 1189 1212 1231 1272
1316 1468 1502 1526 1596 1598 1638 1639 1651 1656
[73] 1657 1675 1696 1709 1719 1723 1736 1763 1783 1785 1812 1830 1831 1840
1844 1845 1847 1848 1851 1854 1860 1873 1879 1883
[97] 1893 1902 1910 1911 1919 1927 1936 1939 1947 1954 1956 1961 1978 1981
2006 2007 2025 2032 2119 2175 2227 2230 2237 2240
[121] 2250 2260 2266 2272 2275 2292 2293 2299 2319 2328 2330 2351 2357 2370
2387 2405 2425 2443 2475 2478 2508 2516 2520 2522
[145] 2527 2528 2543 2544 2545 2573 2580 2584 2647 2757 2776 2782 2812 2954
2991 3000 3022 3072 3091
> stat.ind
[1] NaN
##### my code
conf <- 0.95
p <- c(0.05, 0.01, 0.005, 0.001)
#fill vectors
uc.LR <- cc.LR <- numeric(length(p))
uc.pval <- cc.pval <- numeric(length(p))
uc.statement <- cc.statement <- numeric(length(p))
ind.LR <- ind.pval <- numeric(length(p))
VaR.ind <- matrix(nrow=length(ret)-seq, ncol=length(p))
N <- TN <- T00 <- T11 <- T01 <- T10 <- T0 <- T1 <- pi0 <- pi1 <- pe <-
numeric(length(p))
for(i in 1:length(p)){
uc.LR[i] <- VaRTest(alpha = p[i], act, -VaRmatrix[,i], conf.level =
conf)$uc.LRstat
uc.pval[i] <- VaRTest(alpha = p[i], act, -VaRmatrix[,i], conf.level =
conf)$uc.LRp
VaR.ind[,i] = ifelse(act < -VaRmatrix[,i], 1, 0)
N[i] = sum(VaR.ind[,i])
TN[i] = length(VaR.ind[,i])
T00[i] = sum(c(0, ifelse(VaR.ind[,i][2:TN[i]] == 0 & VaR.ind[,i][1:(TN[i]
- 1)] == 0, 1, 0)))
T11[i] = sum(c(0, ifelse(VaR.ind[,i][2:TN[i]] == 1 & VaR.ind[,i][1:(TN[i]
- 1)] == 1, 1, 0)))
T01[i] = sum(c(0, ifelse(VaR.ind[,i][2:TN[i]] == 1 & VaR.ind[,i][1:(TN[i]
- 1)] == 0, 1, 0)))
T10[i] = sum(c(0, ifelse(VaR.ind[,i][2:TN[i]] == 0 & VaR.ind[,i][1:(TN[i]
- 1)] == 1, 1, 0)))
T0[i] = T00[i] + T01[i]
T1[i] = T10[i] + T11[i]
pi0[i] = T01[i]/T0[i]
pi1[i] = T11[i]/T1[i]
pe[i] = (T01[i] + T11[i])/(T0[i] + T1[i])
ind.LR[i] = -2 * log((1 - pe[i])^(T00[i] + T10[i]) * pe[i]^(T01[i] +
T11[i])) +
2 * log((1 - pi0[i])^T00[i] * pi0[i]^T01[i] * (1 - pi1[i])^T10[i] *
pi1[i]^T11[i])
ind.pval[i] <- 1 - pchisq(ind.LR[i], df = 1)
cc.LR[i] <- VaRTest(alpha = p[i], act, -VaRmatrix[,i], conf.level =
conf)$cc.LRstat
cc.pval[i] <- VaRTest(alpha = p[i], act, -VaRmatrix[,i], conf.level =
conf)$cc.LRp
}
###my results out of R-studio console #####
> uc.LR #from rugarch::VaRTest
[1] 0.0360193 11.4504151 10.9552213 6.9767907
> ind.LR #should be the difference between uc.LR and cc.LR
[1] 2.597815 1.107278 1.044127 5.630994
> cc.LR #from rugarch::VaRTest
[1] NaN NaN NaN NaN
--
View this message in context: http://r.789695.n4.nabble.com/Independence-test-rugarch-package-tp4689473p4689499.html
Sent from the Rmetrics mailing list archive at Nabble.com.
More information about the R-SIG-Finance
mailing list