Посилаючись на пост Роба Хайндмана вище https://stats.stackexchange.com/a/1214/70282
Функція find.freq працює чудово. У щоденному наборі даних, який я використовую, він правильно розробив частоту 7
Коли я спробував це лише у дні тижня, він згадав про частоту 23, що надзвичайно близько до 21.42857 = 29.6 * 5/7, що є середньою кількістю робочих днів у місяці. (Або навпаки 23 * 7/5 - 32.)
Озираючись на свої щоденні дані, я експериментував із набором першого періоду, усереднюючи його, а потім знаходив наступний період тощо. Дивіться нижче:
find.freq.all = функція (x) {
f = find.freq (x);
freqs = c (f);
while (f> 1) {
старт = 1; # також спробувати start = f;
x = period.apply (x, seq (початок, довжина (x), f), mean);
f = find.freq (x);
freqs = c (freqs, f);
}
if (length (freqs) == 1) {return (freqs); }
для (i in 2: length (freqs)) {
freqs [i] = freqs [i] * freqs [i-1];
}
freqs [1: (довжина (freqs) -1)];
}
find.freq.all (dailyts) # використання щоденних даних
Вищенаведене дає (7,28) або (7,35) залежно від того, чи починається послідовність з 1 або f. (Див. Коментар вище.)
Що означає, що сезонні періоди для msts (...) повинні бути (7,28) або (7,35).
Логіка видається чутливою до початкових умов, враховуючи чутливість параметрів алгоритму. Середнє значення 28 і 35 становить 31,5, що близько до середньої тривалості місяця.
Я підозрюю, що я винаходив колесо, як називається цей алгоритм? Чи є десь краща реалізація в R?
Пізніше я застосував вищевказаний код, намагаючись усі старти з 1 по 7 і отримав 35,35,28,28,28,28,28 за другий період. В середньому працює до 30, що є середньою кількістю днів у місяці. Цікаво ...
Будь-які думки чи коментарі?