Je fais des recherches mais je suis resté bloqué au stade de l'analyse (j'aurais dû prêter plus d'attention à mes conférences de statistiques).
J'ai collecté deux signaux simultanés: débit intégré pour le volume et changement d'expansion thoracique. J'aimerais comparer les signaux et j'espère finalement tirer le volume du signal d'expansion thoracique. Mais je dois d'abord aligner / synchroniser mes données.
Comme l'enregistrement ne démarre pas exactement au même moment et que l'expansion thoracique est capturée pendant des périodes plus longues, je dois trouver les données qui correspondent à mes données de volume dans l'ensemble de données d'expansion thoracique et avoir une mesure de leur alignement. Je ne sais pas trop comment procéder si les deux signaux ne démarrent pas exactement au même moment, ou entre des données à différentes échelles et à différentes résolutions.
J'ai joint un exemple des deux signaux ( https://docs.google.com/spreadsheet/ccc?key=0As4oZTKp4RZ3dFRKaktYWEhZLXlFbFVKNmllbGVXNHc ), veuillez me faire savoir s'il y a autre chose que je pourrais fournir.
la source
Réponses:
La question demande comment trouver l'ampleur d'une série temporelle ("expansion") par rapport à une autre ("volume") lorsque les séries sont échantillonnées à intervalles réguliers mais différents .
Dans ce cas, les deux séries présentent un comportement raisonnablement continu, comme le montrent les figures. Cela implique (1) peu ou pas de lissage initial peut être nécessaire et (2) le rééchantillonnage peut être aussi simple qu'une interpolation linéaire ou quadratique. Quadratique peut être légèrement meilleur en raison de la douceur. Après le rééchantillonnage, le décalage est trouvé en maximisant la corrélation croisée , comme indiqué dans le fil de discussion. Pour deux séries de données échantillonnées avec décalage, quelle est la meilleure estimation du décalage entre elles? .
Pour illustrer , nous pouvons utiliser les données fournies dans la question, en utilisant
R
pour le pseudocode. Commençons par les fonctionnalités de base, la corrélation croisée et le rééchantillonnage:Il s'agit d'un algorithme grossier: un calcul basé sur FFT serait plus rapide. Mais pour ces données (impliquant environ 4000 valeurs), c'est assez bon.
J'ai téléchargé les données sous forme de fichier CSV séparé par des virgules et supprimé son en-tête. (L'en-tête a causé des problèmes pour R que je n'ai pas voulu diagnostiquer.)
NB Cette solution suppose que chaque série de données est dans l'ordre temporel sans aucune lacune dans l'une ou l'autre. Cela lui permet d'utiliser des index dans les valeurs en tant que proxys pour le temps et de mettre à l'échelle ces index en fonction des fréquences d'échantillonnage temporelles pour les convertir en temps.
Il s'avère que l'un ou les deux de ces instruments dérivent un peu avec le temps. Il est bon de supprimer ces tendances avant de continuer. De plus, comme il y a une diminution du signal de volume à la fin, nous devons le couper.
Je rééchantillonne la série la moins fréquente afin d'obtenir le plus de précision possible du résultat.
Maintenant, la corrélation croisée peut être calculée - pour plus d'efficacité, nous ne recherchons qu'une fenêtre raisonnable de décalages - et le décalage où la valeur maximale est trouvée peut être identifié.
La sortie nous indique que l'expansion est en retard de 1,85 seconde. (Si les 3,5 dernières secondes de données n'étaient pas écrêtées, la sortie serait de 1,84 seconde.)
C'est une bonne idée de tout vérifier de plusieurs façons, de préférence visuellement. Tout d'abord, la fonction de corrélation croisée :
Ensuite, enregistrons les deux séries dans le temps et plaçons-les ensemble sur les mêmes axes .
Ça a l'air plutôt bien! Cependant, nous pouvons avoir une meilleure idée de la qualité d'enregistrement avec un nuage de points . Je fais varier les couleurs dans le temps pour montrer la progression.
Nous recherchons les points à suivre dans les deux sens le long d'une ligne: les variations qui reflètent les non-linéarités dans la réponse temporelle de l'expansion au volume. Bien qu'il existe quelques variantes, elles sont assez petites. Pourtant, la façon dont ces variations changent au fil du temps peut présenter un certain intérêt physiologique. Ce qui est merveilleux avec les statistiques, en particulier leur aspect exploratoire et visuel, c'est la façon dont elles ont tendance à créer de bonnes questions et idées ainsi que des réponses utiles .
la source
acf
fonction de R.R
lorsque j'ai posté cette réponse et j'ai juste oublié de fournir une définition pour cette fonction. Voici l'original:normalize <- function(x) { x.max <- max(x); x.min <- min(x); dx <- x.max - x.min; if (dx==0) dx <- 1; (x-x.min) / dx }