Lissage des données 2D

8

Les données sont constituées de spectres optiques (intensité lumineuse en fonction de la fréquence) enregistrés à différents moments. Les points ont été acquis sur une grille régulière en x (temps), y (fréquence). Afin d'analyser l'évolution du temps à des fréquences spécifiques (une montée rapide, suivie d'une décroissance exponentielle), je voudrais supprimer une partie du bruit présent dans les données. Ce bruit, pour une fréquence fixe, peut probablement être modélisé comme aléatoire avec une distribution gaussienne. À un moment fixe, cependant, les données montrent un type de bruit différent, avec de grandes pointes parasites et des oscillations rapides (+ bruit gaussien aléatoire). Autant que je puisse imaginer, le bruit le long des deux axes ne doit pas être corrélé car il a des origines physiques différentes.

Quelle serait une procédure raisonnable pour lisser les données? Le but n'est pas de déformer les données, mais de supprimer les artefacts bruyants "évidents". (et le sur-lissage peut-il être réglé / quantifié?) Je ne sais pas si le lissage dans une direction indépendamment de l'autre est logique, ou s'il vaut mieux lisser en 2D.

J'ai lu des choses sur l'estimation de la densité du noyau 2D, l'interpolation polynomiale / spline 2D, etc. mais je ne connais pas le jargon ou la théorie statistique sous-jacente.

J'utilise R, pour lequel je vois de nombreux packages qui semblent liés (MASS (kde2), champs (smooth.2d), etc.) mais je ne trouve pas beaucoup de conseils sur la technique à appliquer ici.

Je suis heureux d'en savoir plus, si vous avez des références spécifiques à me montrer (j'entends que MASS serait un bon livre, mais peut-être trop technique pour un non-statisticien).

Edit: Voici un spectrogramme factice représentatif des données, avec des coupes le long des dimensions de temps et de longueur d'onde.

image2d

L'objectif pratique ici est d'évaluer le taux de décroissance exponentielle dans le temps pour chaque longueur d'onde (ou bacs, si trop bruyant).

baptiste
la source
À combien de fréquences les mesures ont-elles été prises? Si ce n'est pas un grand nombre, pourrait-il être pratique de voir cela comme un ensemble de séries chronologiques individuelles (mais liées), une pour chaque fréquence spécifique?
Peter Ellis
@PeterEllis un grand nombre (disons 500, mais pour des raisons de généralité, il pourrait être encore plus grand)
baptiste
Mon intuition est de les traiter comme plus de 500 séries chronologiques corrélées et d'utiliser des techniques de séries temporelles comme la moyenne mobile ou le lissage exponentiel; et utilisez uniquement le lissage 2D par la suite et uniquement si cela est nécessaire pour une représentation graphique stylisée. Cependant, je n'ai pas suffisamment de données à l'appui pour en faire une "réponse" appropriée.
Peter Ellis
1
J'examinerais les méthodes «robustes». Ces méthodes tentent de pondérer les valeurs aberrantes. Par exemple, il existe un algorithme de spline robuste dans R.
user12719
y a-t-il quelque chose de spécifique à la variable temporelle qui fait des séries chronologiques un type particulier d'analyse statistique?
baptiste

Réponses:

4

Vous avez besoin de pour spécifier un modèle qui sépare le signal du bruit.

Il y a la composante du bruit au niveau de la mesure que vous supposez gaussienne. Les autres composants, dépendant des mesures:

  • "Ce bruit, pour une fréquence fixe, peut probablement être modélisé comme aléatoire avec une distribution gaussienne". Besoin de clarification - la composante de bruit est-elle commune à tous les points temporels, étant donné la fréquence? L'écart type est-il le même pour toutes les fréquences? Etc.

  • "À un moment fixe, cependant, les données montrent un type de bruit différent, avec de grandes pointes parasites et des oscillations rapides" Comment séparez-vous cela du signal, car vous êtes probablement intéressé par la variation de l'intensité à travers la fréquence. La variation intéressante est-elle en quelque sorte différente de la variation sans intérêt, et si oui, comment?

