Comment choisir les valeurs initiales pour l'ajustement des moindres carrés non linéaires


13

La question ci-dessus dit tout. Fondamentalement, ma question concerne une fonction d'ajustement générique (qui pourrait être arbitrairement compliquée) qui sera non linéaire dans les paramètres que j'essaie d'estimer, comment choisit-on les valeurs initiales pour initialiser l'ajustement? J'essaie de faire des moindres carrés non linéaires. Existe-t-il une stratégie ou une méthode? Cela a-t-il été étudié? Des références? Autre chose que des suppositions ad hoc? Plus précisément, en ce moment, l'une des formes d'ajustement avec lesquelles je travaille est une forme gaussienne plus linéaire avec cinq paramètres que j'essaie d'estimer, comme

y=Ae(xBC)2+Dx+E

où (données en abscisses) et (données en ordonnées), ce qui signifie que dans l'espace log-log, mes données ressemblent à une ligne droite plus une bosse que je rapproche d'un gaussien. Je n'ai pas de théorie, rien pour me guider sur la façon d'initialiser l'ajustement non linéaire, sauf peut-être un graphique et un globe oculaire comme la pente de la ligne et quel est le centre / la largeur de la bosse. Mais j'ai plus de cent de ces ajustements à faire au lieu de représenter graphiquement et de deviner, je préférerais une approche qui peut être automatisée. y = log 10x=log10y=log10

Je ne trouve aucune référence, dans la bibliothèque ou en ligne. La seule chose à laquelle je peux penser est de choisir simplement au hasard les valeurs initiales. MATLAB propose de choisir des valeurs au hasard parmi [0,1] uniformément réparties. Donc, avec chaque ensemble de données, j'exécute l'ajustement initialisé au hasard mille fois, puis je choisis celui avec le le plus élevé ? D'autres (meilleures) idées?r2


Addendum # 1

Tout d'abord, voici quelques représentations visuelles des ensembles de données juste pour vous montrer de quel type de données je parle. Je poste à la fois les données dans leur forme d'origine sans aucune sorte de transformation, puis sa représentation visuelle dans l'espace log-log car elle clarifie certaines caractéristiques des données tout en déformant d'autres. Je publie un échantillon de bonnes et de mauvaises données.

bonnes données log-log bonnes données mauvaises données log-log mauvaises données

Chacun des six panneaux de chaque figure montre quatre ensembles de données tracés ensemble en rouge, vert, bleu et cyan et chaque ensemble de données a exactement 20 points de données. J'essaie d'adapter chacun d'eux avec une ligne droite plus un gaussien à cause des bosses observées dans les données.

Le premier chiffre fait partie des bonnes données. La deuxième figure est le tracé log-log des mêmes bonnes données de la figure un. Le troisième chiffre fait partie des mauvaises données. La quatrième figure est le diagramme log-log de la figure trois. Il y a beaucoup plus de données, ce ne sont que deux sous-ensembles. La plupart des données (environ 3/4) sont bonnes, similaires aux bonnes données que j'ai montrées ici.

Maintenant, je vous prie de faire quelques commentaires, car cela pourrait être long, mais je pense que tous ces détails sont nécessaires. J'essaierai d'être aussi concis que possible.

Je m'attendais à l'origine à une loi de puissance simple (ce qui signifie une ligne droite dans l'espace log-log). Lorsque j'ai tout tracé dans l'espace log-log, j'ai vu la bosse inattendue à environ 4,8 MHz. La bosse a été minutieusement étudiée et a été découverte dans d'autres travaux, donc ce n'est pas que nous avons foiré. Il est physiquement là et d'autres ouvrages publiés le mentionnent également. Alors j'ai juste ajouté un terme gaussien à ma forme linéaire. Notez que cet ajustement devait être fait dans l'espace log-log (d'où mes deux questions dont celle-ci).

