Protocole

Un exemple de ce protocole avec un jeu de données artifiel est réalisé. (cf Protocole : Exemple de complétion). La série de données est nommée "x".

x=rep(4,16)+runif(16,0,1)
x=c(NA,x[1:5],NA,x[6:16],NA)

Les indices NA (Not Available=valeur manquante) des données x sont repérés, et mis dans le vecteur "indNA".

indNA=which(is.na(x))

Le nombre total de NA est calculé, ce qui correspond à la longueur du vecteur "indNA".

nb.indNA=length(indNA)

Le nombre de total de valeur est calculé, cela correspond à la longueur totale de "x".

nb.x=length(x)

La duplication des données "x" en "xcomplete" est effectuée pour éviter d'écrasser les données brutes.

xcomplete=x

Une boucle "for" est réalisée pour exécuter une moyenne. Cette moyenne est calculée à partir des 2 valeurs avant et des 2 valeurs après la valeur manquante.

2 remarques :

-Si la valeur manquante est la 1ère de la série, il prend alors la valeur de la donnée suivante, si ce n'est pas aussi une valeur manquante.

-Si la valeur manquante est la denière de la série, il prend alors la valeur de la donnée qui la précéde, si ce n'est pas aussi une valeur manquante.

delai=2
for(i in 1:nb.indNA){
  val=indNA[i];
  if(val<=delai){xcomplete[val]=x[val+1];#copie du suivant 
  }else{
    if(val>=(nb.x-delai)){xcomplete[val]=x[nb.x-1]; #copie du precedent
    }else{
      borneMin=max(1,val-delai); #les 2 valeurs avant le NA, avec comme minimum le début de la fenêtre à 1
      borneMax=min(val+delai,nb.x); #les 2 valeurs après le NA, avec comme maximum la fi de la fenêtre égale à la longueur de la série.
      if (sum(is.na(x[borneMin:borneMax]))<(borneMax-borneMin+1)){
        xcomplete[val]=mean(x[borneMin:borneMax],na.rm=T); 
      }
    }
  }
}