回复:尝试编写脚本来比较未来的预测值如果有帮助......
我的数据表设置如下:
日期时间 log_turb_pear millsR_Q_lag_6hrs pred 公式 log_ecoli_pear(计算)
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
等等
我试图将 :pred 公式 log_ecoli_pred 在 2021 年 1 月 4 日上午 8 点(即 2.64)的值与截至 21 年 12 月 12 日上午 7 点 45 分的所有其他时间获得的值进行比较。然后我需要计算每个值是 + 或 - 2.64 的 25% 的次数。然后在下一周重复,依此类推,直到数据表中的所有周都进行了计数。(注意,如果需要的话,2019年的第一个星期一是1月7日,2020年的第一个星期一是1月6日,2021年的第一个星期一是1月4日……我的数据表有从2019年初到现在的记录。 ) 上例表中只有一个值 (3.7) 大于 2.64 的 + 或 - 25%(即 <(0.75 * 2.64) 或 > (1.25 * 2.64))。
回复:尝试编写脚本来比较未来的预测值为简单起见,我的问题实际上归结为:我将如何从即将到来的行中检索/读取列值(我将其称为第 n+1 行),对其进行计算,然后从之后的行中检索(n+2) 并进行计算,依此类推,直到我到达第 n=672 行(这是 7 天的 15 分钟增量)......然后重新开始从第 n=672 行开始进行新的计算并为接下来的 672 行继续相同的循环工作流.....然后在 n = 672 +672 = 1344 处再次开始......依此类推,直到我用完数据表中的行。如果需要,我很乐意澄清。即使是一个提示也可能让我走上正轨。提前致谢!
尝试编写脚本来比较未来的预测值大家好 - 我仍在学习 JSL 的基础知识,并且正在尝试编写一个脚本来比较“时间点”预测值与接下来 7 天内的后续预测值的比较情况。我试图让脚本执行以下操作:
1 - 对数据表中的所有行执行回归(每行对应 15 分钟的增量,因此我的预测值每 15 分钟计算一次)。
前任:
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 - 在跨越 3 年的整个数据集中选择每周一早上 8 点发生的预测值。
3 - 将该值与上午 8 点值之后的一周内发生的所有其他预测值进行比较(即星期一上午 8:15 到下一个星期一上午 7:45)。(也就是说,一周内计算的所有值都将与星期一上午 8 点的值进行比较。)然后,计算所有这些预测值都大于上午 8 点值的 + 或 - 25% 的行数那一周。继续(重复这个过程)直到所有的周都被计算在内。
前任:
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;
)
);
我不知道如何选择一周的值来与周一上午 8 点的值进行比较。而且我不确定我是否在正确的轨道上。我将不胜感激任何帮助!
脚本编写回复:尝试编写脚本来比较未来的预测值你好@learning_JSL ,
以下是一些帮助您入门的想法;代码未测试。
//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;
回复:尝试编写脚本来比较未来的预测值谢谢斯坦。我会试试这个。