Pour analyser les données d'une expérience de biophysique, j'essaie actuellement de faire un ajustement de courbe avec un modèle hautement non linéaire. La fonction modèle ressemble essentiellement à:
Ici, la valeur de est particulièrement intéressante.
Un tracé pour cette fonction:
(Notez que la fonction de modèle est basée sur une description mathématique approfondie du système et semble fonctionner très bien --- c'est juste que les ajustements automatisés sont délicats).
Bien sûr, la fonction du modèle est problématique: les stratégies d'ajustement que j'ai essayées jusqu'à présent échouent en raison de l'asymptote nette à , en particulier avec des données bruyantes.
Ma compréhension du problème ici est que l'ajustement des moindres carrés simples (j'ai joué avec une régression linéaire et non linéaire dans MATLAB; principalement Levenberg-Marquardt) est très sensible à l'asymptote verticale, car les petites erreurs dans x sont énormément amplifiées .
Quelqu'un pourrait-il m'indiquer une stratégie appropriée qui pourrait contourner cela?
J'ai quelques connaissances de base en statistiques, mais c'est encore assez limité. Je serais impatient d'apprendre, si seulement je savais où commencer à chercher :)
Merci beaucoup pour vos conseils!
Modifier Je vous demande pardon d'avoir oublié de mentionner les erreurs. Le seul bruit significatif est en , et c'est additif.
Edit 2 Quelques informations supplémentaires sur l'arrière-plan de cette question. Le graphique ci-dessus modélise le comportement d'étirement d'un polymère. Comme @whuber l'a souligné dans les commentaires, vous avez besoin de pour obtenir un graphique comme ci-dessus.
Quant à la façon dont les gens ont ajusté cette courbe jusqu'à ce point: il semble que les gens coupent généralement l'asymptote verticale jusqu'à ce qu'ils trouvent un bon ajustement. Le choix de la coupure reste cependant arbitraire, ce qui rend la procédure d'ajustement peu fiable et non reproductible.
Modifier le graphique fixe 3 & 4 .
la source
Réponses:
Les méthodes que nous utiliserions pour ajuster cela manuellement (c'est-à-dire l'analyse exploratoire des données) peuvent fonctionner remarquablement bien avec de telles données.
Je souhaite re- paramétrer légèrement le modèle afin de rendre ses paramètres positifs:
Pour un donné , supposons qu'il existe un vrai x unique satisfaisant cette équation; appelons cela f ( y ; a , b ) ou, pour être bref, f ( y ) lorsque ( a , b ) sont compris.y X F( y;a,b) f(y) ( a , b )
Nous observons une collection de paires ordonnées où les x i s'écartent de f ( y i ; a , b ) par des variations aléatoires indépendantes avec des moyennes nulles. Dans cette discussion, je suppose qu'ils ont tous une variance commune, mais une extension de ces résultats (en utilisant les moindres carrés pondérés) est possible, évidente et facile à mettre en œuvre. Voici un exemple simulé d'une telle collection de 100 valeurs, avec a = 0,0001 , b = 0,1 , et une variance commune de σ( xje, yje) Xje F( yje; a , b ) 100 a = 0,0001 b = 0,1 .σ2= 4
Il s'agit d'un exemple (délibérément) difficile, comme peuvent l'apprécier les valeurs non physiques (négatives) et leur extraordinaire dispersion (qui est généralement de ± 2 unités horizontales , mais peut aller jusqu'à 5 ou 6 sur l' axe x ). Si nous pouvons obtenir un ajustement raisonnable à ces données qui se rapproche de l'estimation des a , b et σ 2 utilisés, nous aurons bien réussi.X ± 2 5 6 X une b σ2
Un raccord exploratoire est itératif. Chaque étage est constitué de deux étapes: estimer (basé sur les données et les estimations précédentes un et b de a et b , à partir de laquelle les valeurs précédentes prédites x Au i peut être obtenue pour le x i ) et ensuite estimer b . Étant donné que les erreurs sont en x , les ajustements estiment le x i à partir de ( y i ) , plutôt que l'inverse. Ordonner d'abord les erreurs dans x , quand xune une^ b^ une b X^je Xje b Xje ( yje) X X est suffisamment grand,
Par conséquent, nous pouvons mettre à jour un en ajustant ce modèle avec des moindres carrés (avis , il n'a qu'un seul paramètre - une pente, une --et pas ordonnée à l' origine) et en prenant l'inverse du coefficient que l'estimation mise à jour d' un .une^ une une
Ensuite, lorsque est suffisamment petit, le terme quadratique inverse domine et nous trouvons (là encore au premier ordre dans les erreurs) queX
Encore une fois des moindres carrés (avec juste un terme de pente ) on obtient une estimation mise à jour b par la racine carrée de la pente aménagée.b b^
Pour voir pourquoi cela fonctionne, une approximation exploratoire grossière de cet ajustement peut être obtenue en traçant contre 1 / y 2 i pour le plus petit x i . Mieux encore, parce que les x i sont mesurés avec erreur et les y i changent de façon monotone avec les x i , nous devons nous concentrer sur les données avec les plus grandes valeurs de 1 / y 2 i . Voici un exemple de notre jeu de données simulé montrant la plus grande moitié du y iXje 1 / an2je Xje Xje yje Xje 1/y2i yi en rouge, la plus petite moitié en bleu, et une ligne passant par l'origine correspond aux points rouges.
Les points s'alignent approximativement, bien qu'il y ait un peu de courbure aux petites valeurs de et y . (Remarquez le choix des axes: parce que x est la mesure, il est classique de la tracer sur l' axe vertical .) En focalisant l'ajustement sur les points rouges, où la courbure doit être minimale, nous devons obtenir une estimation raisonnable de b . La valeur de 0,096 indiquée dans le titre est la racine carrée de la pente de cette ligne: elle n'est que de 4 % inférieure à la valeur réelle!x y x b 0.096 4
À ce stade, les valeurs prévues peuvent être mises à jour via
Itérer jusqu'à ce que les estimations se stabilisent (ce qui n'est pas garanti) ou qu'elles parcourent de petites plages de valeurs (qui ne peuvent toujours pas être garanties).
Il y a quelques problèmes avec cette approche:
Les estimations sont biaisées. Le biais devient apparent lorsque l'ensemble de données est petit et que relativement peu de valeurs sont proches de l'axe des x. L'ajustement est systématiquement un peu bas.
Code
Ce qui suit est écrit en Mathematica .
x
y
data = {x,y}
la source
Voir les questions importantes @probabilityislogic postées
-
Modifiez pour prendre en compte les informations supplémentaires:
Nous avons maintenant que les erreurs sont en x et additives. Nous ne savons toujours pas si la variance est constante à cette échelle.
Je ne suis pas sûr que cela améliore les choses! Je crois qu'il existe des méthodes pour ce genre de chose, mais ce n'est pas du tout mon domaine.
J'ai mentionné dans les commentaires que vous aimeriez peut-être examiner la régression inverse, mais la forme particulière de votre fonction peut vous empêcher d'aller trop loin.
Vous pourriez même être coincé avec des méthodes assez robustes à erreurs dans x sous cette forme linéaire.
-
la source
Après quelques semaines d'expérimentation, une technique différente semble fonctionner le mieux dans ce cas particulier: l' ajustement des moindres carrés totaux . C'est une variante de l'ajustement habituel (non linéaire) des moindres carrés, mais au lieu de mesurer les erreurs d'ajustement le long d'un seul des axes (ce qui pose des problèmes dans des cas hautement non linéaires comme celui-ci), il prend en compte les deux axes.
Il existe une pléthore d'articles, de tutoriels et de livres disponibles sur le sujet, bien que le cas non linéaire soit plus difficile à cerner. Il y a même du code MATLAB disponible.
la source