W nawiązaniu do postu Roba Hyndmana powyżej https://stats.stackexchange.com/a/1214/70282
Funkcja find.freq działa doskonale. W codziennym zestawie danych, którego używam, poprawnie wyliczyła częstotliwość na 7.
Kiedy wypróbowałem to tylko w dni robocze, wspomniałem, że częstotliwość wynosi 23, co jest niezwykle zbliżone do 21,42857 = 29,6 * 5/7, co jest średnią liczbą dni roboczych w miesiącu. (Lub odwrotnie: 23 * 7/5 to 32.)
Patrząc wstecz na moje codzienne dane, eksperymentowałem z przeczuciem, biorąc pierwszy okres, uśredniając go, a następnie znajdując następny okres itp. Zobacz poniżej:
find.freq.all = funkcja (x) {
f = find.freq (x);
freqs = c (f);
podczas gdy (f> 1) {
start = 1; # także spróbuj 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); }
dla (i in 2: length (freqs)) {
freqs [i] = freqs [i] * freqs [i-1];
}
freqs [1: (length (freqs) -1)];
}
find.freq.all (dailyts) # wykorzystując codzienne dane
Powyższe daje (7,28) lub (7,35) w zależności od tego, czy sekwencja zaczyna się od 1 czy f. (Patrz komentarz powyżej.)
Co oznaczałoby, że okresy sezonowe dla msts (...) powinny wynosić (7,28) lub (7,35).
Logika wydaje się wrażliwa na warunki początkowe, biorąc pod uwagę czułość parametrów algorytmu. Średnia z 28 i 35 wynosi 31,5, co jest zbliżone do średniej długości miesiąca.
Podejrzewam, że wymyśliłem koło na nowo, jak nazywa się ten algorytm? Czy jest gdzieś lepsza implementacja w R?
Później uruchomiłem powyższy kod, próbując wszystkich początków od 1 do 7, i otrzymałem 35.325.28,28,28,28 za drugi okres. Średnia oblicza się do 30, co jest średnią liczbą dni w miesiącu. Ciekawy...
Wszelkie myśli lub komentarze?