Maintenant, après avoir lu la réponse de Stumpy Joe Pete à une autre de mes questions (pas du tout liée à ces données) et lu ceci et cela et les références qui s'y trouvent (trucs de Clauset), je me rends compte que je ne devrais pas tenir dans le log-log espace. Alors maintenant, je veux tout faire dans un espace pré-transformé.

Question 1: En regardant les bonnes données, je pense toujours qu'un linéaire plus un gaussien dans un espace pré-transformé est toujours une bonne forme. J'aimerais entendre d'autres personnes qui ont plus d'expérience en données ce qu'elles pensent. Est-ce que gaussien + linéaire est raisonnable? Dois-je seulement faire un gaussien? Ou une forme entièrement différente?

Questions 2: Quelle que soit la réponse à la question 1, j'aurais toujours besoin (très probablement) de moindres carrés non linéaires donc j'ai encore besoin d'aide pour l'initialisation.

Les données où nous voyons deux ensembles, nous préférons très fortement capturer la première bosse à environ 4-5 mHz. Je ne veux donc pas ajouter plus de termes gaussiens et notre terme gaussien devrait être centré sur la première bosse qui est presque toujours la plus grosse bosse. Nous voulons "plus de précision" entre 0,8 MHz et environ 5 MHz. Nous ne nous soucions pas trop des fréquences plus élevées, mais nous ne voulons pas non plus les ignorer complètement. Alors peut-être une sorte de pesée? Ou B peut-il toujours être initialisé autour de 4,8 MHz?

Les données en abscisses sont la fréquence en unités de millihertz, désignons-la par . Les données de coordonnées est un coefficient nous calculons, désignent par . Donc, pas de transformation de journal, et le formulaire estLfL

L=Ae(fBC)2+Df+E.
  • f est la fréquence, est toujours positif.
  • L est un coefficient positif. Nous travaillons donc dans le premier quadrant.
  • A > 0 AA , l'amplitude devrait toujours être positive aussi, je pense parce que nous avons juste affaire à des bosses. Quand je regarde les données, je vois toujours des pics et pas de vallées. Il semble que dans toutes les données, il y ait plusieurs bosses à des fréquences plus élevées. La première bosse est toujours beaucoup plus grande que les autres. Dans les bonnes données, les bosses secondaires sont très faibles mais dans les mauvaises données (panel 2 et 5 par exemple), les bosses secondaires sont fortes. Nous n'avons donc pas de vallée, mais plutôt deux bosses. Cela signifie que l'amplitude . Et puisque nous nous soucions surtout du premier pic, raison de plus pour que soit positif.A>0A
  • B est le centre de la bosse et nous le voulons toujours sur cette grosse bosse autour de 4-5 MHz. Dans notre gamme de fréquences résolues, il apparaît presque toujours à 4,8 MHz.
  • C - CC est la largeur de la bosse. J'imagine qu'il est symétrique autour de zéro, ce qui signifie que aurait le même effet que car il est carré. Nous ne nous soucions donc pas de sa valeur. Disons que nous le préférons positif.CC
  • D est la pente de la ligne, il semble qu'elle pourrait être légèrement négative, ce qui ne lui impose aucune restriction. La pente est intéressante en soi, donc au lieu d'imposer des restrictions, nous voulons juste voir ce que ce serait. Est-ce positif ou négatif? Quelle est sa taille / son ampleur? etc.
  • L E L f = 0E est le (presque) -intercept. La chose subtile ici est qu'en raison du terme gaussien, n'est pas tout à fait le -intercept. L'ordonnée à l'origine réelle (si nous extrapolions à ) seraitLELf=0

Ae(B/C)2+E.

