Strategia per l'adattamento di funzioni altamente non lineari


12

Per analizzare i dati di un esperimento di biofisica, attualmente sto cercando di adattarmi alle curve con un modello altamente non lineare. La funzione del modello è sostanzialmente simile a:

y=ax+bx1/2

Qui, in particolare, il valore di è di grande interesse.b

Una trama per questa funzione:

Grafico delle funzioni

(Si noti che la funzione del modello si basa su una descrizione matematica completa del sistema e sembra funzionare molto bene --- è solo che gli adattamenti automatici sono difficili).

Naturalmente, la funzione del modello è problematica: le strategie di adattamento che ho provato finora, falliscono a causa del forte asintoto su , specialmente con dati rumorosi.x=0

La mia comprensione del problema qui è che il semplice adattamento dei minimi quadrati (ho giocato con la regressione sia lineare che non lineare in MATLAB; principalmente Levenberg-Marquardt) è molto sensibile all'asintoto verticale, perché i piccoli errori in x sono enormemente amplificati .

Qualcuno potrebbe indicarmi una strategia adeguata che potrebbe aggirare questo?

Ho una conoscenza di base delle statistiche, ma è ancora piuttosto limitata. Sarei desideroso di imparare, se solo sapessi da dove iniziare a cercare :)

Grazie mille per il tuo consiglio!

Modifica Chiedo scusa per aver dimenticato di menzionare gli errori. L'unico rumore significativo è in ed è additivo.x

Modifica 2 Alcune informazioni aggiuntive sullo sfondo di questa domanda. Il grafico sopra modella il comportamento di stiramento di un polimero. Come ha sottolineato @whuber nei commenti, è necessario per ottenere un grafico come sopra.b200a

Quanto a come le persone hanno adattato questa curva fino a questo punto: sembra che le persone generalmente tagliano l'asintoto verticale fino a quando non trovano una buona misura. La scelta del taglio è comunque arbitraria, rendendo la procedura di adattamento inaffidabile e irriproducibile.

Modifica grafico fisso 3 e 4 .


3
Gli errori arrivano in o in o entrambi? In quale forma prevedi che entri il rumore (moltiplicativo, additivo, ecc.)? yxy
Probislogic

2
@onnodb: La mia preoccupazione è, questo non potrebbe fondamentalmente mettere in discussione quanto sia solido il tuo modello stesso? Non importa quale sia il montaggio strategia si utilizza non sarà rimane altamente sensibile? Puoi mai avere una grande fiducia in tale stima per ? bbb
curious_cat

1
Sfortunatamente, non funzionerà ancora. Semplicemente non c'è possibile combinazione di e che sarà anche qualitativamente riprodurre il grafico che avete disegnato. (Ovviamente è negativo. deve essere inferiore al minimo pendenza nel grafico, ma positivo, che mette in un intervallo ristretto. Ma quando è in quell'intervallo, semplicemente non è sufficiente a superare l'enorme picco negativo l'origine introdotta dal termine .) Cosa hai disegnato? Dati? Qualche altra funzione? b b un un b x 1 / 2abbaabx1/2
whuber

1
Grazie, ma è ancora sbagliato. Estendendo la tangente a questo grafico all'indietro da qualsiasi punto dove , si intercetterà l'asse y in . Poiché il picco discendente a mostra che è negativo, anche questa intercetta y deve essere negativa. Ma nella tua figura è evidente che la maggior parte di tali intercettazioni sono positive, estendendosi fino a . Quindi è matematicamente impossibile che un'equazione come possa descrivere la tua curva , nemmeno approssimativamente. Come minimo devi inserire qualcosa come .x > 0 ( 0 , 3 b / ( 2 x 1 / 2 ) ) 0 b 15,5 y = a x + b x 1 / 2 y = a x + b x 1 / 2 + c(x,ax+bx1/2)x>0(0,3b/(2x1/2))0b15.5y=ax+bx1/2y=ax+bx1/2+c
whuber

1
Prima di fare qualsiasi lavoro su questo, volevo essere sicuro della dichiarazione della domanda: ecco perché è importante ottenere la funzione corretta. Non ho tempo di dare una risposta completa ora, ma vorrei sottolineare che "altre persone" potrebbero essere sbagliate - ma dipende da ancora più dettagli, ahimè. Se il tuo errore è veramente additivo, mi sembra che debba essere ancora fortemente eteroscedastico, altrimenti la sua varianza a piccoli valori di x sarebbe davvero minuscola. Cosa ci puoi dire - quantitativamente - di quell'errore? xx
whuber

