Aggiunta/rimozione di effetti nella regressione graduale tramite JSL e numero/nome della colonnaCiao a tutti!
Ho davvero bisogno di aiuto su questo perché sto usando JMP e JSL per la mia tesi. Attualmente utilizzo JMP tramite JSL per analizzare alcuni dati e il mio obiettivo è la regressione graduale. A proposito, allegherò alcuni frammenti di codice per facilitare l'aiuto.
Fondamentalmente
1.) Come aggiungere più effetti al modello iniziale tramite il numero di colonna?
Attualmente posso impostare Y utilizzando solo il numero di colonna che desidero, ma non posso aggiungere X utilizzando il numero di colonna.
Voglio che vada via da questo
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Effect1Name, :Effect2Name, /*and so on and so forth*/
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
a questa
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Column(/*indices of columns to place as effects*/)
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
2.) Come rimuovere gli effetti meno significativi?
Dopo aver eseguito lo script originale, vedo che alcuni effetti non sono poi così significativi. Verrà utilizzato lo scripting predefinito
obj << Remove(:/*hardcoded column name*/);
ma voglio che sia flessibile in modo da poterlo automatizzare in modo che assomigli a questo
obj << Remove(:Column Name(indextoremove));
ma lo snippet sopra produce questo messaggio di errore
Term not found in access or evaluation of 'Column Name' , Column Name/*###*/(indextoremove)
Grazie!
Ri: Aggiunta/rimozione di effetti nella regressione graduale tramite JSL e numero/nome della colonna<SPAN class="token string">^effect_cols^ doesnt appear to work within eval(parse(eval insert(Step_Str))); as the brackets "{" of the list still exist.</SPAN>Ri: Aggiunta/rimozione di effetti nella regressione graduale tramite JSL e numero/nome della colonnaCiao di nuovo @cwillden !
Ho cambiato qualcosa nel mio codice, ispirato da ciò che stavo facendo in precedenza e in combinazione con il tuo snippet di codice. E ora funziona!
Grazie mille!
Ri: Aggiunta/rimozione di effetti nella regressione graduale tramite JSL e numero/nome della colonnaCIAO @cwillden ,
Grazie per la risposta! Hai ampiamente risolto il mio primo dubbio (l'aggiunta di più effetti)!
Per quanto riguarda la seconda preoccupazione, sono già in grado di rimuovere il termine con il valore p più grande. Tuttavia, credo che non sia questo il criterio che sto utilizzando per rimuovere un termine.
Quello che sto facendo (se lo faccio con un metodo punta e clicca e non con lo scripting) è:
- Carica la tabella.
- Eseguire il modulo Stima modello
- Aggiungi la Y e la X.
- Selezionare la regressione graduale
- Costruisci il modello. (Clicca su Vai)
- Fare clic su Esegui per visualizzare il report.
- Vai alla tabella Stime dei parametri.
- Ispeziona e rimuovi i termini in base a Prob>|t|.
Credo che il codice che hai inviato rimuovesse i termini in base a Prob>F della tabella Stime correnti della finestra Adatta passo passo. Quello che voglio fare è rimuovere i termini basati su Prob>|t| della tabella Stime dei parametri della finestra Report: Stima modello.
Ancora una volta, grazie!
Ri: Aggiunta/rimozione di effetti nella regressione graduale tramite JSL e numero/nome della colonnaCIAO @pedbundoc ,
Benvenuto nella community e in bocca al lupo per la tua tesi.
A differenza di altri input di dialogo, l'input Effetti non è solo un elenco di colonne.In questo argomento specifichi anche effetti di ordine superiore.Puoi creare l'elenco degli effetti usando cose come "colonna(1), colonna(2), colonna(3), colonna(1)*colonna(2), colonna(2)*colonna(2)" ecc. Inoltre, non puoi (credo) specificare più indici all'interno della funzione Column() in nessuno scenario.Una soluzione migliore sarebbe quella di ottenere un elenco di riferimenti di colonna e creare un sottoinsieme dell'elenco utilizzando gli indici di colonna in questo modo:
dt = Current Data Table();
all_cols = dt << Get Column Reference();
//let's say factors are columns 2-4
effect_cols = all_cols[2::4];
Ora, sembra che a JMP non piaccia lasciarmi semplicemente inserire la variabile effect_cols direttamente come argomento Effetti per lo script Adatta modello.Cerca una colonna denominata "effect_cols" anziché valutare l'elenco.Pertanto, si analizza lo script Fit Model da una stringa in cui sostituiamo nella valutazione di effect_cols in questo modo:
Step_Str = "\[step = dt << Fit Model(
Y( Column(5) ),
Effects(
^effect_cols^
),
Personality( "Stepwise" ),
Run
);]\";
eval(parse(eval insert(Step_Str)));
Questo dovrebbe funzionare per te se hai solo effetti principali.Altrimenti, dovrai essere un po' più creativo.Ancora totalmente fattibile.
Veniamo ora alla questione della rimozione degli effetti.Remove funzionerà solo se gli fornisci un argomento stringa corrispondente ai nomi di uno degli effetti.Puoi usare una sequenza eval(parse(eval insert())) come abbiamo fatto prima per analizzare una stringa in cui inseriamo una variabile contenente il nome dell'effetto che vogliamo rimuovere.Ecco un esempio in cui prendo l'effetto con il valore p più grande e lo rimuovo:
//Get a reference to the report window containing the stepwise object
step_rprt = step << Report;
//get the term names and current p-values from Current Estimates
terms = step_rprt["Current Estimates"][StringColBox(1)] << Get;
pvals = step_rprt["Current Estimates"][NumberColBox(5)] << Get;
//Remove Intercept from each
remove from(terms,1); //remove intercept
remove from(pvals,1); //remove p-value for intercept
max_index = Contains(pvals, max(pvals)); //get index of max p-value
//create an expression to remove the term with the largest p-value
remove_worst = parse(eval insert("\[step << Remove("^terms[max_index]^");]\"));
//Evaluate the expression
eval(remove_worst);Spero che aiuti!