Donc, la seule restriction ici est que l'interception doit également être positive. L'interception étant nulle, je ne sais pas ce que cela signifierait. Mais le négatif semblerait certainement absurde. Je suppose que nous pouvons ici permettre à d'être légèrement négatif avec une petite amplitude si nécessaire. La raison pour laquelle et l'interception est importante ici, mais certains de nos collègues sont également intéressés par l'extrapolation. La fréquence minimale que nous avons est de 0,8 MHz et ils veulent extrapoler entre 0 et 0,8 MHz. Mon idée naïve était de simplement utiliser l'ajustement pour descendre jusqu'à .E f = 0EEf=0

Je sais que l'extrapolation est plus difficile / plus dangereuse que l'interpolation, mais l'utilisation d'une ligne droite plus un gaussien (en espérant qu'elle se désintègre assez rapidement) me semble raisonnable. Un peu comme des splines cubiques naturelles avec des conditions aux limites naturelles, la pente au point d'extrémité gauche, il suffit de prolonger la ligne et de voir où elle traverse l' axeS'il n'est pas négatif, utilisez cette ligne pour l'extrapolation.L

Questions 3: Que pensez-vous d'extrapoler de cette façon dans ce cas? Des avantages / inconvénients? D'autres idées d'extrapolation? Encore une fois, nous ne nous soucions que des fréquences plus basses, donc extrapolant entre 0 et 1 MHz ... parfois des fréquences très très petites, proches de zéro. Je sais que ce message est déjà emballé. J'ai posé cette question ici parce que les réponses peuvent être liées, mais si vous préférez, je peux séparer cette question et en poser une autre plus tard.

Enfin, voici deux exemples de jeux de données sur demande.

0.813010000000000   0.091178000000000   0.012728000000000
1.626000000000000   0.103120000000000   0.019204000000000
2.439000000000000   0.114060000000000   0.063494000000000
3.252000000000000   0.123130000000000   0.071107000000000
4.065000000000000   0.128540000000000   0.073293000000000
4.878000000000000   0.137040000000000   0.074329000000000
5.691100000000000   0.124660000000000   0.071992000000000
6.504099999999999   0.104480000000000   0.071463000000000
7.317100000000000   0.088040000000000   0.070336000000000
8.130099999999999   0.080532000000000   0.036453000000000
8.943100000000001   0.070902000000000   0.024649000000000
9.756100000000000   0.061444000000000   0.024397000000000
10.569000000000001   0.056583000000000   0.025222000000000
11.382000000000000   0.052836000000000   0.024576000000000
12.194999999999999   0.048727000000000   0.026598000000000
13.008000000000001   0.045870000000000   0.029321000000000
13.821000000000000   0.041454000000000   0.067300000000000
14.633999999999999   0.039596000000000   0.081800000000000
15.447000000000001   0.038365000000000   0.076443000000000
16.260000000000002   0.036425000000000   0.075912000000000

La première colonne est les fréquences en mHz, identiques dans chaque ensemble de données. La deuxième colonne est un bon ensemble de données (bonnes données, figures 1 et 2, panneau 5, marqueur rouge) et la troisième colonne est un mauvais ensemble de données (mauvaises données, figures 3 et 4, panneau 5, marqueur rouge).

J'espère que cela suffit pour stimuler une discussion plus éclairée. Merci à tous.


+1 pour des informations supplémentaires, mais maintenant cela ressemble à une nouvelle question. Soit dit en passant, si vous souhaitez supprimer le précédent maintenant, je pense que ce serait correct, il semble que vous ayez maintenant couvert les informations supplémentaires qu'il possédait.
Glen_b -Reinstate Monica

@Glen_b Pourquoi en est-il ainsi? Pourquoi cela ressemble-t-il à une nouvelle question? En ce qui concerne la vieille question, nous avons tous putain de points ;-D et l'ancienne a deux votes positifs, est-il possible de la fusionner avec cela afin que je puisse garder ces deux votes aussi?
Fixed Point

Eh bien pour commencer, vous demandez maintenant ce que vous devriez adapter, plutôt que de spécifier ce qui convient, comme auparavant. Il existe un certain nombre d'autres différences, dont certaines me semblent assez importantes. Je vais essayer de changer ma réponse, mais je pense que celle-ci pourrait être la question et la réponse d'origine et vos nouvelles parties où vous posez d'autres choses pourraient être nouvelles. Je laisse cela à votre jugement pour le moment.
Glen_b -Reinstate Monica

@Glen_b Très bien, j'ai supprimé les questions supplémentaires. Donc, les questions sont toujours, j'ai quelques données que je veux ajuster en utilisant une forme linéaire + gaussienne, puis-je faire mieux que l'initialisation aléatoire?
Fixed Point

Je pense que ma réponse actuelle montre que - dans au moins certaines circonstances - vous pouvez faire mieux, et @whuber suggère quelque chose d'encore plus simple que mon processus. Je pourrais revenir en arrière et voir comment ce que j'ai sur vos données, mais tel qu'il est actuellement, cela donne une idée de la façon de définir de tels points de départ.
Glen_b -Reinstate Monica

Réponses:


10

S'il y avait une stratégie qui était à la fois bonne et générale - une qui fonctionnait toujours - elle serait déjà mise en œuvre dans chaque programme des moindres carrés non linéaires et les valeurs de départ ne seraient pas un problème.

Pour de nombreux problèmes spécifiques ou familles de problèmes, il existe de très bonnes approches pour les valeurs de départ; certains packages sont livrés avec de bons calculs de valeur de départ pour des modèles non linéaires spécifiques ou avec des approches plus générales qui fonctionnent souvent mais peuvent devoir être aidées avec des fonctions plus spécifiques ou une entrée directe des valeurs de départ.

L'exploration de l'espace est nécessaire dans certaines situations, mais je pense que votre situation est susceptible d'être telle que des stratégies plus spécifiques seront probablement valables - mais pour concevoir une bonne nécessite à peu près beaucoup de connaissances de domaine que nous ne possédons probablement pas.

Pour votre problème particulier, de bonnes stratégies probables peuvent être conçues, mais ce n'est pas un processus trivial; plus vous avez d'informations sur la taille et l'étendue probables du pic (les valeurs de paramètres typiques et les typiques donneraient une idée), plus vous pouvez faire pour concevoir un bon choix de valeur de départ.x

Quelles sont les gammes typiques de et vous obtenez? À quoi ressemblent les résultats moyens? Quels sont les cas inhabituels? Quelles valeurs de paramètres savez-vous être possibles ou impossibles?xyx

Un exemple - la partie gaussienne génère-t-elle nécessairement un tournant (un pic ou un creux)? Ou est-il parfois si petit par rapport à la ligne qu'il ne l'est pas? est toujours positif? etc.A

Quelques exemples de données pourraient aider - des cas typiques et des cas difficiles, si vous le pouvez.


Edit: Voici un exemple de comment vous pouvez faire assez bien si le problème n'est pas trop bruyant:

Voici quelques données générées à partir de votre modèle (les valeurs de population sont A = 1,9947, B = 10, C = 2,828, D = 0,09, E = 5):

nls data

Les valeurs de départ que j'ai pu estimer sont
(As = 1,658, Bs = 10,001, Cs = 3,053, Ds = 0,0881, Es = 5,026)

L'ajustement de ce modèle de départ ressemble à ceci:

nlstart

Les étapes étaient les suivantes:

  1. Ajustez une régression de Theil pour obtenir une estimation approximative de D et E
  2. Soustraire l'ajustement de la régression de Theil
  3. Utilisez LOESS pour ajuster une courbe lisse
  4. Trouvez le pic pour obtenir une estimation approximative de A, et la valeur x correspondant au pic pour obtenir une estimation approximative de B
  5. Prendre les ajustements LOESS dont les valeurs y sont> 60% de l'estimation de A comme observations et ajuster un quadratique
  6. Utilisez le quadratique pour mettre à jour l'estimation de B et pour estimer C
  7. À partir des données originales, soustrayez l'estimation de la gaussienne
  8. Ajuster une autre régression de Theil à ces données ajustées pour mettre à jour l'estimation de D et E

Dans ce cas, les valeurs sont très appropriées pour démarrer un ajustement non linéaire.

J'ai écrit cela sous forme de Rcode mais la même chose pourrait être faite dans MATLAB.

Je pense que de meilleures choses que cela sont possibles.

Si les données sont très bruyantes, cela ne fonctionnera pas du tout bien.


Edit2: C'est le code que j'ai utilisé dans R, si quelqu'un est intéressé:

gausslin.start <- function(x,y) {

  theilreg <- function(x,y){
    yy <- outer(y, y, "-")
    xx <- outer(x, x, "-")
    z  <- yy / xx
    slope     <- median(z[lower.tri(z)])
    intercept <- median(y - slope * x)
    cbind(intercept=intercept,slope=slope)
  }

  tr <- theilreg(x,y1)
  abline(tr,col=4)
  Ds = tr[2]
  Es = tr[1]
  yf  <- y1-Ds*x-Es
  yfl <- loess(yf~x,span=.5)

  # assumes there are enough points that the maximum there is 'close enough' to 
  #  the true maximum

  yflf   <- yfl$fitted    
  locmax <- yflf==max(yflf)
  Bs     <- x[locmax]
  As     <- yflf[locmax]

  qs     <- yflf>.6*As
  ys     <- yfl$fitted[qs]
  xs     <- x[qs]-Bs
  lf     <- lm(ys~xs+I(xs^2))
  bets   <- lf$coefficients
  Bso    <- Bs
  Bs     <-  Bso-bets[2]/bets[3]/2
  Cs     <- sqrt(-1/bets[3])
  ystart <- As*exp(-((x-Bs)/Cs)^2)+Ds*x+Es

  y1a <- y1-As*exp(-((x-Bs)/Cs)^2)
  tr  <- theilreg(x,y1a)
  Ds  <- tr[2]
  Es  <- tr[1]
  res <- data.frame(As=As, Bs=Bs, Cs=Cs, Ds=Ds, Es=Es)
  res
}

.

# population parameters: A = 1.9947 , B = 10, C = 2.828, D = 0.09, E = 5
# generate some data
set.seed(seed=3424921)
x  <- runif(50,1,30)
y  <- dnorm(x,10,2)*10+rnorm(50,0,.2)
y1 <- y+5+x*.09 # This is the data
xo <- order(x)

starts <- gausslin.start(x,y1)
ystart <- with(starts, As*exp(-((x-Bs)/Cs)^2)+Ds*x+Es)
plot(x,y1)
lines(x[xo],ystart[xo],col=2)

3
+1. Répéter l'ajustement mille fois et choisir le meilleur (si je comprends bien) semble une idée étrange: les moindres carrés non linéaires devraient converger si le modèle est raisonnable pour les données et qu'il existe de bonnes valeurs initiales. Naturellement, le second est ce que vous demandez. Mais il semble pessimiste d'impliquer que vous devrez peut-être choisir différentes valeurs de départ pour chaque ajustement.
Nick Cox

1
@NickCox Cela se résume à la gamme de problèmes rencontrés - si je me souviens directement des messages précédents, l'OP obtient un grand nombre de ces problèmes, mais je ne me souvenais pas d'avoir vu suffisamment de détails pour faire de bonnes suggestions auparavant, bien que j'aie investi un peu de le temps de jouer avec les approches potentielles (qui n'ont rien donné de suffisamment définitif pour poster). L'OP possède probablement le type de connaissance de domaine qui pourrait donner de bonnes valeurs de départ qui résolvent presque toujours ses problèmes.
Glen_b -Reinstate Monica

