嘗試編寫腳本來比較未來的預測值大家好,我仍在學習 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點的數據進行比較。而且我甚至不確定我的思路是否正確。非常感謝您的幫忙!
自動化和腳本數據探索與視覺化回复:嘗試編寫一個腳本來比較未來的預測值哇。謝謝斯坦!
我已經為此傾注了一個小時,並且不得不承認,不幸的是,它超出了我目前對 JSL 的理解水平。當我運行它時,它會生成一個表格,顯示日期時間、log_turb_pear、millsR_Q_lag_6hrs 和 pred 公式 log_ecoli_pear 列,但沒有顯示其他內容。我確定這是用戶錯誤(在我身上!)但我不確定如何調試它,因為我對腳本太陌生了。我知道你為此付出了很多努力,我非常感謝。我會堅持下去-謝謝。
回复:嘗試編寫一個腳本來比較未來的預測值謝謝你,斯坦。我會試試這個。
回复:嘗試編寫一個腳本來比較未來的預測值你好@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;
回复:嘗試編寫一個腳本來比較未來的預測值為簡單起見,我的問題實際上歸結為:如何從即將到來的行(我將其稱為第 n+1 行)中檢索/讀取列值,用它進行計算,然後從之後的行中檢索(n+2) 並進行計算,依此類推,直到我到達第 n=672 行(這是 7 天的 15 分鐘增量)......然後從第 n=672 行開始重新計算並為接下來的 672 行繼續相同的循環工作流程……然後在 n = 672 +672 = 1344 處重新開始……依此類推,直到我用完數據表中的行。如果需要,我很樂意澄清。即使是一個提示也可能讓我走上正軌。提前致謝!
回复:嘗試編寫一個腳本來比較未來的預測值如果有幫助的話......
我的數據表設置如下:
datetime log_turb_pear millsR_Q_lag_6hrs pred formula log_ecoli_pear(計算)
2021 年 1 月 4 日 08:00 上午 1.32 50 2.64
2021 年 1 月 4 日 08:15 上午 1.46 45 2.72
2021 年 1 月 4 日 08:30 上午 1.59 50 2.90
2021 年 1 月 4 日 08:45 上午 2.20 50 3.7
2021 年 1 月 4 日 09:00 上午 2.25 58 3.19
ETC
我正在嘗試將 :pred formula log_ecoli_pred 在 2021 年 1 月 4 日上午 8 點(即 2.64)的值與截至 21 年 1 月 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))。