Ссылка на пост Роба Хиндмана выше https://stats.stackexchange.com/a/1214/70282
Функция find.freq работает великолепно. На ежедневном наборе данных, который я использую, он правильно рассчитал частоту 7.
Когда я пробовал это только в дни недели, он упоминал, что частота равна 23, что удивительно близко к 21,42857 = 29,6 * 5/7, что является средним числом рабочих дней в месяце. (Или, наоборот, 23 * 7/5 - это 32.)
Оглядываясь назад на свои ежедневные данные, я экспериментировал с догадкой: взять первый период, усреднить по нему, а затем найти следующий период и т. Д. См. Ниже:
find.freq.all = функция (х) {
е = find.freq (х);
freqs = C (F);
в то время как (е> 1) {
начать = 1; # также попробуйте start = f;
х = period.apply (х, след (начало, длина (х), е), средний);
е = find.freq (х);
freqs = C (freqs, F);
}
if (length (freqs) == 1) {return (freqs); }
для (я в 2: длина (частоты)) {
freqs [I] = freqs [я] * freqs [I-1];
}
freqs [1: (длина (freqs) -1)];
}
find.freq.all (dailyts) # использование ежедневных данных
Выше приведены (7,28) или (7,35) в зависимости от того, начинается ли seq с 1 или f. (См. Комментарий выше.)
Что подразумевает, что сезонные периоды для msts (...) должны быть (7,28) или (7,35).
Логика кажется чувствительной к начальным условиям, учитывая чувствительность параметров алгоритма. Среднее значение 28 и 35 составляет 31,5, что близко к средней продолжительности месяца.
Я подозреваю, что я заново изобрел колесо, как называется этот алгоритм? Есть ли лучшая реализация в R где-нибудь?
Позже я запустил приведенный выше код, попробовав все запуски с 1 по 7, и получил 35,35,28,28,28,28,28 за второй период. В среднем получается до 30, что является средним числом дней в месяце. Интересно...
Есть мысли или комментарии?