Sceneggiatura? Applicazione della formula della colonna del modello non lineare a più colonneHo una formula del modello nella colonna 1 con 2 parametri e vorrei adattare questo modello a 80 diverse colonne di dati (Cols 2 - 82), in cui ogni colonna di dati ha quei 2 parametri personalizzati per esso. C'è un modo semplice per farlo?
Dovrei scrivere una sceneggiatura?
Re: Sceneggiatura? Applicazione della formula della colonna del modello non lineare a più colonnefinendo per convergere su questa come soluzione:
I nomi predefiniti sono qui ( 1 );
dlg = Colonna Dialogo(
Title( "Regressione non lineare" ),
yCol = Lista Col( "Y, Risposta",
Tipo di dati (numerico),
Colonna minima( 1 )
),
xCol = Elenco Col( "X, Formula predittore",
Tipo di dati (numerico),
Colonna minima( 1 ),
Colonna massima( 1 )
)
);
If( dlg["Pulsante"] != 1,
Throw("Utente cancellato");
);
Rimuovi da( dlg );
Elenco di valutazione( dlg );
dt = Tabella dati corrente();
n adattamenti = N elementi( yCol );
formula = xCol[1] << Ottieni formula;
n parm = N elementi( Arg( formula, 1 ) );
parm = J( n adattamenti, 2* n parm, .);
clmnm={};
parmnm = Arg(formula,1);
parclnm = As List(J(1,n parms));
For( i = 1, i<= n parms,i++,
parmnm[i]=Char(parmnm[i]);
parclnm[i]=Sinistra(parmnm[i],Munger(parmnm[i],1,"=")-1);
);
For( f = 1, f <= n adatta, f++,
Tentativo(
nl fit = dt << Non lineare( Y( yCol[f] ), X( xCol[1] ), Newton, Solo derivati numerici (1), Fine, Go );
parm[f,[1,2]] = Transpose( Report( nl fit )["Solution"][NumberColBox(5)] << Get As Matrix );
parm[f,[3,4]] = Transpose( Report( nl fit )["Solution"][NumberColBox(6)] << Get As Matrix );
);
clmnm[f]=Column(yCol[f])< );
dt = As Table( parm );
dt< col = Colonna(1);
For( f = 1, f <= n adatta, f++,
col[f]=clmnm[f];
);
For( i = 1, i<= n parms,i++,
col = Colonna(i+1);
col << Imposta Nome(parclnm[i]||"Stima");
col = Colonna(i+1+n parametri);
col << Imposta nome(parclnm[i]||"ApproxStdError");
);
Re: Sceneggiatura? Applicazione della formula della colonna del modello non lineare a più colonneL'avevo capito!
Grazie!
Re: Sceneggiatura? Applicazione della formula della colonna del modello non lineare a più colonnesi verifica un errore in questo passaggio
parm[f,0] = Transpose( Report( nl fit )["Stime parametro"][NumberColBox(1)] << Get As Matrix );
Re: Sceneggiatura? Applicazione della formula della colonna del modello non lineare a più colonneGrazie!
Prova ora...
ricevuto seguente errore durante il debug
Impossibile sottoscrivere la casella di visualizzazione nell'accesso o nella valutazione di 'Subscript' , Report( nl fit )[/*###*/"Parameter Estimates"]
@Mark_Bailey ha scritto:
Questa soluzione risulta essere un po' complicata. Funziona solo se il modello che stai utilizzando NON è uno di quelli nella libreria Fit Curve. (Se lo è, allora Nonlinear lancia Fit Curve, che si aspetta che il modello sia specificato per nome, cosa che questo script non fornisce.) Sulla base della tua affermazione che il modello attuale è più complicato, allora ho colto l'occasione che lo fosse non nella libreria Fit Model e ha scritto questo script:
Names Default to Here( 1 );
dlg = Column Dialog(
Title( "Nonlinear Regression" ),
yCol = Col List( "Y, Response",
Data Type( Numeric ),
Min Col( 1 )
),
xCol = Col List( "X, Predictor Formula",
Data Type( Numeric ),
Min Col( 1 ),
Max Col( 1 )
)
);
If( dlg["Button"] != 1,
Throw( "User cancelled" );
);
Remove From( dlg );
Eval List( dlg );
dt = Current Data Table();
n fits = N Items( yCol );
formula = xCol[1] << Get Formula;
n parms = N Items( Arg( formula, 1 ) );
parm = J( n fits, n parms, . );
For( f = 1, f <= n fits, f++,
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Finish );
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
);
As Table( parm );
Apri prima la tabella dati JMP, quindi apri ed esegui questo script. Seleziona tutte le colonne di risposta (colonne 2-82 nel tuo esempio) e fai clic Y, Risposta . Fare clic sulla colonna con la formula del modello (colonna 1 nell'esempio) e fare clic X, formula predittiva , . Quindi fare clic OK .
Re: Sceneggiatura? Applicazione della formula della colonna del modello non lineare a più colonneQuesta soluzione risulta essere un po' complicata. Funziona solo se il modello che stai utilizzando NON è uno di quelli nella libreria Fit Curve. (Se lo è, allora Nonlinear lancia Fit Curve, che si aspetta che il modello sia specificato per nome, cosa che questo script non fornisce.) Sulla base della tua affermazione che il modello attuale è più complicato, allora ho colto l'occasione che lo fosse non nella libreria Fit Model e ha scritto questo script:
Names Default to Here( 1 );
dlg = Column Dialog(
Title( "Nonlinear Regression" ),
yCol = Col List( "Y, Response",
Data Type( Numeric ),
Min Col( 1 )
),
xCol = Col List( "X, Predictor Formula",
Data Type( Numeric ),
Min Col( 1 ),
Max Col( 1 )
)
);
If( dlg["Button"] != 1,
Throw( "User cancelled" );
);
Remove From( dlg );
Eval List( dlg );
dt = Current Data Table();
n fits = N Items( yCol );
formula = xCol[1] << Get Formula;
n parms = N Items( Arg( formula, 1 ) );
parm = J( n fits, n parms, . );
For( f = 1, f <= n fits, f++,
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Finish );
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
);
As Table( parm );
Apri prima la tabella dati JMP, quindi apri ed esegui questo script. Seleziona tutte le colonne di risposta (colonne 2-82 nel tuo esempio) e fai clic Y, Risposta . Fare clic sulla colonna con la formula del modello (colonna 1 nell'esempio) e fare clic X, formula predittiva , . Quindi fare clic OK .
Re: Sceneggiatura? Applicazione della formula della colonna del modello non lineare a più colonnePuoi farlo senza uno script ma richiederà molti clic. Supponendo che tu abbia già impostato il modello non lineare come formula di colonna, procedi nel seguente modo:
- Seleziona Tabelle > Pila.
- Seleziona tutte le colonne di risposta (2-82 nel tuo esempio) e fai clic su Pila.
- Assicurati che l'opzione per copiare le formule sia selezionata.
- Immettere un nome per la colonna Dati, ad esempio Risposta.
- Immettere un nome per la colonna Etichetta, ad esempio Curva.
- Fare clic su OK.
- Selezionare Analizza > Modelli specializzati > Non lineare.
- Seleziona la colonna predittore (83 nel tuo esempio) e fai clic su X
- Seleziona la colonna del modello (1 nel tuo esempio) e fai clic su Y.
- Selezionare la colonna Curva e fare clic su Per.
- Fare clic su OK.
- Ora fai clic su Vai per ogni curva. (Questa è la parte noiosa.)
- Fare clic con il pulsante destro del mouse su qualsiasi report Stime dei parametri e selezionare Crea tabella dati combinati.
Questo processo dovrebbe darti una nuova tabella di dati con tutte le stime dei parametri.
Re: Sceneggiatura? Applicazione della formula della colonna del modello non lineare a più colonneSegno,
Grazie.
Le risposte a tutte le tue domande di verifica sono sì.
La formula può essere qualsiasi cosa, ma diciamo che è y = h*exp(-b*x^(0.65)) per semplicità, con h e b come parametri e x>0.
La formula attuale è molto più complicata, ma quella complicazione extra non dovrebbe influire sulla soluzione.
Re: Sceneggiatura? Applicazione della formula della colonna del modello non lineare a più colonneChiederò ancora: qual è il modello non lineare ( f(X) ) espresso nella formula della colonna 1? Quali sono i due parametri?
Verifica: il predittore (X) è l'ultima colonna ed è utilizzato nella formula nella colonna 1?
Verifica: le singole risposte (Y) sono nelle colonne 2-82?
Verifica: vuoi adattare Y = f(X) separatamente a ogni Y e acquisire le stime dei parametri per ogni Y?
Re: Sceneggiatura? Applicazione della formula della colonna del modello non lineare a più colonneSì, esiste una variabile predittore in un'altra colonna.
Possiamo chiamarla colonna 83 se vuoi.
E suppongo che il mio output di destinazione sarebbe una tabella che mostra i valori di adattamento migliore dei due parametri per colonna con intervalli di confidenza associati.
Re: Sceneggiatura? Applicazione della formula della colonna del modello non lineare a più colonneQual è il tuo modello non lineare memorizzato come formula nella colonna 1? Questa formula è solitamente una funzione della variabile predittore. Quale colonna contiene i valori del predittore?
Se questo caso è semplice, posso scrivere una sceneggiatura.