Mengacu pada pos Rob Hyndman di atas https://stats.stackexchange.com/a/1214/70282
Fungsi find.freq bekerja dengan sangat baik. Pada set data harian yang saya gunakan, frekuensi frekuensinya menjadi 7.
Ketika saya mencobanya hanya pada hari-hari minggu, frekuensinya adalah 23, yang sangat dekat dengan 21,42857 = 29,6 * 5/7 yang merupakan jumlah rata-rata hari kerja dalam sebulan. (Atau sebaliknya 23 * 7/5 adalah 32.)
Melihat kembali data harian saya, saya bereksperimen dengan firasat mengambil periode pertama, rata-rata dengan itu dan kemudian menemukan periode berikutnya, dll. Lihat di bawah:
find.freq.all = fungsi (x) {
f = find.freq (x);
freqs = c (f);
while (f> 1) {
mulai = 1; #juga coba mulai = f;
x = period.apply (x, seq (mulai, panjang (x), f), rata-rata);
f = find.freq (x);
freqs = c (freqs, f);
}
if (length (freqs) == 1) {return (freqs); }
untuk (i in 2: length (freqs)) {
freqs [i] = freqs [i] * freqs [i-1];
}
freqs [1: (length (freqs) -1)];
}
find.freq.all (dailyts) #menggunakan data harian
Di atas memberi (7,28) atau (7,35) tergantung pada apakah seq dimulai dengan 1 atau f. (Lihat komentar di atas.)
Yang akan menyiratkan bahwa periode musiman untuk msts (...) harus (7,28) atau (7,35).
Logika muncul sensitif terhadap kondisi awal mengingat sensitivitas parameter algoritma. Rata-rata 28 dan 35 adalah 31,5 yang dekat dengan panjang rata-rata sebulan.
Saya kira saya menemukan kembali roda, apa nama algoritma ini? Apakah ada implementasi yang lebih baik di R di suatu tempat?
Kemudian, saya menjalankan kode di atas dalam mencoba semua mulai dari 1 sampai 7 dan saya mendapat 35,35,28,28,28,28,28 untuk periode kedua. Rata-rata berhasil hingga 30 yang merupakan jumlah rata-rata hari dalam sebulan. Menarik...
Ada pemikiran atau komentar?