Regressione non lineare con parametri espansi per categorie<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao
Ho un set di dati che devo adattare utilizzando un modello non lineare, con quattro parametri di adattamento, A, B, C e D. Il set di dati (Y, colonna) deve essere separato utilizzando "Categorie", che è una colonna. Quindi, Y per ogni "Categoria" univoca è un insieme univoco di dati.
Ho bisogno di adattare tutti i dati e trovare i parametri A, B, C, D, con la condizione che ho bisogno di un C e D univoci per tutti i set di dati in tutte le "Categorie" mentre A, B possono variare tra le "Categorie".
Per questo, creo una colonna per il modello e creo i parametri C, D e per A e BI creo parametri con "Espandi in categorie, selezionando colonna" selezionato e seleziono "Categorie" per la colonna ed eseguo un adattamento di regressione non lineare . Ottengo C e D ottimali in tutte le categorie e A e B diversi tra le categorie.
La mia domanda è questa: come fa a trovare una C e una D UNICHE in tutte le categorie? Si adatta al set di dati corrispondente a ciascun set di dati e trova C1, D1, C2, D2 ecc. Per ogni set e successivamente prende la mediana/media o qualcos'altro?
Oppure trova l'intervallo di valori C e D e crea punti fini all'interno di C e D e adatta nuovamente tutti i set di dati e va sempre più fine finché l'errore non rientra nei limiti?
Ho bisogno di conoscere il metodo, perché voglio essere sicuro di fare quello che devo fare.
Grazie
Binoy
Re: Regressione non lineare con parametri espansi per categorieScusa per il ritardo. Pensavo avessimo finito!
Il mio post precedente mostra la formula con un comune B e beta e parametri condizionali attivi Categoria livelli. Cos'altro ti serve? Lo script nella mia prima risposta automatizza la creazione di tale formula. Non riesco a capire cos'altro potresti richiedere dal punto di vista del modello.
Stai chiedendo come il non lineare piattaforma risolve un tale problema (stimare i parametri)? Usa un procedura di ottimizzazione numerica e un funzione di perdita monitorare. Usa il dato valori di partenza e poi li varia per migliorare il risultato della funzione di perdita (minimizzazione). La funzione di perdita predefinita è somma degli errori al quadrato , o minimi quadrati .Monitora diverse misure di cambiamento per determinare quando convergenza si ottiene e si ferma.
Re: Regressione non lineare con parametri espansi per categorieCiao,
C'è qualche aggiornamento su questa domanda che ho posto?
Grazie
Binoy
Re: Regressione non lineare con parametri espansi per categorieCiao,
Conosco questo metodo per farlo manualmente. Capisco che sia abbastanza facile farlo manualmente. Tuttavia, ho bisogno di automatizzare il mio script come parte di un sistema più grande e quindi necessario.
Grazie per il vostro tempo e il vostro sforzo.
Binoy
Re: Regressione non lineare con parametri espansi per categorieEccellente!!! Ha funzionato come un incantesimo. Questa è solo la risposta per il mio post precedente (leggermente diverso dal post originale).
Grazie per il tuo tempo e la tua sceneggiatura.
Ora per la domanda bonus (in realtà la mia domanda originale 
In questo adattamento di regressione non lineare abbiamo 2 parametri B e beta che rimangono gli stessi per tutte le categorie, mentre P e R0 variano tra loro. Ora non stiamo specificando attraverso alcuna equazione come B e beta variano tra le categorie, quindi come fa JMP a trovare il miglior B e beta che funzioni per tutte le categorie? Qual è l'algoritmo utilizzato?
Grazie
Binoy
Re: Regressione non lineare con parametri espansi per categorieVoglio aggiungere alla mia risposta precedente dopo che Jeff Perkinson ha indicato un esempio simile a quello che vuoi fare. Non ci è chiaro se hai davvero bisogno di uno script per creare la formula del modello di cui hai bisogno. Selezionare Aiuto > Esempio di libreria di dati , apri il Esempi non lineari cartella e infine apri il file Alghe Mitscherlich tabella dati. Apri il Editor di formule con il Mitscherlich colonna. Dovrebbe sembrare come questo:

in questo caso, come nel tuo caso, i 2 parametri alfa e beta sono condizionati al Trattamento .
Apro il mock up dei tuoi dati che ho creato e seleziono coll > Nuova colonna... Lo chiamerò Modello e aggiungi un Formula proprietà della colonna. Creerò i parametri prima di usarli per creare la formula del modello. clicco Colonne della tabella in alto a sinistra e seleziona Parametri . clicco Nuovo parametro. .. ed entra B per il nome e assegnargli un valore iniziale di 2 , quindi fare clic OK . io creo beta = 0 nello stesso modo. Il B e beta i parametri sono incondizionati e il loro valore è comune a tutte le categorie.
Gli altri due parametri sono diversi. clicco Nuovo parametro , accedere R0 per il nome, 2 per il valore iniziale e selezionare Espandi in categorie, selezionando la colonna . clicco OK e quindi selezionare il Categoria colonna. Ora ho un parametro univoco per R0 per ogni categoria. Faccio la stessa cosa per il P parametro.
Costruisco la formula ora passando dall'elenco dei parametri all'elenco delle colonne della tabella per creare questa formula:

L'editor inserisce automaticamente l'espressione Match(...) quando si fa clic sul parametro raggruppato nell'elenco dei parametri. Quindi ora c'è una B, una beta e una R0 e P per ogni categoria.
Utilizzando questo approccio con il primo esempio Algae porta a questa formula:

Questo modello produce esattamente le stesse stime con Nonlinear della parametrizzazione originale.
Ti preghiamo di comprendere che potremmo aver interpretato erroneamente la tua domanda. Gli script sono potenti ma non sempre necessari.
Re: Regressione non lineare con parametri espansi per categorieHo usato tre principi per risolvere questo problema. Sembra facile ora, ma ci sono state alcune false partenze disordinate prima che riuscissi a farlo bene. Ho decodificato la formula del modello, ho diviso il problema in problemi più piccoli e ho costruito la soluzione dall'interno verso l'esterno. Si presuppone che siano presenti tre colonne di dati con nomi dati. Dovresti aggiungere una finestra di dialogo personalizzata se i nomi delle colonne cambiano tra le esecuzioni. Ma può ospitare un numero qualsiasi di categorie. Non so se Nonlinear sarà in grado di risolvere il modello quando si dispone di un numero elevato di categorie. Inoltre, potresti voler preparare un elenco di valori iniziali e utilizzare il mio esempio per utilizzare quelli univoci.
Non ho la tua tabella di dati ma il mio mock up di ciò che penso tu abbia (Categoria, rRelax, colonne tStress) ha funzionato.
/* presuppone che queste colonne esistano o crea una finestra di dialogo personalizzata per assegnarle alle variabili di script:
Categoria
tRilassati
tstress
*/
// trova tutte le categorie
categoria# = : Categoria << Ottieni valori ;
// costruisci la formula dall'interno verso l'esterno con le espressioni
corrispondenza espr p# = corrispondenza espr r0# = espr ( Incontro ( : Categoria ) ) ;
lista parametri# = Elenco ( B = 2 , beta = 0 ) ;
// itera su tutte le categorie
Per ( c = 1 , c <= N articoli ( categoria# ) , c ++,
// crea un parametro R0 specifico per la categoria
val (
Analizza (
Sostituto (
"Inserisci in( lista parametri#, Espr( Nome( \!"R0_ccc\!" ) = 2 ) )" ,
"ccc" ,
categoria# [ c ]
)
)
) ;
Inserire ( corrispondenza espr r0# , categoria# [ c ] ) ;
val (
Analizza (
Sostituto (
"Insert Into( match expr r0#, Expr( Name( \!"R0_ccc\!" ) ) )" ,
"ccc" ,
categoria# [ c ]
)
)
) ;
// crea un parametro P specifico per la categoria
val (
Analizza (
Sostituto (
"Inserisci in( lista parametri#, Espr( Nome( \!"P_ccc\!" ) = 2 ) )" ,
"ccc" ,
categoria# [ c ]
)
)
) ;
Inserire ( corrispondenza espr p# , categoria# [ c ] ) ;
val (
Analizza (
Sostituto (
"Insert Into( match expr p#, Expr( Name( \!"P_ccc\!" ) ) )" ,
"ccc" ,
categoria# [ c ]
)
)
) ;
) ;
// sostituisci nella formula del modello generale
formula expr# = Sostituto (
espr ( Parametro ( lll , rrr / ( 1 + B * ( : tRilassati / : tstress ) ^ beta + pp ) ) ) ,
espr ( lll ) ,
lista parametri# ,
espr ( rrr ) ,
Nome Espr ( corrispondenza espr r0# ) ,
espr ( pp ) ,
Nome Espr ( corrispondenza espr p# )
) ;
// imposta la formula della colonna Modello
val (
Sostituto (
espr ( Tabella dati corrente () << Nuova colonna ( "Modello" , Formula ( F F F ) ) ) ,
espr ( F F F ) ,
Nome Espr ( formula expr# )
)
) ;
Re: Regressione non lineare con parametri espansi per categorieCiao,
Grazie per la risposta. Ho letto il manuale. Non sono ancora riuscito a ottenere quello che stavo cercando.
Ora sto provando a scrivere questo adattamento non lineare e ad affrontare alcuni problemi. Bisogno di aiuto. Ribadisco il problema qui:
Ho dati che devono essere adattati da un modello che ha 4 parametri di adattamento. Gli accoppiamenti per ciascuna categoria NON SONO INDIPENDENTI l'uno dall'altro. 2 dei parametri di adattamento, B e beta come mostrato nel post precedente devono essere univoci, ovvero l'adattamento di regressione estrae un B e un beta univoci per tutte le categorie. Mentre gli altri due parametri P e R0 possono variare tra le categorie.
L'interfaccia di JMP è simile a quella mostrata di seguito:

Ora, ho bisogno di codificarlo in JSL.
So che possiamo fare quanto segue per ottenere tutti e quattro i parametri univoci:
dt << Nuova colonna("Modello", Numerico, Continuo, Formula( Parametro( {B = 5, beta = 0,25, P = 10, R0 = 10}, R0 / (1 + B * (:Name( "tRelax( s)" ) / :Name( "tStress(s)" )) ^ beta) + P )));
Tuttavia questo non è quello che voglio. E non voglio usare la funzione di "raggruppamento" in quanto aiuterebbe solo se le estrazioni fossero indipendenti.
Il codice generato mentre copio la formula è mostrato di seguito:
Parametro(
{B = 2, beta = 0,
Nome( "R0_Categoria_D03_01_-1.8_100" ) = 2,
Nome("R0_Categoria_D03_01_-1.8_1000") = 3,
Nome( "R0_Categoria_D03_01_-1.8_10000" ) = 3,
Nome("R0_Categoria_D03_01_-1.8_158") = 3,
Nome("R0_Categoria_D03_01_-1.8_1580") = 3,
Nome( "P_Category_D03_01_-1.8_100" ) = 0,
Nome( "P_Category_D03_01_-1.8_1000" ) = 1,
Nome( "P_Category_D03_01_-1.8_10000" ) = 1,
Nome( "P_Category_D03_01_-1.8_158" ) = 0,
Nome("P_Category_D03_01_-1.8_251" ) = 0},
Exp( -B * (:Nome( "tR" ) / :Nome( "tS" )) ^ beta ) *
Corrispondenza( :Categoria,
"D03_01_-1.8_100", Nome("R0_Categoria_D03_01_-1.8_100"),
"D03_01_-1.8_1000", Nome("R0_Categoria_D03_01_-1.8_1000"),
"D03_01_-1.8_10000", Nome("R0_Categoria_D03_01_-1.8_10000"),
"D03_01_-1.8_158", Nome("R0_Categoria_D03_01_-1.8_158"),
"D10_05_-2.6_6310", Nome( "R0_Categoria_D10_05_-2.6_6310" )
) + Corrispondenza( :Categoria,
"D03_01_-1.8_100", Nome("P_Categoria_D03_01_-1.8_100"),
"D03_01_-1.8_1000", Nome("P_Categoria_D03_01_-1.8_1000"),
"D03_01_-1.8_10000", Nome("P_Categoria_D03_01_-1.8_10000"),
"D03_01_-1.8_158", Nome("P_Categoria_D03_01_-1.8_158"),
"D10_05_-2.6_6310", Nome( "P_Categoria_D10_05_-2.6_6310" )
)
)
Ho bisogno di automatizzare questo e quindi non posso usarlo così com'è.
Posso creare array per P_XXX e R0_XXX dalla colonna "Categoria".
Stavo pensando alle linee di creare array associati per ciascuno di questi P e R0 e usarli nella formula, ma non ha funzionato.
Naturalmente dopo aver creato questa formula, è necessario eseguire l'adattamento della regressione non lineare sulla colonna e sui dati.
Qualcuno può aiutarmi a codificare questo?
Grazie
Binoy
Re: Regressione non lineare con parametri espansi per categorieBinoy,
Un buon posto per avere un'idea di quale sia l'adattamento del modello e le statistiche dietro l'adattamento (i) è nella sezione Guida in Libri > Modelli specializzati.Gli accoppiamenti non lineari iniziano a pagina 105. Il suggerimento di Michael Anderson di raggruppare gli accoppiamenti mostrerà anche come le singole categorie sono adatte e vedrai anche un grafico degli accoppiamenti combinati.Di seguito è riportato un esempio della guida.Puoi anche usare il tuo set di parametri e questo è mostrato nel Capitolo 7.La sezione delle statistiche inizia a pagina 152 del capitolo 7.

Re: Regressione non lineare con parametri espansi per categorieCiao,
Grazie per la risposta.
Per essere più chiari. Conosco un metodo per fare quello che voglio. Voglio sapere come si fa.
Nell'esempio mostrato di seguito B e beta corrispondono a C e D posti nella domanda, mentre P è un parametro come A o B che può variare tra le categorie.
Di seguito è riportato uno screenshot dell'adattamento in corso, con B e beta come parametri che rimangono COSTANTI per tutte le categorie mentre P è un parametro che può variare tra le categorie.
La domanda è: come ottiene il miglior B e beta su tutte le categorie? Inizialmente trova B e beta diversi per ogni categoria e fa alcune statistiche per ottenere il miglior B e beta che è abbastanza buono per tutte le categorie? In tal caso, qual è la statistica utilizzata.
Grazie
Binoy

Re: Regressione non lineare con parametri espansi per categorieSembra che tu voglia usare una variabile di raggruppamento nella piattaforma non lineare.Inserisci le tue variabili X e Y nei campi appropriati della piattaforma e poi inserisci la colonna "categorie" nel campo "gruppo".Quando si adattano i modelli in seguito, calcolerà il risultato per ciascun gruppo.Quindi, se avessi 4 categorie, otterresti 4 modelli con 4 set di coefficienti.
[Immagine mancante]