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 unico di dati.
Devo adattare tutti i dati e trovare i parametri A, B, C, D, a condizione che mi servano 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, selezione 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 in tutte le categorie.
La mia domanda è questa: come trova una C e una D UNICA in tutte le categorie? Si adatta al set di dati corrispondente a ciascun set di dati e trova C1, D1, C2, D2 ecc. per ciascun set e successivamente prende la mediana/media o qualcos'altro?
Oppure trova l'intervallo dei 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
Ri: Regressione non lineare con parametri espansi per categorieScusate il ritardo. Pensavo che avessimo finito!
Il mio post precedente mostra la formula con un common 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.
Ti stai chiedendo come funziona il Non lineare la piattaforma risolve un problema del genere (stimare i parametri)? Utilizza a procedura di ottimizzazione numerica e un funzione di perdita monitorare. Usa il dato valori iniziali e poi li varia per migliorare il risultato della funzione di perdita (minimizzazione). La funzione di perdita predefinita è somma degli errori quadratici , O minimi quadrati .Monitora diverse misure di cambiamento per determinare quando convergenza viene raggiunto e si ferma.
Ri: Regressione non lineare con parametri espansi per categorieCIAO,
C'è qualche aggiornamento su questa domanda che ho posto?
Grazie
Binoy
Ri: Regressione non lineare con parametri espansi per categorieCIAO,
Conosco questo metodo per farlo manualmente. Capisco che sia abbastanza facile farlo manualmente. Tuttavia, devo automatizzare il mio script perché fa parte di un sistema più grande e quindi è necessario.
Grazie per il tuo tempo ed il tuo sforzo.
Binoy
Ri: Regressione non lineare con parametri espansi per categorieEccellente!!! Ha funzionato a meraviglia. Questa è più o meno la risposta al mio post precedente (leggermente diverso dal post originale).
Grazie per il tuo tempo e la tua sceneggiatura.
Ora passiamo alla 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 di loro. Ora non stiamo specificando tramite 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
Ri: 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 modello di cui hai bisogno. Selezionare Aiuto > Libreria dati di esempio , apri il Esempi non lineari cartella e infine aprire il file Alghe Mitscherlich tabella dati. Apri il Redattore di formule con il Mitscherlich colonna. Dovrebbe sembrare come questo:

in questo caso, come il tuo, i 2 parametri alfa E beta sono condizionati da Trattamento .
Apro il mock up dei tuoi dati che ho creato e seleziono Col > Nuova colonna... Lo chiamerò Modello e aggiungi a Formula proprietà della colonna. Creerò i parametri prima di utilizzarli 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 su 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 ciascuna categoria. Faccio la stessa cosa per il P parametro.
Ora creo la formula passando dall'elenco dei parametri all'elenco delle colonne della tabella per creare questa formula:

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