1
Tout à fait. J'ai raté le post précédent sur stats.stackexchange.com/questions/61724/…
Nick Cox

3
+1 J'ai eu un bon succès en utilisant une version légèrement simplifiée de cela. Au lieu de la régression de Theil, ajustez simplement une ligne en utilisant les points les plus extrêmes à droite et à gauche (3 à chaque extrémité font bien). Après avoir soustrait cette ligne et lissé étroitement , la plage des estimations lisses, l'emplacement des estimations maximales (en supposant ) et peut être estimé à partir de la proportion de valeurs lissées dépassant une fraction importante de , comme . Vous devez le faire deux fois : une fois en supposant et à nouveau (avec les modifications appropriées) en supposant .|A|BA>0CA1/4A>0A<0
whuber

2
C'était aussi la première chose à laquelle j'ai pensé. Mon raisonnement à l'époque, qui a été confirmé par des simulations (qui incluent des tests où est proche des extrêmes du domaine), est que dans la plupart des cas, vous pouvez toujours obtenir des valeurs de départ raisonnables pour les paramètres, quel que soit l'endroit où la bosse est . Le nœud du problème est d'identifier , je crois: après cela, la procédure d'ajustement devrait avoir peu de mal à estimer les autres paramètres. BB
whuber

6

Il existe une approche générale pour ajuster ce type de modèles non linéaires. Il s'agit de reparamétrer les paramètres linéaires avec des valeurs de la variable dépendante disons la première, la dernière valeur de fréquence et un bon point au milieu disons le 6ème point. vous pouvez ensuite maintenir ces paramètres fixes et résoudre le paramètre non linéaire dans la première phase de la minimisation, puis minimiser les 5 paramètres globaux.

