je me suis inspiré d'un code que j'ai pu trouver sur le net mais je n'arrive pas à le faire tourner....
J'ai un vecteur y et je veux détecter les valeurs "grandes". Ce que je fais c'est pour la valeur en i, je prends les "lag" valeurs avant i et les "lag" valeur après i. Je calcul la moyenne et l'écart type de a= [ y[(i-lag):(i-lag)],y[(i+1):(i+lag)], et je regarde ensuite si y[i]- mean(a) > threshold*sd[a]
Si oui, alors je note 1, sinon 0.
Si quelqu'un pouvait voir où sont les erreurs, ça pourrait m'aider grandement, parce que je commence à perdre espoir...
merci :)
Code : Tout sélectionner
ThresholdingAlgo <- function(y,lag,threshold) {
signals <- rep(0,length(y))
filteredY <- y[0:2*lag]
avgFilter <- NULL
stdFilter <- NULL
avgFilter[lag] <- mean(y[0:2*lag])
stdFilter[lag] <- sd(y[0:2*lag])
for (i in (lag+1):(length(y)-lag)){
if (abs(y[i]-avgFilter[i]) > threshold*stdFilter[i]) {
signals[i] <- 1
filteredY[i] <- y[i]
avgFilter[i] <- mean(filteredY[(i-lag):(i-1)],filteredY[(i+1):(lag+1)])
stdFilter[i] <- sd(filteredY[(i-lag):(i-1)],filteredY[(i+1):(lag+1)])
} else {
signals[i] <- 0
filteredY[i] <- y[i]
avgFilter[i] <- mean(filteredY[(i-lag):(i-1)],filteredY[(i+1):(lag+i)])
stdFilter[i] <- sd(filteredY[(i-lag):(i-1)],filteredY[(i+1):(lag+i)])
}
}
return(list("signals"=signals,"avgFilter"=avgFilter,"stdFilter"=stdFilter))
}