En referencia a la publicación de Rob Hyndman arriba https://stats.stackexchange.com/a/1214/70282
La función find.freq funciona de manera brillante. En el conjunto de datos diarios que estoy usando, funcionó correctamente la frecuencia para ser 7.
Cuando lo probé solo los días de la semana, mencionó que la frecuencia es 23, que es notablemente cercana a 21.42857 = 29.6 * 5/7, que es el número promedio de días de trabajo en un mes. (O, por el contrario, 23 * 7/5 es 32).
Mirando hacia atrás a mis datos diarios, experimenté con el presentimiento de tomar el primer período, promediar con eso y luego encontrar el siguiente período, etc. Ver a continuación:
find.freq.all = function (x) {
f = find.freq (x);
freqs = c (f);
mientras que (f> 1) {
inicio = 1; #también intente iniciar = f;
x = period.apply (x, seq (inicio, longitud (x), f), media);
f = find.freq (x);
freqs = c (freqs, f);
}
if (length (freqs) == 1) {return (freqs); }
para (i en 2: longitud (freqs)) {
freqs [i] = freqs [i] * freqs [i-1];
}
freqs [1: (longitud (freqs) -1)];
}
find.freq.all (dailyts) #usando datos diarios
Lo anterior da (7,28) o (7,35) dependiendo de si la secuencia comienza con 1 o f. (Ver comentario arriba)
Lo que implicaría que los períodos estacionales para msts (...) deberían ser (7,28) o (7,35).
La lógica parece sensible a las condiciones iniciales dada la sensibilidad de los parámetros del algoritmo. La media de 28 y 35 es 31.5, que está cerca de la duración promedio de un mes.
Sospecho que reinventé la rueda, ¿cómo se llama este algoritmo? ¿Hay una mejor implementación en R en alguna parte?
Más tarde, ejecuté el código anterior al intentar todos los inicios del 1 al 7 y obtuve 35,35,28,28,28,28,28 para el segundo período. El promedio es de 30, que es el número promedio de días en un mes. Interesante...
¿Alguna idea o comentario?