Exemple Complétion

repDonnees="~/Protocole_uHMM/Protocole_NA"
Un exemple de ce protocole avec un jeu de données artifiel est réalisé. (cf Onglet Complétion). Les données sont créées de manière alèatoire avec pour seule contrainte la dispersion des points comprise entre 4 et 5. L'ajout de valeur manquante (NA= Not Available) est volontaire.

La série de données est nommée "x" et est représentée graphiquement. Les traits verticaux représentent les emplacements des NA.

x=rep(4,16)+runif(16,0,1)
x=c(NA,x[1:5],NA,x[6:12],NA,x[13:16],NA)
indNA=which(is.na(x))

plot of chunk x

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)); indNA
## [1]  1  7 15 20

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

nb.indNA=length(indNA); nb.indNA
## [1] 4

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

nb.x=length(x); nb.x
## [1] 20

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); 
      }
    }
  }
}

plot of chunk xcomplete