Schnute et moi l'avons compris vers 1982 lors de l'ajustement des modèles de croissance pour les poissons.

http://www.nrcresearchpress.com/doi/abs/10.1139/f80-172

Cependant, il n'est pas nécessaire de lire ce document. Du fait que les paramètres sont linéaires, il est simplement nécessaire de mettre en place et de résoudre un système d'équations linéaires 3x3 pour utiliser la paramétrisation stable du modèle.

Pour votre modèle, la partie linéaire est déterminée par une matriceM

n=20

M=(exp(((x(1)B)/C)2)x(1)1exp(((x(6)B)/C)2)x(6)1exp(((x(n)B)/C)2)x(n)1)
où dans ce cas. 1 Le code est écrit dans AD Model Builder qui est maintenant open source. Il fait une différenciation automatique et prend en charge de nombreuses choses qui facilitent l'optimisation non linéaire, telles que les phases où différents paramètres sont maintenus fixes.n=20
DATA_SECTION
  init_int n
  int mid
 !! mid=6;
  init_matrix data(1,n,1,3)
  vector x(1,n)
  vector y(1,n)
 !! x=column(data,1);
 !! y=column(data,3);   //use column 3
PARAMETER_SECTION
  init_number L1(3)     //(3) means estimate in phase 3
  init_number Lmid(3)
  init_number Ln(3)

  vector L(1,3)
  init_number log_B       // estimate in phase 1
  init_number log_C(2)    // estimate in phase 2 
  matrix M(1,3,1,3);
  objective_function_value f
  sdreport_vector P(1,3)
  sdreport_number B
  sdreport_number C
  vector pred(1,n);
