[NonLinear Regression] Affidabilità dei parametri di fitting

elgiovo
Uso MATLAB (cftool) per fittare dei dati sperimentali secondo una relazione del tipo

\(\displaystyle y = -\beta \ln\left(1+\frac{x}{x_0}\right) \)

con $\beta$ e $x_0$ parametri di fitting. Di solito i punti che ho a disposizione sono 7-8, spaziati più o meno logaritmicamente sull'asse $x$, da $x_{min}$ a $x_{max}$.

Il mio problema è capire se i parametri che ho estratto possono essere ritenuti "affidabili", nel senso che se avessi dati (oltre a quelli già a disposizione) per $x > x_{max}$ non subirebbero variazioni.

Per spiegare meglio, un esempio (che ha fatto sorgere la domanda). Nella figura che segue, ci sono due curve sperimentali, in nero, con i relativi fitting, in rosso. La scala è logaritmica nell'asse x. In questa scala, il parametro $x_0$ dice dove la curva inizia a piegare verso il basso, mentre $\beta$ indica la pendenza della curva dopo il piegamento, ed è il vero parametro d'interesse ($x_0$ è legato a ritardi dell'apparato sperimentale).

Come si vede anche a occhio, il $\beta$ estratto dai dati più in alto è all'incirca la metà di quello dei dati in basso (e da qui uno fa delle considerazioni fisiche sul processo in analisi).
Ora però, shiftando all'indietro la curva più alta, ovvero scalando il suo $x_0$ di un certo fattore (siamo su scala log) si osserva questo:

In sostanza, i dati "shiftati" sembrano in accordo con quelli della curva bassa, anche se si fittano con un $\beta$ che è la metà. Questo ovviamente mi ha fatto chiedere quale sia l'affidabilità del $\beta$ estratto. Il criterio più banale che viene in mente è vedere se il valore di $x_{max}$ sia almeno un ordine di grandezza più grande dell'$x_0$ estratto, in modo che nel logaritmo il termine $1$ diventi trascurabile e l'andamento sia rettilineo su scala log, ma questo non è un criterio buono, perché gli $x_0$ che estraggo effettivamente lo soddisfano. In sostanza, l'algoritmo ai minimi quadrati può essere "ingannato" restituendo in output dei valori di $\beta$ e $x_0$ più piccoli di quelli effettivi. Ho controllato anche l'intervallo di confidenza al 95% dei parametri, ma non mi sembra dare grosse indicazioni sull'affidabilità, perché del resto anche quello sulla curva superiore è un buon fitting.

Se qualcuno avesse indicazioni da darmi..
Grazie.

Risposte
Raptorista1
Credo che questo sia più un problema da statistici...
Se aspetti 25 giorni, dovrei saperti rispondere :D

elgiovo
"Raptorista":
Credo che questo sia più un problema da statistici...
Se aspetti 25 giorni, dovrei saperti rispondere :D


Misa che hai ragione Max, potrei aver sbagliato sezione. Allora aspetterò con ansia :-D

elgiovo
"Sergio":
Non so se posso aiutarti, ma non riesco a capire una cosa: \(x_0\) è un parametro da stimare oppure un parametro che puoi controllare?


Ciao Sergio, $x_0$ è un parametro da stimare, al pari di $\beta$.

elgiovo
"Sergio":

In alcuni settori della statistica il modo più efficace per trattare piccoli campioni consiste nell'adottare un approccio bayesiano, ma è un po' delicato e, quanto a me, non ho esperienza dell'approccio bayesiano alla regressione non lineare.


E se uno considerasse di fittare i dati in funzione di $log(x+x_0)$? In questo modo la regressione è di tipo lineare, con la "fregatura" che $x_0$ è anch'esso un parametro di fitting. Non escludo la possibilità di andare per tentativi (un ciclo for) su $x_0$, in fin dei conti la procedura di fitting su pochi punti è molto poco onerosa in termini di tempo.

elgiovo
Vi faccio vedere anche un'analisi che avevo fatto su un set di dati con moltissimi punti (l'unico che ho a disposizione, gli altri set sono tutti da 7-8 punti). Siccome ritengo che con tutti questi punti il valore estratto di $\beta$ e di $x_0$ sia pienamente affidabile, "sottocampionando" questi dati in modo da avere solo 7-8 punti volevo trovare un criterio di "accettazione/rifiuto" del fitting, a posteriori (intendo: faccio il fitting sui miei 7-8 punti, poi in base a qualche formula sui parametri estratti dico se il fitting è da considerarsi affidabile. In caso contrario, lo rifiuto).



