Modificare un modello prima di eseguire il modello di adattamento, la casella di riepilogo non rispetta i nomi di colonna specialiSto cercando di creare una copia di questa finestra di dialogo degli effetti del modello dal modello di adattamento:

L'obiettivo è creare uno script che legga questa espressione degli effetti dallo script del modello che DOE salva nella tabella, consenta alle persone di modificare l'espressione degli effetti e quindi eseguire alcune analisi utilizzando il modello di adattamento con la nuova espressione degli effetti.
Se esegui la finestra di dialogo nello script seguente, vedrai che legge l'espressione degli effetti dallo script del modello memorizzato nella tabella. Lo inserisce nella casella di riepilogo che assomiglia a Adatta modello, ti consente di modificarlo e quindi quando premi ok tenta di analizzare la casella di riepilogo in una nuova espressione di effetti e avvia una finestra di dialogo del modello di adattamento personalizzato con quella nuova espressione.
Il problema/differenza è nella colonna del nome speciale: nell'espressione originale è memorizzata come :name(“Altezza-”) ma quando si recupera l'espressione dalla casella di riepilogo, viene memorizzata come “Altezza-” che diventa un risultato matematico incompleto operazione invece del nome di una colonna. Quindi, come posso applicare le regole speciali sui nomi delle colonne agli elementi di questa casella di riepilogo? Lo stesso vale per i termini incrociati e nidificati con la colonna del nome speciale.
dt=Open("$SAMPLE_DATA/Big Class.jmp");
dt:height << Set Name( "Height-" );
FitModelScript = dt << Get table variable( "Fit Model" );
i = 1;
try(
While( !Is Empty( arg_i = Arg( parse(FitModelScript), i ) ),
If( Starts With( Char( Name Expr( arg_i ) ), "Effects" ),
EffectsExpr = Name Expr( arg_i );
Break();
,
i++
)
);
);
New Window( "Test",
Border Box( Left( 3 ), top( 2 ),
v list box(
H List Box(
Panel Box( "Select Columns",
v list box(
colListData = Col list box( All, width( 253 ), grouped, nLines( 20 ) ),
Spacer box(size(1,2))
)
),
Panel Box( "Cast Selected Columns into Roles",
Lineup Box( N Col( 2 ), Spacing( 3 ),
Button Box( "Response columns", colListYbox << Append( colListData << GetSelected ) ),
colListYbox = Col List Box( width( 200 ), nLines( 20 ), numeric, MinItems( 1 ) ),
)
),
Panel Box( "Model effects",
H List Box(
V List Box(
Button Box( "Main", LB << Append( colListData << GetSelected ) ),
Button Box( "Interact",
SelectedColumns = colListData << GetSelected();
For( i = 1, i <= N Items( SelectedColumns ), i++,
For( k = 1, k <= N Items( SelectedColumns ) - i, k++,
LB << Append( concat(SelectedColumns[i], " * ", SelectedColumns[i + k] ) )
)
);
),
Button Box( "Quadratic",
SelectedColumns = colListData << GetSelected();
For( i = 1, i <= N Items( SelectedColumns ), i++,
LB << Append( concat(SelectedColumns[i], " * ", SelectedColumns[i] ) )
);
),
Button Box( "Nest",
colListX = colListData << GetSelected();
For( i = 1, i <= N Items( colListX ), i++,
If(Column(colListX[i]) << Get Modeling Type() != "Nominal",
New window("Error",<<MODAL>0,
For( i = 1, i <= N Items( MainNest ), i++,
If(Contains(colListX, MainNest[i])==0,
LB << Append(concat(MainNest[i], "[", concat items(colListX, ", "), "]"));
LB << Remove Item(contains(LB << Get items( ),MainNest[i]));
,
New window("Error", <<MODAL></MODAL></MODAL>
Modellazione statistica avanzataRicerche sui consumatori e sul mercatoPersonalizzazione di massaIngegneria della qualità e dei processiRi: Modificare un modello prima di eseguire il modello di adattamento, la casella di riepilogo non rispetta i nomi di colonna specialiGrazie!
Sì, sto cercando di supportare ogni nome di colonna perché non li creo. Rinominare è l'unica soluzione che ho trovato che funzioni davvero, ma non mi piace cambiare le tabelle dei dati delle persone nemmeno temporaneamente. Invece vedrò se riesco ad arrivarci incorporando Fit model direttamente nella nuova finestra di dialogo e lasciando che gestisca la creazione dell'espressione degli effetti. Perdo alcune funzionalità in questo modo (richiamo e altre caselle di colonna riempibili) ma ne vale la pena avere un robusto generatore di espressioni di effetti.
Ri: Modificare un modello prima di eseguire il modello di adattamento, la casella di riepilogo non rispetta i nomi di colonna specialiSe i nomi delle colonne contengono gli stessi caratteri utilizzati per incrociare o nidificare i termini...
Il modo più semplice è evitare che ciò accada. Se il tuo script crea tali colonne, considera, ad esempio, l'utilizzo di \{ \} al posto di [ ] e \# al posto di *. Se d'altra parte stai cercando di supportare qualsiasi possibile nome di colonna, puoi scorrere i nomi delle colonne, effettuando sostituzioni come quelle menzionate sopra, dopo aver mostrato una finestra di avviso modale che informa l'utente che i nomi delle colonne devono essere temporaneamente modificati. Potresti quindi modificarli nuovamente al termine dello script.
Inoltre: esiste un word() equivalente per estrarre tutti gli argomenti di un tipo di espressione? Ora finisco per dover scrivere cicli per estrarre tutti gli argomenti da un'espressione.
Non conosco una funzione analoga alle parole per gli argomenti delle espressioni. Se crei elenchi di questo tipo così spesso, forse una funzione potrebbe essere d'aiuto? Tieni presente che devi racchiudere l'espressione in nameexpr() mentre la passi alla funzione.
Saluti,
Brady
exp = Expr( note( a, b, c ) );
argList = function({ex},
{aList = {}, i=1},
While( i <= N Arg( ex ), Insert Into( aList, Arg( ex, i++ ) ) );
aList
);
argList(nameexpr(exp));
Ri: Modificare un modello prima di eseguire il modello di adattamento, la casella di riepilogo non rispetta i nomi di colonna specialiCIAO,
Mi chiedo se sarebbe possibile aggiungere ":Name(ColumnName)" attorno al nome di ogni colonna e se ciò risolverebbe il problema.Un modo per farlo potrebbe essere usare Regex().Ho scritto qualcosa che penso possa essere un passo in questa direzione ma non è ancora perfetto.Forse qualcuno con più conoscenza di Regex potrebbe aiutare con questo?:
colnames=dt<<GET column="" names=""></GET>
Ri: Modificare un modello prima di eseguire il modello di adattamento, la casella di riepilogo non rispetta i nomi di colonna speciali@brady_brady L'ho quasi risolto, ma c'è ancora un problema che sto riscontrando: se i nomi delle colonne contengono gli stessi caratteri utilizzati per incrociare o annidare i termini, come li dividi in colonne quando torni da una casella di riepilogo?
dt = New Table( "Test",
Add Rows( 3 ),
Compress File When Saved( 1 ),
New Column( "SCR[12]*34",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3] )
),
New Column( "SCR5[a]*",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [3, 2, 3] )
),
New Column( "Y",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4, 1, 4] )
)
);
new window("test", LB = list box());
LB << append((Column(1) << get name()) || " * " || (Column(2) << get name()));
LB << append((Column(1) << get name()) || "[" || (Column(2) << get name()) || "]");
LB << get items();Noterai che gli elementi provenienti dalla casella di riepilogo sono solo stringhe. Se utilizzowords() con lo splitter "*" o "[]" ottengo troppe divisioni e i risultati non sono più riferimenti a colonne. Devo dividere ciascun elemento nei suoi costituenti in modo da poterli racchiudere in :Name(" ") e nidificarli nuovamente/incrociarli e aggiungerli all'espressione degli effetti per il modello di adattamento. Ho anche bisogno di un elenco di tutte le colonne coinvolte in uno qualsiasi dei termini per un'altra parte dello script.
Se conosci una soluzione, considera che la finestra di dialogo Adatta modello consente l'annidamento e l'incrocio con più di 2 variabili.
Andando dall'altra parte, analizzando l'espressione degli effetti dallo script del modello, potrei utilizzare la funzione Arg() per estrarre colonne e popolare la casella di riepilogo, ma tornando indietro non funziona poiché è di tipo stringa.
Inoltre: esiste un word() equivalente per estrarre tutti gli argomenti di un tipo di espressione? Ora finisco per dover scrivere cicli per estrarre tutti gli argomenti da un'espressione.
Ri: Modificare un modello prima di eseguire il modello di adattamento, la casella di riepilogo non rispetta i nomi di colonna specialiGrazie Brady, esaminerò la cosa. Mi chiedo soprattutto come gestirà i termini incrociati, interagenti e nidificati, ma dovrò giocarci un po' per verificarli.
Devo anche vedere se riesco a fare qualcosa di simile quando importo un modello esistente con questi termini nella casella di riepilogo poiché questo mostra attualmente il contenuto "Nome(". Riporterò i resoconti non appena avrò avuto un po' di tempo per approfondire.
Pensandoci, in realtà potrebbe essere meglio richiamare/riutilizzare l'elemento Costruisci modello effetti dalla finestra di dialogo Adatta modello inviando l'utente a interagire con quella finestra e quindi rileggere l'espressione degli effetti da quella finestra. Non così carino però.
Ri: Modificare un modello prima di eseguire il modello di adattamento, la casella di riepilogo non rispetta i nomi di colonna specialiUn modo per farlo è costruire espressioni. Uno dei principali vantaggi di questo approccio è che, a differenza degli approcci basati su stringhe, il codice rimane colorato, facilmente leggibile e richiede caratteri di escape minimi. Il flusso in questo caso particolare è:
- Definire e costruire l'espressione di risposta,
- Definire e costruire l'espressione degli effetti,
- Definire un'espressione Stima modello con segnaposto,
- Sostituisci le espressioni risposta ed effetto nei segnaposto nell'espressione Fit Model e
- Eseguire l'espressione Stima modello.
Nota: ho commentato l'opzione "invisibile" e ho racchiuso la modifica del nome della colonna in un try() per consentire esecuzioni ripetute.
Per provarlo, sostituisci il codice buttonbox("OK" ... ) con il codice seguente. È necessario inserire una colonna nella casella di riepilogo della colonna Risposta prima di fare clic su "OK".
Saluti,
Brady
Button Box( "OK",
respList = colListYbox << get items();
respExpr = expr(Y());
for(i=1, i<=nitems(respList), i++,
insertinto(respExpr, parse(evalinsert(":name(\!"^respList[i]^\!")")))
);
effectsList = lb << get Items;
effectsExpr = expr(Effects());
for(i=1, i<=nitems(effectsList), i++,
insertinto(effectsExpr, parse(evalinsert(":name(\!"^effectsList[i]^\!")")))
);
jslExpr = expr(
try(FitModelDialogWindow << closewindow());
FitModelDialogWindow = Fit Model(
//invisible,
_Y_,
_EFFECTS_,
Keep dialog open( 1 ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" )
);
);
substituteInto(jslExpr,
expr(_Y_), nameexpr(respExpr),
expr(_EFFECTS_), nameexpr(effectsExpr)
);
jslExpr;
)