PROCEDURE_SECTION
  L(1)=L1;
  L(2)=Lmid;
  L(3)=Ln;
  B=exp(log_B);
  C=exp(log_C);
  M(1,1)=exp(-square((x(1)-B)/C));
  M(1,2)=x(1);
  M(1,3)=1;
  M(2,1)=exp(-square((x(mid)-B)/C));
  M(2,2)=x(mid);
  M(2,3)=1;
  M(3,1)=exp(-square((x(n)-B)/C));
  M(3,2)=x(n);
  M(3,3)=1;

  P=solve(M,L);  // solve for standard parameters 
                 // P is vector corresponding to A,D,E

  pred=P(1)*exp(-square((x-B)/C))+P(2)*x+P(3);
  if (current_phase()<4)
    f+=norm2(y-pred);
  else
    f+=0.5*n*log(norm2(y-pred))  //concentrated likelihood

Le modèle est adapté en trois phases. Dans la phase 1, seul est estimé. Ici , la chose la plus importante est que est suffisamment grand pour que le modèle peut « voir » où se déplacer à. Dans la phase 2, et sont estimés. Enfin, dans la phase 3, tous les paramètres sont estimés. Dans le graphique, la ligne verte est l'ajustement après la phase 1 et la ligne bleue est l'ajustement final.C B B CBCBBC