Questo modello produce esattamente le stesse stime con Non lineare della parametrizzazione originale.
Ti preghiamo di comprendere che potremmo aver interpretato male la tua domanda. Gli script sono potenti ma non sempre necessari.
Ri: 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. Si presuppone che siano presenti tre colonne di dati con i nomi indicati. Dovresti aggiungere una finestra di dialogo personalizzata se i nomi delle colonne cambiassero tra un'esecuzione e l'altra. Ma può ospitare un numero qualsiasi di categorie. Non so se Nonlinear sarà in grado di risolvere il modello quando hai un gran numero di categorie. Inoltre, potresti voler preparare un elenco di valori iniziali e utilizzare il mio esempio per utilizzarne di univoci.
Non ho la tua tabella dati ma il mio modello di ciò che penso tu abbia (colonne Category, rRelax, tStress) ha funzionato.
/* presuppone che queste colonne esistano o crea una finestra di dialogo personalizzata per assegnarle alle variabili di script:
Categoria
Rilassati
tStress
*/
// trova tutte le categorie
categoria# = : Categoria << Ottieni valori ;
// crea la formula dall'interno verso l'esterno con le espressioni
corrispondenza espressione p# = corrisponde all'espressione r0# = Espr ( Incontro ( : Categoria ) ) ;
elenco parametri# = Elenco ( B = 2 , beta = 0 ) ;
// esegue l'iterazione su tutte le categorie
Per ( C = 1 , C <= N articoli ( categoria# ) , C ++,
// crea il parametro R0 specifico della categoria
Val (
Analizzare (
Sostituire (
"Inserisci in( elenco parametri#, Espr( Nome( \!"R0_ccc\!" ) = 2 ) )" ,
"cccc" ,
categoria# [ C ]
)
)
) ;
Inserire ( corrisponde all'espressione r0# , categoria# [ C ] ) ;
Val (
Analizzare (
Sostituire (
"Inserisci in( corrisponde a espressione r0#, Espr( Nome( \!"R0_ccc\!" ) ) )" ,
"cccc" ,
categoria# [ C ]
)
)
) ;
// crea un parametro P specifico per la categoria
Val (
Analizzare (
Sostituire (
"Inserisci Into( elenco parametri#, Espr( Nome( \!"P_ccc\!" ) = 2 ) )" ,
"cccc" ,
categoria# [ C ]
)
)
) ;
Inserire ( corrispondenza espressione p# , categoria# [ C ] ) ;
Val (
Analizzare (
Sostituire (
"Inserisci in( corrisponde a expr p#, Expr( Nome( \!"P_ccc\!" ) ) )" ,
"cccc" ,
categoria# [ C ]
)
)
) ;
) ;
// sostituisce nella formula del modello generale
espressione formula# = Sostituire (
Espr ( Parametro ( lll , rr / ( 1 + B * ( : Rilassati / : tStress ) ^ beta + ppp ) ) ) ,
Espr ( lll ) ,
elenco parametri# ,
Espr ( rr ) ,
Nome Espr ( corrisponde all'espressione r0# ) ,
Espr ( ppp ) ,
Nome Espr ( corrispondenza espressione p# )
) ;
// imposta la formula della colonna del modello
Val (
Sostituire (
Espr ( Tabella dati corrente () << Nuova colonna ( "Modello" , Formula ( F F F ) ) ) ,
Espr ( F F F ) ,
Nome Espr ( espressione formula# )
)
) ;
Ri: Regressione non lineare con parametri espansi per categorieCIAO,
Grazie per la risposta. Ho letto il manuale. Ancora non riuscivo a ottenere quello che stavo cercando.
Ora sto cercando di scrivere questo adattamento non lineare e sto affrontando alcuni problemi. Bisogno di aiuto. Ribadisco il problema qui:
Ho dati che devono essere adattati da un modello che ha 4 parametri di adattamento. Le vestibilità di ciascuna categoria NON SONO INDIPENDENTI l'una dall'altra. 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 a seconda delle categorie.
L'interfaccia JMP è simile a quella mostrata di seguito:

Ora devo 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 * (:Nome( "tRelax( s)" ) / :Nome( "tStress(s)" )) ^ beta) + P )));
Tuttavia questo non è quello che voglio. E non voglio utilizzare la funzionalità di "raggruppamento" poiché sarebbe d'aiuto 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_Categoria_D03_01_-1.8_100" ) = 0,
Nome( "P_Categoria_D03_01_-1.8_1000" ) = 1,
Nome( "P_Categoria_D03_01_-1.8_10000" ) = 1,
Nome( "P_Categoria_D03_01_-1.8_158" ) = 0,
Nome( "P_Categoria_D03_01_-1.8_251" ) = 0},
Esp( -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 automatizzarlo e quindi non posso usarlo così com'è.
Posso creare array per P_XXX e R0_XXX dalla colonna "Categoria".
Stavo pensando di creare array associati per ciascuno di questi P e R0 e di usarli nella formula, ma non ha funzionato.
Ovviamente dopo aver creato questa formula, devo eseguire l'adattamento della regressione non lineare sulla colonna e sui dati.
Qualcuno può aiutarmi a codificarlo?
Grazie
Binoy
Ri: Regressione non lineare con parametri espansi per categorieBinoy,
Un buon posto per avere un'idea dell'adattamento del tuo modello e delle statistiche dietro l'adattamento è nella sezione Guida in Libri > Modelli specializzati.Gli adattamenti non lineari iniziano a pagina 105. Il suggerimento di Michael Anderson per raggruppare gli adattamenti mostrerà anche come le singole categorie sono adattate e vedrai anche un grafico degli adattamenti combinati.Di seguito è mostrato un esempio tratto dalla guida.È possibile utilizzare anche il proprio set di parametri e questo è mostrato nel Capitolo 7.La sezione relativa alle statistiche inizia a pagina 152 del capitolo 7.

Ri: 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 sta facendo.
Nell'esempio mostrato di seguito B e beta corrispondono a C e D richiesti nella domanda, mentre P è un parametro come A o B che può variare a seconda delle 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 ottenere i migliori risultati B e beta in tutte le categorie? Inizialmente trova diversi B e beta per ciascuna categoria ed esegue alcune statistiche per ottenere i migliori B e beta che siano sufficientemente buoni per tutte le categorie? Se sì, qual è la statistica utilizzata?
Grazie
Binoy

Ri: Regressione non lineare con parametri espansi per categorieSembra che tu voglia utilizzare 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".Dopo aver adattato i modelli, verrà calcolato il risultato per ciascun gruppo.Quindi, se avessi 4 categorie, otterresti 4 modelli con 4 serie di coefficienti.
[Immagine mancante]