essayer d'écrire un script pour comparer les valeurs prédites futuresBonjour à tous, je suis encore en train d'apprendre les bases du JSL et j'essaie d'écrire un script qui comparera la valeur prédite à un instant T avec les valeurs prédites sur les 7 jours suivants. J'essaie de faire en sorte que le script effectue les opérations suivantes :
1 - effectuer une régression sur toutes les lignes du tableau de données (chaque ligne correspond à un incrément de 15 minutes, donc ma valeur prédite est calculée toutes les 15 minutes).
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 - sélectionnez la valeur prédite qui se produit chaque lundi matin à 8 heures dans l'ensemble de données couvrant 3 ans.
3 - Comparez cette valeur à toutes les autres valeurs prédites au cours de la semaine suivant cette valeur de 8 h (c.-à-d. du lundi 8 h 15 au lundi suivant 7 h 45). (C'est-à-dire que toutes les valeurs calculées au cours de la semaine seront comparées à la valeur du lundi à 8 h.) Ensuite, comptez le nombre de lignes où toutes ces valeurs prédites sont supérieures à + ou - 25 % de la valeur de 8 h pour cette semaine. Répétez ce processus jusqu'à ce que toutes les semaines soient comptabilisées.
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;
)
);
Je ne sais pas comment sélectionner les valeurs de la semaine à comparer à la valeur du lundi à 8 h. Et je ne suis même pas sûr d'être sur la bonne voie. J'apprécierais beaucoup toute aide !
Automatisation et scriptsExploration et visualisation des donnéesRe : essayer d'écrire un script pour comparer les futures valeurs préditesOuah.Merci Stan!
J'ai passé une heure dessus et je dois admettre que, malheureusement, c'est au-dessus de mon niveau actuel de compréhension de JSL.Lorsque je l'exécute, il produit une table affichant les colonnes datetime, log_turb_pear, millsR_Q_lag_6hrs et pred formula log_ecoli_pear, mais rien d'autre n'est affiché.Je suis sûr que c'est une erreur de l'utilisateur (sur moi !) Mais je ne sais pas comment le déboguer car je suis trop nouveau pour les scripts.Je sais que vous y avez consacré beaucoup d'efforts et je vous en suis très reconnaissant.Je vais continuer - merci.
Re : essayer d'écrire un script pour comparer les futures valeurs préditesMerci Stan.Je veux bien essayer.
Re : essayer d'écrire un script pour comparer les futures valeurs préditesSalut @learning_JSL ,
Voici quelques idées pour vous aider à démarrer; code non testé.
//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;
Re : essayer d'écrire un script pour comparer les futures valeurs préditesPar souci de simplicité, ma question se résume vraiment à ceci : comment puis-je récupérer/lire une valeur de colonne à partir de la ligne à venir (je l'appellerai ligne n+1), faire un calcul avec, puis récupérer à partir de la ligne après cela (n + 2) et faire le calcul, et ainsi de suite jusqu'à ce que j'atteigne la ligne n = 672 (qui correspond à 7 jours d'incréments de 15 minutes) ...... puis recommencez à faire un nouveau calcul en commençant à la ligne n = 672 et continuez le même flux de travail en boucle pour les 672 lignes suivantes ..... puis recommencez à n = 672 + 672 = 1344 ...... et ainsi de suite jusqu'à ce que je manque de lignes dans la table de données.Je suis heureux de clarifier si nécessaire.Même un indice pourrait me mettre sur la bonne voie.Merci d'avance!
Re : essayer d'écrire un script pour comparer les futures valeurs préditesSi ça peut aider......
Ma table de données est configurée comme suit :
datetime log_turb_pear millsR_Q_lag_6hrs pred formula log_ecoli_pear (calculé)
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
etc
J'essaie de comparer la valeur de :pred formula log_ecoli_pred au 04/01/2021, 8h (soit 2,64) à la valeur obtenue à tous les autres moments jusqu'au 12/01/21 à 7h45. Et puis je dois compter le nombre de fois que chacune de ces valeurs est + ou - 25% de 2,64. Ensuite, répétez pour la semaine suivante, etc. jusqu'à ce que le comptage ait été effectué pour toutes les semaines du tableau de données.(Notez que, si nécessaire, le premier lundi de 2019 est le 7 janvier, le premier lundi de 2020 est le 6 janvier et le premier lundi de 2021 est le 4 janvier... ma table de données contient des enregistrements du début de 2019 à aujourd'hui. ) Une seule valeur (3,7) dans le tableau d'exemple ci-dessus est supérieure à + ou - 25 % de 2,64 (c'est-à-dire <(0,75 * 2,64) ou > (1,25 * 2,64)).