Le curve verdi sono ottenute tutte dallo stesso set di dati, però facendo variare l'$x_0$ (non sto qui a dirvi come lo faccio o vi confonderei le idee). Concentriamoci sulla prima, quella più in basso. Consideriamo un valore fissato sull'asse $x$, chiamiamolo $x_{max}$. Ho preso 8 punti spaziati logaritmicamente sulla curva verde tra $x=0$ e $x = x_{max}$ (in modo da emulare i set di dati meno numerosi) e ho fittato la curva. Poi ho ripetuto l'analisi facendo variare $x_{max}$.
Il risultato è il seguente, per $\beta$ (per $x_0$ il grafico è del tutto analogo):



La curva nera continua è il $\beta$ estratto, le due tratteggiate sono gli intervalli di confidenza al 95%, la rossa tratteggiata è costante ed è il valore estratto fittando tutti i punti (super-affidabile). Come vedete, per questo $x_0 = 0.14$ il valore estratto di $\beta$ con 8 punti è uguale a quello esatto anche con $x_{max}$ molto piccolo (c'è solo un piccolo assestamento iniziale).

Ho fatto variare poi $x_0$, secondo una quantità a me nota. Ad esempio, consideriamo la curva con $x_0 = 66.26$. In questo caso, sono certo che questo sia il valore corretto di $x_0$. Per fare questo devo buttare via dei dati dalla curva verde più in basso, ma comunque sono in grado di sottocampionarla agevolmente. Il risultato è il seguente per $\beta$ (analogo per $x_0$):



In questo caso, per $x_{max}>100$ il valore si assesta attorno a quello corretto, ma con gravi oscillazioni all'inizio. Questo perché $x_0$ è diventato comparabile con $x_{max}$, quindi la curva non entra abbastanza "a regime" se $x_{max}$ non è almeno pari a $x_0$. Il fitting è comunque soddisfacente, perché il valore di $\beta$ estratto non è molto lontano da quello reale: nella figura sopra con le curve verdi, in rosso ho riportato i fitting relativi all'ultimo $x_{max}$. Come vedete, le curve rosse (tranne l'ultima) sono parallele "a regime".

Per la curva con $x_0 = 194.42$ avviene la catastrofe:



In questo caso, vi è una sottostima sia di $x_0$ che di $\beta$ (in valore assoluto). In effetti, la curva rossa più in alto nella prima figura devia clamorosamente rispetto alle altre. Il problema però è che il fitting dei dati è molto buono, infatti gli intervalli di confidenza non sono troppo ampi rispetto ai valori estratti, e siccome $x_0$ viene sottostimato anche la condizione $x_{max}>x_0$ viene rispettata ampiamente. In sostanza, non riesco a capire da qui un criterio per l'accettazione o il rifiuto del fitting.

Se siete arrivati fin qui (senza barare) vi meritate quantomeno un gelato.

elgiovo
"Sergio":

Non so per altri, ma quello che confonde me è invece proprio questa vaghezza :wink:
Non a caso la prima cosa che ti ho chiesto è se \(x_0\) è un parametro da stimare o un parametro sotto il tuo controllo. Mi hai detto che è da stimare, ma se puoi farlo variare allora è sotto il tuo controllo.
Se ti va, mi piacerebbe capire meglio.


Ci mancherebbe, anzi scusa se non sono stato chiaro a sufficienza. A questo punto ti dico com'è tutta la storia per filo e per segno. Ho un parametro fisico (una tensione $V$) che inizia a decrescere al tempo assoluto $t=0$, secondo una legge del tipo $V(t)=V_0-\beta \ln t$. Per motivi sperimentali, non si può monitorare questa tensione da $t=0$ ma da un certo $t=x_0>0$. A partire da $x_0$, il dato viene letto a tempi $x$ contati a partire da $x_0$, quindi $x=0$ quando $t = x_0$. In questo modo $x = t - x_0$ (in altri termini, $x$ è un nuovo riferimento temporale con origine in $x_0$). Su quanto valga $x_0$ c'è incertezza, non è dato saperlo con precisione, mentre i tempi $x_1,x_2,\ldots$ ai quali si hanno i dati sono ben noti (non lo sono invece i tempi $t_1,t_2,\ldots$ perché c'è di mezzo $x_0$). A questo punto calcolo le differenze $y_n = V(x_n)-V(x_0)$ (uso $x$ e $y$ per uniformità con i miei post precedenti, tanto a questo punto il significato fisico non è più importante). Calcolo queste differenze perché non mi interessa il valore assoluto di $V$ ma le sue variazioni. Poiché $V(t)=V_0-\beta \ln t$ si ha che

\(\displaystyle y_n = V_0-\beta \ln(x_n + x_0) - (V_0 - \beta\ln(x_0)) = -\beta \ln\left(1+\frac{x_n}{x_0}\right) \)

A questo punto, per trovare il $\beta$ a partire dai dati a disposizione, li fitto con questa legge, considerando però anche $x_0$ come parametro di fitting.

Nel caso dei dati in verde, molto fitti, ho trovato $\beta$ e $x_0$, fittando la curva più in basso. Questi parametri li considero "certi". Da questo set di dati volevo vedere sotto quali condizioni il fitting si allontana da quello giusto, facendo variare $x_0$ in maniera del tutto artificiale facendo le differenze rispetto a letture successive invece che rispetto alla prima (immagino fosse questo il punto delicato, scusa ancora per la confusione). Ad esempio, se faccio le differenze rispetto alla 20-sima lettura, avrò un nuovo $x_0' = x_0 + x_{20}$, mentre invece il $\beta$ rimane lo stesso. E' così che ho ottenuto le altre curve verdi, le quali sono dunque figlie dello stesso set di dati. Per vedere se l'algoritmo di fitting ci sta beccando o no, a questo punto confronto i valori estratti con quelli corretti, ovvero $\beta$ e $x_0'$ (per quanto detto, $x_0'$ cambia per ogni curva, però è noto con precisione).

Spero di aver fatto chiarezza. La risposta che mi hai dato (grazie!) la analizzo domani o in tarda serata e ti faccio sapere.

elgiovo
"Sergio":

La situazione sarebbe diversa se i dati si riferissero in qualche modo a situazioni diverse

...

Se si trattasse di capire se i 7-8 punti si riferiscono a un fenomeno analogo ma diverso, allora sarebbe un'altra musica


Si, è così. Quei dati in verde, molto fitti, li ho a disposizione per un solo esperimento, mentre per tutti gli altri esperimenti ho a disposizione solo 7-8 punti. Ogni esperimento però è fatto in condizioni diverse, quindi mi aspetto un $\beta$ e un $x_0$ diversi da prova a prova. Ho fatto quelle elaborazioni sui "dati verdi" (nel tuo esempio, i dati alle latitudini temperate) per cercare di desumere da questi un criterio di accettazione/rifiuto che poi potessi applicare a tutti gli altri dati, purtroppo meno fitti e quindi più incerti (nel tuo esempio, i dati ai poli). L'idea di applicare un approccio bayesiano (che conoscevo solo per sentito dire) mi interessa molto! Se mi dici che può tornarmi utile potrei senz'altro approfondire.

ti interessa la variazione della tensione


Qui il termine che ho usato è stato poco felice: non mi interessa la "variazione" nel senso della derivata, ma proprio la differenza rispetto al valore di partenza: $\Delta V(x_n)= V(x_n) - V(x_0)$.

Ottengo cioè il modello stimato \(v=139.83-1.99x\). Mi interessa la variazione di \(v\)? Semplice: \(\displaystyle \frac{dv}{dt}=-1.99 \), valore molto vicino al valore "vero", quello usato per generare i dati.


In questo caso quindi hai fittato con una retta i valori della tensione. Dai due grafici che riporti, però mi sembra che non sia del tutto chiaro (faccio mea culpa) il tipo di dato che ho a disposizione: il primo pezzo, quello orizzontale, non c'è. La situazione è analoga a quella del primo grafico, ma da $t=0$ in poi, e se l'asse orizzontale è in scala logaritmica. Anche nel secondo grafico vanno tolti i punti iniziali in orizzontale, e poi la situazione è quella rappresentata se il tempo è in scala lineare.

a) mi terrei ben stretta la stima buona (quella verde in basso) e non proverei a "inquinarla" aumentando \(x_0\);


Qui spero che ora ti sia più chiaro cosa stavo cercando di fare. Lungi da me l'intenzione di inquinare la stima aumentando $x_0$. Semplicemente stavo cercando di riprodurre, a partire da dei dati di cui conosco il $\beta$ e l'$x_0$, una situazione in cui l'algoritmo di fitting sbaglia a trovare i due parametri, per cercare di capire se i fitting negli altri casi, quelli con pochi punti, sono giusti o meno.

elgiovo
Ok. Ora si tratta di capire cosa vuol dire "in condizioni diverse".


E' la seconda che hai detto: "la diversità inerisce al fenomeno."
Non mi aspetto, infatti, dei \(\displaystyle \beta \) e $x_0$ diversi perché cambiano leggermente le condizioni di misura (che so, l'umidità della stanza). In questo caso mi aspetterei dei parametri piuttosto simili tra loro.
La diversità deriva dal tipo di esperimento che sta a valle della misura della tensione. In particolare, io ho un componente elettronico (una memoria) che viene sottoposto a stress (cicli di programmazione/cancellazione). Mi interessa capire come variano $\beta$ e $x_0$ al variare di alcune condizioni, come ad esempio il numero di cicli, la temperatura alla quale si fanno i cicli, la temperatura a cui si legge la tensione dopo i cicli, la velocità dei cicli, ecc.
Se ho capito un minimo l'approccio bayesiano da come l'hai introdotto (quando ho tempo dò uno sguardo al link) non so se faccia al caso mio, perché non posso "aggiornare" le stime precedenti in base ad altri dati, perché questi dati derivano da esperimenti totalmente differenti. Ovviamente se sbaglio (\(\displaystyle P \simeq 1 \) vista la mia conoscenza dell'argomento) correggimi.

In questo caso un'analisi "seria" dovrebbe tenere conto delle diversità. Il modo più semplice consiste nell'aggiungere una variabile esplicativa (o più di una): una variabile qualitativa per il materiale, oppure una quantitativa per la temperatura ecc. Vi sono però anche altri modi, che risultano più efficaci se per alcuni valori di queste variabili aggiunte hai pochi casi.
Se fosse questo il caso, se ne può parlare.


Si, direi che rientriamo in questo ambito. Ovviamente puoi anche solo indicarmi un riferimento bibliografico se lo hai, non voglio "rubarti" del tempo utile.

Potrebbe esserci un altro modo (un metodo un po' "a metà" tra l'approccio tradizione e quello bayesiano) per valutare i fit che ottieni con pochi punti: partire dalle stime con pochi punti, intenderle come distribuzioni di probabilità, campionare da quelle distribuzioni per vedere se sono coerenti con la stima "verde".


Non sono sicuro di avere capito bene. Da qui sembra che questo metodo valga nel caso in cui "la diversità rientra nella componente aleatoria" (il primo dei due casi del tuo post precedente). Quindi, ad esempio, facendo un numero elevato di simulazioni e osservando che i fitting ottenuti sui dati numerosi sono contenuti in quelli sui dati sparsi, puoi concludere che i dati sparsi non sono incompatibili con quelli numerosi.

se avessi usato 8 osservazioni prese "in condizioni diverse" avrei potuto osservare una qualche incompatibilità. Ad esempio, usando un altro valore del parametro (−1 invece di −2)...


Qui invece hai generato i dati da fittare con un $\beta$ dimezzato (quindi hai introdotto una diversità che i"nerisce al fenomeno", il secondo dei casi del post precedente) e poi hai cercato di vedere se anche in questo caso si ha una "non - incompatibilità". Questo può essermi d'aiuto nel caso in cui, invece che confinare la mia attenzione su un singolo set di dati, voglia verificare la compatibilità di due set distinti, entrambi di 7-8 punti. L'approccio devia un pò dalla mio problema originale (dato un fitting su un singolo set, capire se accettarlo o meno), ma è comunqe interessante, perché se guardi nel mio primo post, anche lì stavo cercando di capire se due set di dati fossero tra loro congruenti. A questo proposito, ti mostro un'analisi che ho fatto, in realtà simile ai tuoi "fasci di curve":



Le due curve a campana sono ottenute fittando i due set di dati nel mio primo post, imponendo però un valore di $\beta$ (quello che trovi in ascissa). In questo modo l'algoritmo di fitting deve trovare solo $x_0$. In ordinata plotto il coefficiente $R^2$ del fitting (matlab lo restituisce in automatico), che in qualche modo ne misura la qualità. Se lascio anche $\beta$ come parametro di fitting l'algoritmo trova i punti corrispondenti ai massimi delle due campane, che tra loro sono separati di molto. La retta rossa orizzontale indica un limite ($R^2=0.95$) che ho fissato io, a occhio, sulla qualità del fitting. Per valori di $R^2<0.95$ ho giudicato che i fitting sono un pò troppo "forzati". A questo punto, osservo che in effetti un piccolo intervallo di compatibilità tra i due set di dati esiste (tra le due rette verticali tratteggiate al centro), con un $\beta$ a metà strada tra i due picchi. Questo metodo però non mi convince del tutto, perché la larghezza delle campane è abbastanza imbarazzante con 7-8 punti (con i dati verdi invece la campana è bella stretta), e poi il "criterio a occhio" è, appunto, "a occhio".

elgiovo
E' interessante come per un'analisi statistica accurata si debbano considerare tutte le condizioni sperimentali: non era mia intenzione dire tutto sull'esperimento in questione (per brevità) ma a quanto pare è necessario. Scusami se non ho illustrato bene tutto in una volta.

"Sergio":
ho ipotizzato che il componente è uno solo e che i diversi esperimenti consistono nel sottoporre a stress quell'unico componente in condizioni diverse. Ho capito bene?


No, ho una popolazione di celle di memoria di cui vado a calcolare la variazione media della tensione. Se si va a vedere, cella per cella, il transitorio della tensione si ottengono curve molto poco regolari (con salti, cambi improvvisi, ecc.). Mediando sulla popolazione si ottengono quei transitori logaritmici (una spiegazione del logaritmo la possiedo in base a un mio modello probabilistico di recupero del danno). Ogni esperimento (temperatura diversa, cicli diversi, ecc.) è fatto su una popolazione diversa di celle. Questo per essere sicuri di partire sempre da una situazione "fresh" e di non "cumulare" il danneggiamento indotto dai cicli di esperimenti precedenti.

elgiovo
"Sergio":

b) le popolazioni di celle sono sostanzialmente equivalenti.

Direi questa. Anche se dopo i cicli può essere che lo "starting point" di due popolazioni (le celle vengono programmate su uno stato definito prima di cominciare a monitorare la tensione) sia un pò diverso mi sembra un'assunzione sensata.

elgiovo
"Sergio":

Quando provi a stimare, se risulta significativa solo l'intercetta allora vuol dire che le condizioni non incidono più di tanto, cioè che puoi intendere le differenze tra i \(\beta\) come casuali, non sistematiche, altrimenti puoi ritenere che i \(\beta\) sono diversi perché scaturiscono da condizioni \(z\) diverse.
Analogamente per \(x_0\).
Come ti suona?


Credo di aver capito, penso possa ritornarmi utile. Ovviamente questo si applica a set di dati abbastanza ampi (sempre 7-8 punti, ma a varie temperature, a vari livelli di ciclatura ecc.) e non a due sole curve, come nel mio primo post (?). Nelle regressioni lineari dei $\beta$ e degli $x_0$ i termini $\eta_{\beta}$ e $\eta_{x_0}$ immagino restino inclusi nel valore dell'intercetta. Per le variabili $z_i$ che sperimentalmente vengono variate su base logaritmica (il numero di cicli) si considera $z_i$ o $\log(z_i)$ nella regressione? Appena ho del tempo provo, visto che oltretutto è un conto semplice.

l'astronomo George Biddell Airy (1801-1892)


Ho dato uno sguardo alla storia. Spero di utilizzare i tuoi suggerimenti in modo solerte prima che qualche tedesco li sfrutti prima di noi e si prenda il merito :D

elgiovo
Eccomi qua! Come prima cosa mi sono concentrato sui cicli, perché ho più punti a disposizione per $\beta_i$ e $x_{0i}$ nella regressione lineare. Se ho fatto giusto vado anche sulle altre grandezze. Sto dunque mostrando i dati cambiando i cicli ma fissando le altre condizioni. Ad esempio, qui la temperatura di ciclatura è fissata e non sto considerando i dati ad altre temperature di ciclatura.

Questi sono i fitting non lineari. Le curve più in basso corrispondono a cicli più alti. Ho scalato sia l'asse $x$ che l'asse $y$ per un fattore di scala comune a tutti i grafici per motivi di riservatezza:



Questo è il risultato dello slopes as outcomes:



Ho considerato il logaritmo dei cicli per la regressione lineare, anche perché altrimenti si avrebbero praticamente tutti i punti addensati a Sx e un solo punto a Dx. Ti dico subito che questi dati, secondo un'intepretazione teorica, dovrebbero presentare tutti lo stesso $x_{0}$, perché sono ottenuti sullo stesso wafer (in punti diversi del wafer si fa un numero diverso di cicli, poi si "inforna" il wafer leggendolo negli stessi punti). Se questo aspetto è problematico posso passare ad analizzare altre grandezze $z_i$. In alto ho riportato i coefficienti $\gamma$ delle regressioni. Le intercette mi sembrano trascurabili.

elgiovo
"Sergio":
Se quelli sotto sono i grafici dei residui, "fanno abbastanza schifo" :wink:
Nel primo caso, \(\beta\), il motivo sembra evidente: sarebbe meglio una regressione quadratica. Sembra comunque chiaro che \(\beta\) tende a diminuire all'aumentare dei cicli.


Ehm... si, quasi... Ne ero già al corrente e me ne sono ricordato... mentre cenavo :-D
Effettivamente era più interessante vedere cosa succede con la temperatura.. Infatti, un risultato presente in letteratura è una cosa del tipo $\beta= k_1 + k_2\cdot cyc^{\frac{1}{2}}$, con $k_1$ e $k_2$ costanti (peraltro un'evidenza puramente empirica).
Purtroppo non ho a disposizione dati con $cyc > 10^4$ (è dura che una cella arrivi a $10^5$...)

Dal punto di vista statistico, occorrerebbe badare agli standard error, ovvero agli intervalli di confidenza, delle stime. Ad esempio, se l'intervallo di confidenza per γx1 comprendesse anche lo zero, allora i dati non sarebbero incompatibili con l'intepretazione teorica.


Ok allora domani gli dò uno sguardo (il programmino ce l'ho in ufficio)

Dal punto di vista della significatività sostanziale, da ignorante della materia trovo un po' curioso che consideri trascurabili le intercette e non γx1, quando in fondo γx1 è molto più vicino a γβ0 che a γβ1.


Se tu sei "ignorante" da un lato io lo sono dall'altro... Non immaginavo avesse senso confrontare i $\gamma$ relativi a due parametri distinti, e tra l'altro con diversa unità di misura. Le intercette le consideravo trascurabili in base all'andamento del fitting: "a occhio" le rette passano per l'origine.

temperatura e numero di cicli sono correlati?


Beh no, non dovrebbero. Nelle prove che si fanno si scelgono la temperatura (sia durante la ciclatura che durante la lettura) e il numero di cicli in modo indipendente tra loro.
Domani dò uno sguardo anche alla questione della temperatura. A questo punto però, perdona la cocciutaggine, ma ti ri-propongo la domanda iniziale: in base a quest'analisi, come posso (se posso) arrivare in qualche modo a dire che alcune delle regressioni sono "da scartare", da non considerare affidabili? Alla fine la dipendenza del $\beta$ dai cicli è abbastanza nota: posso usare quel tipo di relazione per capire se l'$x_0$ estratto è affidabile? Mi spiego meglio: se trovo una scarsa correlazione tra $cyc$ e $\beta$, posso affermare che ha poco senso guardare i parametri estratti da quei dati? Mi rendo conto che la mole di dati non è pienamente sufficiente (come mi fai notare :) ) per dire qualcosa con certezza, ma è quanto ho a disposizione.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.