上記のRob Hyndmanの投稿を参照https://stats.stackexchange.com/a/1214/70282
find.freq関数は見事に機能します。私が使用している日次データセットでは、頻度が7になるように正しく計算されました。
平日のみで試してみると、頻度は23で、これは1か月の平均就業日数である21.42857 = 29.6 * 5/7に非常に近いと述べています。(または逆に23 * 7/5は32です。)
毎日のデータを振り返って、最初の期間を取り、それによって平均化してから次の期間を見つけるなどの試行錯誤を繰り返しました。以下を参照してください。
find.freq.all = function(x){
f = find.freq(x);
freqs = c(f);
while(f> 1){
start = 1; #start = fも試してください。
x = period.apply(x、seq(start、length(x)、f)、mean);
f = find.freq(x);
freqs = c(freqs、f);
}
if(length(freqs)== 1){return(freqs); }
for(i in 2:length(freqs)){
freqs [i] = freqs [i] * freqs [i-1];
}
freqs [1:(length(freqs)-1)];
}
find.freq.all(dailyts)#毎日のデータを使用
上記は、seqが1またはfで始まるかどうかに応じて、(7,28)または(7,35)を与えます。(上記のコメントを参照してください。)
これは、msts(...)の季節期間が(7,28)または(7,35)であることを意味します。
アルゴリズムは、アルゴリズムパラメーターの感度を考慮すると、初期条件に敏感に見えます。28と35の平均は31.5で、1か月の平均の長さに近いです。
私は車輪を再発明したと思われますが、このアルゴリズムの名前は何ですか?Rのどこかにもっと良い実装がありますか?
後で、1から7までのすべての開始を試行して上記のコードを実行し、2番目の期間で35,35,28,28,28,28,28を得ました。平均は、1か月の平均日数である30になります。面白い...
考えやコメントはありますか?