entrez la description de l'image ici

Pour votre cas avec les mauvaises données, il s'adapte assez facilement et les estimations de paramètres (habituelles) sont:

         estimate    std dev
A      2.0053e-01 5.8723e-02
D      1.6537e-02 4.7684e-03
E     -1.8197e-01 7.3355e-02
B      3.0609e+00 5.0197e-01
C      5.6154e+00 9.4564e-01]

Dave, c'est intéressant, mais cela soulève quelques questions. Qu'entendez-vous exactement par «ce genre de modèles non linéaires»? La question commence par faire référence à une «fonction d'ajustement générique», mais votre description ne fait référence qu'à «5 paramètres globaux».
whuber

Je veux dire des modèles comme le vonbertalanffy, ou logistique ou exponentielle double par exemple. Dans tous les cas, le modèle est linéaire dans certains paramètres et non linéaire dans d'autres. Les gens essaient généralement de les transformer pour obtenir un paramétrage plus stable en se concentrant sur les paramètres non linéaires. Cependant, c'est la mauvaise approche. C'est la paramétrisation linéaire qui doit être modifiée. Ainsi, par exemple, pour une logistique à 4 paramètres, le modèle est linéaire dans l'asymptote supérieure et inférieure, mais plutôt que d'utiliser ces paramètres, il faut utiliser les valeurs prévues pour l'ind plus petit et le plus grand. var.
dave fournier

@davefournier Merci d'avoir répondu et de pointer votre article. Votre document semble un peu difficile à obtenir, mais la technique semble intéressante, alors vous avez hâte de le lire.
point fixe

2

Si vous devez le faire plusieurs fois, je vous suggère d'utiliser un algorithme évolutionnaire sur la fonction SSE comme frontal pour fournir les valeurs de départ.

D'autre part, vous pouvez utiliser GEOGEBRA pour créer la fonction en utilisant des curseurs pour les paramètres et jouer avec eux pour obtenir les valeurs de départ.

OU les valeurs de départ à partir des données peuvent être estimées par observation.

  1. D et E proviennent de la pente et de l'ordonnée à l'origine des données (en ignorant le gaussien)
  2. A est la distance verticale du maximum de la gaussienne par rapport à l'estimation de la ligne Dx + E.
  3. B est la valeur x du maximum de la gaussienne
  4. C est la moitié de la largeur apparente de la gaussienne

1

Pour les valeurs de départ, vous pouvez faire un ajustement des moindres carrés ordinaires. Sa pente et son ordonnée à l'origine seraient les valeurs de départ pour D et E. Le plus grand résidu serait la valeur de départ pour A. La position du plus grand résidu serait la valeur de départ pour B. Peut-être que quelqu'un d'autre peut suggérer une valeur de départ pour sigma.

Cependant, les moindres carrés non linéaires sans dériver aucune sorte d'équation mécanistique de la connaissance du sujet sont des affaires risquées, et faire beaucoup d'ajustements séparés rend les choses encore plus discutables. Y a-t-il des connaissances en la matière derrière votre équation proposée? Existe-t-il d'autres variables indépendantes liées aux différences entre les quelque 100 ajustements séparés? Il pourrait être utile si vous pouvez incorporer ces différences dans une seule équation qui s'adaptera à toutes les données à la fois.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.