Em referência à postagem de Rob Hyndman acima https://stats.stackexchange.com/a/1214/70282
A função find.freq funciona de maneira brilhante. No conjunto de dados diário que estou usando, calculou corretamente a frequência como 7.
Quando o experimentei apenas nos dias da semana, mencionou que a frequência é 23, o que é notavelmente próximo de 21,42857 = 29,6 * 5/7, que é o número médio de dias úteis em um mês. (Ou, inversamente, 23 * 7/5 é 32.)
Revendo meus dados diários, experimentei um palpite de tirar o primeiro período, calcular a média desse valor e, em seguida, encontrar o próximo período, etc. Veja abaixo:
find.freq.all = function (x) {
f = find.freq (x);
freqs = c (f);
while (f> 1) {
start = 1; #também tente iniciar = f;
x = período.aplicação (x, seq (início, comprimento (x), f), média);
f = find.freq (x);
freqs = c (freqs, f);
}
if (comprimento (freqs) == 1) {return (freqs); }
para (i em 2: comprimento (freqs)) {
freqs [i] = freqs [i] * freqs [i-1];
}
freqs [1: (comprimento (freqs) -1)];
}
find.freq.all (dailyts) # usando dados diários
O exemplo acima fornece (7,28) ou (7,35), dependendo de seq começar com 1 ou f. (Veja o comentário acima.)
O que implicaria que os períodos sazonais para msts (...) fossem (7,28) ou (7,35).
A lógica parece sensível às condições iniciais, dada a sensibilidade dos parâmetros do algoritmo. A média de 28 e 35 é 31,5, o que está próximo da duração média de um mês.
Eu suspeito que reinventei a roda, qual é o nome desse algoritmo? Existe uma melhor implementação em R em algum lugar?
Mais tarde, executei o código acima ao tentar todas as partidas de 1 a 7 e obtive 35,35,28,28,28,28,28 pelo segundo período. A média chega a 30, que é o número médio de dias em um mês. Interessante...
Quaisquer pensamentos ou comentários?