1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
## Fonction phi pour implémenter EWMA-C
# gamma et lambda paramètre de ACUSUM-C
# e représente la variable de la fonction phi
# (e(t)=X(t)-delta(t-1))
phi <- function(e, gamma, lambda) {
if ( e < (-gamma) ) {
phie <- e+(1-lambda)*gamma
}
else if ( abs(e) <= gamma ) {
phie <- lambda*e
}
else if ( e > gamma ) {
phie <- e-(1-lambda)*gamma
}
return(phie)
}
#_________________________________________________________________#
## Fonction EWMA-C
# X : la série temporelle à etudier
# gamma et lambda paramètre de ACUSUM-C
ewmac <- function(X, gamma, lambda) {
delta <- vector(mode = "numeric", length = length(X))
delta[1] <-0
for ( t in 2:length(X) ) {
e <- X[t]-delta[t-1]
phie <- phi(e, gamma, lambda)
delta[t] <- delta[t-1] + phie
}
return(delta)
}
#_________________________________________________________________#
## Fonction acusumc
# X : la série temporelle à etudier
# gamma et lambda paramètre de ACUSUM-C
acusumc <- function(X, gamma, lambda, delta.min) {
S <- vector(mode = "numeric", length = length(X))
S[1] <- 0
delta <- ewmac(X, gamma, lambda)
for ( t in 2:length(X) ) {
delta.plus <- max(delta.min, delta[t])
S[t] <- max(0, S[t-1] + delta.plus*(X[t]-delta.plus/2) )
}
return(S)
}
#_________________________________________________________________#
## Fonction acusumc.c1.mild
acusumc.c1.mild <- function(X, gamma, lambda, delta.min) {
S <- vector(mode = 'numeric', length = length(X))
S[1:7] <- acusumc(X[1:7], gamma, lambda, delta.min)
for (i in 8:length(X)) {
X1 <- X[i-7:i]
S1 <- acusumc(X1, gamma, lambda, delta.min)
S[i] <- S1[8]
}
return(S)
}
#_________________________________________________________________#
# Série simulée suivant une loi normale de paramètre (mu,1) (N(mu,1))
mu <- 0
X <- rnorm(n = 100, mean = mu, sd = 1)
gamma <- 2
lambda <- 0.25
delta.min <- 1
delta <- ewmac(X, gamma, lambda)
S <- acusumc(X, gamma, lambda, delta.min)
S.c1.mild <- acusumc.c1.mild(X, gamma, lambda, delta.min) |
Partager