Les oscillations parasites ou le bruit non gaussien en général ne sont pas un gros problème, si vous avez une idée réaliste de ses caractéristiques. Il peut être modélisé en transformant les données (puis en utilisant un modèle gaussien) ou en utilisant explicitement une distribution d'erreur non gaussienne. La modélisation du bruit corrélé sur les mesures est plus difficile.

Selon la façon dont votre bruit et votre modèle de données sont, vous pourriez être en mesure de modéliser les données avec un outil à usage général comme les GAM dans le package mgcv, ou vous pourriez avoir besoin d'un outil plus flexible, ce qui conduit facilement à une configuration bayésienne assez personnalisée . Il existe des outils pour de tels modèles, mais si vous n'êtes pas statisticien, apprendre à les utiliser prendra un certain temps.

Je suppose que soit une solution spécifique à l'analyse spectrale soit le package mgcv sont vos meilleurs paris.

scellus
la source
Un bon conseil, merci, j'ai besoin de jeter un œil à ces options et de réfléchir plus attentivement à la description du bruit.
baptiste
1
Le bruit dans les spectres optiques dépend généralement de l'intensité de la lumière mesurée (le "comptage" des photons est un processus de Poisson) et souvent également de la longueur d'onde / fréquence (en raison des caractéristiques du détecteur). Il existe tout un tas de processus contribuant au bruit instrumental, voir par exemple Skoog & Leary: Principes de l'analyse instrumentale. Le type de bruit prédominant dépendra du type d'instrument (et de l'expérience). Le diagramme d au fil du temps montre une nette dépendance de la magnitude, suggérant que Baptiste a des mesures d'intensité (par opposition, par exemple, aux spectres d'absorbance).
cbeleites mécontents de SX
2

Une série temporelle de spectres me suggère une expérience cinétique , et il existe une quantité bien établie de littérature chimiométrique à ce sujet.

Que savez-vous des spectres? De quel type de spectres s'agit-il? Pouvez-vous raisonnablement vous attendre à n'avoir que deux espèces, éduit et produit?

Pouvez-vous raisonnablement supposer la bilinéarité, c'est-à-dire les spectres mesurés X à un moment donné sont une combinaison linéaire des concentrations de composants C fois le spectre des composants purs S:

X(nspc×nwl)=C(nspc×ncomp)S(ncomp×nwl)

Vous dites que vous voulez estimer une décroissance exponentielle (dans les concentrations). Ceci, associé à la bilinéarité, me suggère une résolution de courbe multivariée (MCR). Il s'agit d'une technique qui vous permet d'utiliser les informations dont vous disposez (par exemple, les spectres de composants purs de certaines substances ou les hypothèses sur le comportement de concentration comme la décroissance exponentielle) pendant l'ajustement du modèle.

Pour autant que je sache, il est assez courant de lisser les concentrations selon certains modèles, par exemple cinétiques, mais il est beaucoup moins courant de lisser les spectres. Cependant, l'algorithme permet de le faire. J'ai demandé à Anna en été s'ils imposaient des contraintes de lissage, mais elle m'a répondu que non (et les bons spectroscopistes détestent le lissage au lieu de mesurer de bons spectres ;-)). Souvent, ce n'est pas nécessaire non plus, car l'agrégation des informations de tous les spectres donnera déjà de bonnes estimations des spectres des composants purs.

J'ai fait des "spectres de composants" lisses (en fait, les composants principaux) deux fois récemment ( Dochow et al .: Dispositif Raman sur puce et fibres de détection avec réseau de Bragg pour l'analyse des solutions et des particules, LabChip, 2013 et Dochow el al. : Puce microfluidique de quartz pour l'identification des cellules tumorales par spectroscopie Raman en combinaison avec des pièges optiques, AnalBioanalChem, accepté) mais dans ces cas, mes connaissances spectroscopiques m'ont dit que j'étais autorisé à le faire. J'applique assez régulièrement une sous-échantillonnage et une interpolation de lissage à mes spectres Raman ( hyperSpec::spc.loess).

Comment savoir ce qu'est trop de lissage? Je pense que la seule réponse possible est "une connaissance approfondie du type de spectroscopie et d'expérience".


edit: J'ai relu la question, et vous dites que vous voulez estimer la décroissance à chaque longueur d'onde. Cependant, est-ce vrai ou voulez-vous estimer la décroissance de différentes espèces avec des spectres qui se chevauchent?

cbeleites mécontents de SX
la source
Merci pour les références. Bien que l'échantillon n'ait pas vraiment deux espèces, il est quelque peu similaire (deux processus physiques distincts à distinguer). J'y regarderai de plus près à mon retour d'une conférence.
baptiste
@baptiste: Bonne conférence. Ça vous dérange de dire quel genre de processus vous avez? Autrement dit, pouvez-vous supposer que "dans" chaque processus, les caractéristiques spectrales sont les mêmes, ou les oscillations peuvent-elles "se déplacer" sur le spectre (la fréquence est ambiguë si vous avez un modèle d'oscillation dans un spectre )?
cbeleites mécontents de SX
1

Les données sont constituées de spectres optiques (intensité lumineuse en fonction de la fréquence) enregistrés à des moments variables. Les points ont été acquis sur une grille régulière en x (temps), y (fréquence).

Pour moi, cela ressemble beaucoup à un cas pour l'analyse des données fonctionnelles (FDA), bien que je n'ai aucune idée de la physique derrière votre problème, et je peux me tromper complètement. Si vous pouvez considérer que le processus derrière vos données est intrinsèquement fluide et continu, vous pouvez utiliser une extension de fonction de base bivariée pour capturer vos mesures sous la formeintensity=f(time,frequency), avec fétant une somme de fonctions de base (par exemple les splines b) et de coefficients. Un ensemble limité de fonctions de base réduit directement la rugosité et annule donc une bonne partie du bruit blanc.

J'ai lu des choses sur l'estimation de la densité du noyau 2D, l'interpolation polynomiale / spline 2D, etc.

...

J'utilise R, pour lequel je vois de nombreux packages qui semblent liés (MASS (kde2), champs (smooth.2d), etc.) mais je ne trouve pas beaucoup de conseils sur la technique à appliquer ici.

Vous avez mentionné l'interpolation spline, mais vous n'avez pas mentionné le paquetage fda qui implémente assez bien et facilement l'accessibilité de la fonction de base que j'ai mentionnée ci-dessus. L'ensemble de mesures simultanées du temps, de la fréquence et de l'intensité (ordonné comme un tableau tridimensionnel) pourrait être capturé comme un objet de données fonctionnelles bivariées, voir. par exemple la fonction 'Data2fd'. De plus, plusieurs procédures de lissage sont disponibles dans l'emballage, toutes conçues pour annuler le bruit blanc ou la "rugosité" dans les mesures de processus intrinsèquement lisses.

L' article de Wikipedia formule le problème du bruit blanc dans la FDA comme suit:

Les données peuvent être si précises que l'erreur peut être ignorée, peuvent être sujettes à des erreurs de mesure substantielles ou même avoir une relation indirecte complexe avec la courbe qu'elles définissent. ... les relevés quotidiens des précipitations dans une station météorologique sont si variables qu'ils nécessitent des analyses minutieuses et sophistiquées afin d'extraire quelque chose comme une courbe de précipitation moyenne.

La FDA fournit les outils pour ces cas. Cela ne se traduit-il pas dans votre cas?

... mais je ne connais pas le jargon ou la théorie statistique sous-jacente ...

... mais je ne trouve pas beaucoup de conseils sur la technique à appliquer ici ...

Concernant la FDA: je n'étais pas non plus, mais le livre de Ramsay et Silverman sur FDA (2005) rend les bases très bien accessibles et Ramsay Hooker et Graves (2009) traduisent directement les idées du livre en code R. Les deux volumes devraient être disponibles sous forme de livres électroniques dans une bibliothèque universitaire de statistiques, biosciences, climatologie ou psychologie. Google affichera également d'autres liens que je ne peux pas publier ensemble ici.

Désolé de ne pas pouvoir fournir de solution plus directe à votre problème. Cependant, la FDA m'a beaucoup aidé une fois que j'ai compris à quoi cela sert.

user1966337
la source
c'est utile merci. J'espérais entendre une perspective plus globale que juste une technique particulière, mais si c'est celle que je devrais utiliser, c'est tout bon.
baptiste
Merci pour le crédit. Enfin, personne d'autre que vous-même ou vos collègues immédiats ne peuvent décider quelle est la méthodologie appropriée. Mais à la lumière de ce que vous avez décrit, je voudrais jeter un œil sur la FDA en général. Cela pourrait vous donner plus d'idées sur la façon d'analyser vos données.
user1966337
@ user1966337: Pour info, en spectroscopie optique, les intensités à des longueurs d'onde distinctes ont souvent une signification distincte, vous pouvez donc les traiter comme des variations pour un modèle bilinéaire (physiquement significatif) avec peu de composants, conduisant à un modèle plus restreint des données. Parfois, vous avez des effets qui ne le permettent pas et où la FDA serait plus appropriée.
cbeleites mécontents de SX le
1

Étant un simple physicien, pas un expert en statistiques, j'adopterais une approche simple. Les deux dimensions sont de natures différentes. Il serait logique de lisser le temps avec un algorithme et de lisser le long de la longueur d'onde avec un autre.

Les algorithmes réels que j'utiliserais: pour la longueur d'onde, Savitzky-Golay avec un ordre supérieur, 6 peut-être 8.

Avec le temps, si cet exemple est typique, ce saut soudain et ce déclin plus ou moins exponentiel le rendent délicat. J'ai eu des données expérimentales et des images bruyantes, juste comme ça. Si les méthodes simples et simples ne vous aident pas suffisamment, essayez un lisseur gaussien mais supprimez son effet près du saut, tel que détecté par un détecteur de bord. Lissez et élargissez la sortie du détecteur de bord, normalisez-le pour passer de 0,0 à 1,0 et utilisez-le pour sélectionner entre l'image d'origine et celle lissée gaussienne, pixel par pixel.

DarenW
la source
0

@baptiste: Je suis content que vous ayez ajouté l'intrigue comme je l'ai suggéré. Cela aide beaucoup:

Donc, si je comprends bien, votre objectif pratique est d'évaluer le taux de décroissance exponentielle pour chaque longueur d'onde; alors faisons-le! Définissez séparément une fonction que vous souhaitez minimiser pour chaque longueur d'onde et minimisez-la.

Regardons une seule longueur d'onde donnée, comme dans votre tracé en bas à droite.

Tout d'abord, pour plus de simplicité, jetons toutes les valeurs avant 0,2 seconde, car elles contiennent une discontinuité massive (notre approche peut être augmentée pour y faire face plus tard). Ensuite, définissez le critère d'optimisation suivant, qui vise à trouver la constante de décroissanceτ:

τ^=argminτti||eti/τdi||2

Vous pouvez résoudre ce problème d'optimisation de manière analytique en différenciant wrt τ, égal à zéro, et résoudre pour τ; ou vous pouvez utiliser un solveur.

Plus tard, si vous pensez que la longueur d'onde adjacente devrait avoir des constantes de désintégration similaires, vous pouvez l'incorporer dans un critère d'optimisation plus élaboré.

Si quelque chose, je vous suggère de lire un livre à lire absolument sur l'optimisation: l' optimisation convexe de Boyd .

J'espère que cela t'aides!

zorbar
la source
désolé mais il semble y avoir un malentendu: je connais l'optimisation non linéaire; ici, je voudrais savoir quelles techniques de lissage je peux utiliser sur de telles données lorsque l'ajustement à chaque longueur d'onde n'est pas fiable en raison du bruit dans les deux dimensions. Certes, mon exemple factice semble assez pratique, mais si j'avais ajouté plus de bruit, il aurait été plus difficile à visualiser. J'aime l'approche fda suggérée plus tôt, car elle englobe à la fois la partie ajustée et le lissage dans une méthodologie.
baptiste