Re: provare a scrivere uno script per confrontare i valori previsti futuriSe aiuta......
La mia tabella dati è impostata come segue:
datetime log_turb_pear millsR_Q_lag_6hrs pred formula log_ecoli_pear (calcolato)
01/04/2021 08:00 1.32 50 2.64
01/04/2021 08:15 1.46 45 2.72
01/04/2021 08:30 1.59 50 2.90
01/04/2021 08:45 2.20 50 3.7
01/04/2021 09:00 2.25 58 3.19
eccetera
Sto cercando di confrontare il valore di :pred formula log_ecoli_pred a 1/4/2021, 8 am (cioè 2,64) con il valore ottenuto in tutte le altre volte fino al 01/12/21 alle 7:45. E poi devo contare il numero di volte in cui ciascuno di questi valori è + o - 25% di 2,64. Quindi ripetere per la settimana successiva, ecc. finché il conteggio non è stato effettuato per tutte le settimane nella tabella dei dati.(Nota che, se necessario, il primo lunedì del 2019 è il 7 gennaio, il primo lunedì del 2020 è il 6 gennaio e il primo lunedì del 2021 è il 4 gennaio... la mia tabella di dati ha record dall'inizio del 2019 a quello attuale. ) Solo un valore (3,7) nella tabella di esempio sopra è maggiore di + o - 25% di 2,64 (cioè <(0,75 * 2,64) o > (1,25 * 2,64)).
Re: provare a scrivere uno script per confrontare i valori previsti futuriPer semplicità, la mia domanda si riduce davvero a questo: come recuperare/leggere un valore di colonna dalla riga successiva (lo chiamerò riga n+1), eseguire un calcolo con esso, quindi recuperare dalla riga successiva (n+2) e faccio il calcolo, e così via fino a raggiungere la riga n=672 (che vale 7 giorni con incrementi di 15 minuti)......quindi ricominciare a fare un nuovo calcolo a partire dalla riga n=672 e continua lo stesso flusso di lavoro in loop per le successive 672 righe ..... e poi ricomincia da capo a n = 672 + 672 = 1344 ...... e così via fino a quando non ho esaurito le righe nella tabella dei dati.Sono felice di chiarire se necessario.Anche un indizio potrebbe mettermi in carreggiata.Grazie in anticipo!
cercando di scrivere uno script per confrontare i valori previsti futuriCiao a tutti, sto ancora imparando le basi di JSL e sto cercando di scrivere uno script che confronti la bontà del valore previsto "in un dato momento" con i valori previsti successivi nei 7 giorni successivi. Sto cercando di far sì che lo script faccia quanto segue:
1 - eseguire la regressione su tutte le righe nella tabella dati (ogni riga corrisponde a un incremento di 15 minuti, quindi il mio valore previsto viene calcolato ogni 15 minuti).
Ex:
obj = Fit Model(
Y( :LOG_ECOLI_Pear ),
Effects( :LOG_TURB_Pear, :millsR_Q_lag6hr ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run( :LOG_ECOLI_Pear )
);
obj << Prediction Formula;
2 - seleziona il valore previsto che si verifica ogni lunedì mattina alle 8:00 nell'intero set di dati che copre 3 anni.
3 - confronta quel valore con tutti gli altri valori previsti che si verificano durante la settimana successiva al valore delle 8:00 (ad esempio, da lunedì alle 8:15 al lunedì successivo alle 7:45). (Ovvero, tutti i valori calcolati durante la settimana verranno confrontati con il valore di lunedì alle 8:00). Quindi, conta il numero di righe in cui tutti quei valori previsti sono superiori a + o - 25% del valore delle 8:00 per quella settimana. Continua (ripeti questo processo) fino a quando non hai conteggiato tutte le settimane.
ex:
New Column( "count num above or below 25pct of mon 8am",
numeric,
continuous,
formula(
If( Row() == 1, x = 0 );
((If( :above or below 25pct of mon 8am == 1,
x = x + :above or below 25pct of mon 8am,
X = X + :above or below 25pct of mon 8am
)));
x;
)
);
Non so bene come selezionare i valori della settimana da confrontare con il valore di lunedì alle 8:00. E non sono nemmeno sicuro di essere sulla strada giusta. Apprezzerei molto qualsiasi aiuto!
Automazione e scriptingEsplorazione e visualizzazione dei datiRe: provare a scrivere uno script per confrontare i valori previsti futuriCiao @learning_JSL ,
Eccoti qualche idea per iniziare; codice non testato.
//Set Initial Constraints
strt_row = 1;
end_row = 672;
ref_col_name = "pred formula log_ecoli_pear";
dt = Data Table( "community_post.jmp" );
cnt_ref = 0;
cnt_ref_2 = 0;
//Create Loop
for(r = 1, r <= NRows(dt), r++,
//find begin date
mod_strt_row = Modulo( dt:datetime[r], dt:datetime[1] );
If(mod_strt_row == 0, strt_row = row() );
//find end date
mod_end_row = Modulo( row(), end_row );
If(mod_end_row == 0, end_row = row() );
If(r == strt_row,
//get reference times and value for start row and column
ref_strt_time_value = dt:datetime[strt_row];
ref_col_name_value = Column(dt, ref_col_name)[strt_row];
show( format(ref_strt_time_value, "m/d/y h:m", 19), ref_col_name_value )
,
r!=end_row & r > 1,
row() = r;
compare_value = Lag( Column(dt,ref_col_name)[], 1);
low_limit_ref_value = 0.75*ref_col_name_value;
upper_limit_ref_value = 1.25*ref_col_name_value;
calc_val = Abs( ( ( ref_col_name_value - compare_value ) / ref_col_name_value ) * 100);
If(ref_col_name_value >= low_limit_ref_value | ref_col_name_value <= upper_limit_ref_value,
cnt_ref_2 = cnt_ref_2 + 1;
show( calc_val, cnt_ref_2);
);
If( calc_val <= 25,
cnt_ref = cnt_ref+1;
show(calc_val, cnt_ref);
);
,
r == end_row,
ref_end_time_value = dt:datetime[end_row];
show(format(ref_end_time_value, "m/d/y h:m", 19) );
);
);
cnt_ref_2;
cnt_ref;