Risposte:


10

I metodi che utilizzeremmo per adattarli manualmente (vale a dire di Exploratory Data Analysis) possono funzionare molto bene con tali dati.

Desidero rimodellare leggermente il modello per rendere positivi i suoi parametri:

y=axb/x.

Per un dato , supponiamo che ci sia un unico x reale che soddisfi questa equazione; chiama questo f ( y ; a , b ) o, per brevità, f ( y ) quando ( a , b ) sono compresi.yxf(y;a,b)f(y)(a,b)

Osserviamo una raccolta di coppie ordinate cui la x i si discosta da f ( y i ; a , b ) per variate casuali indipendenti con mezzi zero. In questa discussione assumerò che tutti abbiano una varianza comune, ma un'estensione di questi risultati (usando i minimi quadrati ponderati) è possibile, ovvia e facile da implementare. Ecco un esempio simulato di una tale raccolta di 100 valori, con a = 0,0001 , b = 0,1 e una varianza comune di σ(xi,yi)xif(yi;a,b)100a=0.0001b=0.1 .σ2=4

Trama dei dati

Questo è un esempio (deliberatamente) difficile, come si può apprezzare con i valori non fisici (negativi) e la loro straordinaria diffusione (che è in genere ± 2 unità orizzontali , ma può variare fino a 5 o 6 sull'asse x ). Se riusciamo ad ottenere una misura ragionevole di questi dati che si avvicina molto alla stima di a , b e σ 2 usati, avremo fatto davvero bene.x±2 56xabσ2

Un adattamento esplorativo è iterativo. Ogni fase consiste di due fasi: stimare (sulla base dei dati e precedenti stime un e b di un e b , da cui valori previsti precedenti X i può essere ottenuto per il x i ) e quindi stimare b . Poiché gli errori sono in x , gli accoppiamenti stimano la x i da ( y i ) , anziché viceversa. Al primo ordine negli errori in x , quando xaa^b^abx^ixibxi(yi)xx è sufficientemente grande,

xi1a(yi+b^x^i).

Pertanto, potremmo aggiornare un montando questo modello con i minimi quadrati (avviso ha un solo parametro - pendio, un --e non intercetta) e prendendo il reciproco del coefficiente come stima aggiornata di un .a^aa

Successivamente, quando è sufficientemente piccolo, il termine quadratico inverso domina e troviamo (di nuovo al primo ordine negli errori) chex

xib212a^b^x^3/2yi2.

Ancora una volta utilizzando i minimi quadrati (con solo un termine di pendenza ) otteniamo una stima aggiornata tramite la radice quadrata della pendenza adattata.bb^

Per capire perché funziona, è possibile ottenere un'approssimazione esplorativa approssimativa a questo adattamento tracciando contro per più piccolo . Meglio ancora, poiché viene misurato con errore e cambia monotonicamente con , dovremmo concentrarci sui dati con i valori maggiori di . Ecco un esempio del nostro set di dati simulato che mostra la metà più grande di in rosso, la metà più piccola in blu e una linea attraverso l'origine che si adatta ai punti rossi. 1 / y 2 i x i x i y i x i 1 / y 2 i y ixi1/yi2xixiyixi1/yi2yi

figura

I punti approssimativamente allineati, anche se c'è un po 'di curvatura ai piccoli valori di ed . (Nota la scelta degli assi: poiché è la misura, è convenzionale tracciarlo sull'asse verticale .) Focalizzando l'adattamento sui punti rossi, dove la curvatura dovrebbe essere minima, dovremmo ottenere una stima ragionevole di . Il valore di mostrato nel titolo è la radice quadrata della pendenza di questa linea: è solo il % in meno rispetto al valore reale!y x b 0,096 4xyxb0.0964

A questo punto i valori previsti possono essere aggiornati tramite

x^i=f(yi;a^,b^).

Iterate fino a quando le stime non si stabilizzano (cosa non garantita) o passano attraverso piccoli intervalli di valori (che non possono ancora essere garantiti).

x b un = 0.000196 0,0001axba^=0.0001960.0001b^=0.10730.1curva in grigio (tratteggiata) e (b) la curva stimata in rosso (solido):

Si adatta

3.734

Ci sono alcuni problemi con questo approccio:

  • Le stime sono distorte. Il bias diventa evidente quando il set di dati è piccolo e relativamente pochi valori sono vicini all'asse x. La vestibilità è sistematicamente un po 'bassa.

  • yiyi

  • ab


Codice

Quanto segue è scritto in Mathematica .

estimate[{a_, b_, xHat_}, {x_, y_}] := 
  Module[{n = Length[x], k0, k1, yLarge, xLarge, xHatLarge, ySmall, 
    xSmall, xHatSmall, a1, b1, xHat1, u, fr},
   fr[y_, {a_, b_}] := Root[-b^2 + y^2 #1 - 2 a y #1^2 + a^2 #1^3 &, 1];
   k0 = Floor[1 n/3]; k1 = Ceiling[2 n/3];(* The tuning constants *)
   yLarge = y[[k1 + 1 ;;]]; xLarge = x[[k1 + 1 ;;]]; xHatLarge = xHat[[k1 + 1 ;;]];
   ySmall = y[[;; k0]]; xSmall = x[[;; k0]]; xHatSmall = xHat[[;; k0]];
   a1 = 1/
     Last[LinearModelFit[{yLarge + b/Sqrt[xHatLarge], 
          xLarge}\[Transpose], u, u]["BestFitParameters"]];
   b1 = Sqrt[
     Last[LinearModelFit[{(1 - 2 a1 b  xHatSmall^(3/2)) / ySmall^2, 
          xSmall}\[Transpose], u, u]["BestFitParameters"]]];
   xHat1 = fr[#, {a1, b1}] & /@ y;
   {a1, b1, xHat1}
   ];

xydata = {x,y}a=b=0

{a, b, xHat} = NestWhile[estimate[##, data] &, {0, 0, data[[1]]}, 
                Norm[Most[#1] - Most[#2]] >= 0.001 &,  2, 100]

3
Questa è una risposta straordinaria; Sono molto obbligato! Ci ho giocato e i risultati sembrano molto promettenti. Avrò bisogno di un po 'più di tempo per comprendere appieno il ragionamento, però :) Inoltre: potrei contattarti attraverso il tuo sito web per una domanda (privata) aggiuntiva, riguardo ai riconoscimenti?
onnodb

3

Vedi le domande importanti pubblicate su @probabilityislogic

y=yxyx=x3/21/x

b

x

-

Modifica per considerare le informazioni aggiuntive:

y=b+ax

Ora abbiamo che gli errori sono in x e additivi. Non sappiamo ancora se la varianza sia costante su quella scala.

x=y/ab/a=my+c

xo=x+ηx

oxo

xo=c+my+ϵϵ=ζxy

Non sono sicuro che migliora le cose! Credo che ci siano metodi per questo genere di cose, ma non è affatto la mia area.

Nei commenti ho menzionato che potresti voler guardare la regressione inversa, ma la particolare forma della tua funzione può precludere di andare lontano.

Potresti anche essere bloccato nel provare metodi abbastanza robusti da errori in x in quella forma lineare.

-

y

x


x

2
" anche se gli errori sono in x " - yikes, è un po 'importante. Potresti voler controllare la regressione inversa.
Glen_b

3
x=13(2ya+21/3y2(27a4b22a3y3+3327a8b44a7b2y3)1/3+(27a4b22a3y3+3327a8b44a7b2y3)1/321/3a2)

xoxox+ζx=(thatmonster)+ϵϵ=ζ

x(y)yb

0

Dopo alcune settimane di sperimentazione, una tecnica diversa sembra funzionare al meglio in questo caso particolare: adattamento dei minimi quadrati totali . È una variante del consueto adattamento dei minimi quadrati (non lineare), ma invece di misurare errori di adattamento lungo solo uno degli assi (che causa problemi in casi altamente non lineari come questo), tiene conto di entrambi gli assi.

Ci sono molti articoli, tutorial e libri disponibili sull'argomento, sebbene il caso non lineare sia più sfuggente. È disponibile anche un codice MATLAB .


yy

@whuber Grazie per aver espresso le tue preoccupazioni! In questo momento, sto ancora lavorando su simulazioni per sondare l'affidabilità del raccordo TLS per questo problema. Ciò che ho visto finora, tuttavia, è che la considerazione di TLS di entrambe le variabili aiuta notevolmente a superare l'elevata non linearità del modello. I dati simulati sono affidabili e convergono molto bene. Tuttavia, è necessario fare più lavoro e dovrò sicuramente impilare il tuo metodo fino a questo, una volta che avremo a disposizione più dati effettivi --- e esamineremo in dettaglio le tue preoccupazioni.
onnodb,

OK - non dimenticare che ho preoccupazioni comparabili sul metodo che ho proposto!
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.