In riferimento al post di Rob Hyndman sopra https://stats.stackexchange.com/a/1214/70282
La funzione find.freq funziona perfettamente. Sul set di dati giornaliero che sto usando, ha funzionato correttamente la frequenza a 7.
Quando l'ho provato solo nei giorni della settimana, ha indicato che la frequenza è 23, che è notevolmente vicina a 21.42857 = 29.6 * 5/7, che è il numero medio di giorni lavorativi in un mese. (O al contrario 23 * 7/5 è 32.)
Guardando indietro ai miei dati giornalieri, ho sperimentato un sospetto di prendere il primo periodo, fare la media per quello e quindi trovare il periodo successivo, ecc. Vedi sotto:
find.freq.all = funzione (x) {
f = find.freq (x);
freqs = c (f);
while (f> 1) {
start = 1; #anche provare start = f;
x = period.apply (x, seq (inizio, lunghezza (x), f), medio);
f = find.freq (x);
freqs = c (freqs, f);
}
if (lunghezza (freq) == 1) {return (freq); }
per (i in 2: lunghezza (freq)) {
freqs [i] = freqs [i] * freqs [i-1];
}
freqs [1: (lunghezza (freqs) -1)];
}
find.freq.all (dailyts) #utilizzando i dati giornalieri
Quanto sopra dà (7,28) o (7,35) a seconda che il seq inizi con 1 o f. (Vedi commento sopra.)
Ciò implicherebbe che i periodi stagionali per msts (...) dovrebbero essere (7,28) o (7,35).
La logica appare sensibile alle condizioni iniziali data la sensibilità dei parametri dell'algoritmo. La media di 28 e 35 è 31,5 che è vicino alla durata media di un mese.
Ho il sospetto di aver reinventato la ruota, come si chiama questo algoritmo? Esiste una migliore implementazione in R da qualche parte?
Più tardi, ho eseguito il codice precedente nel provare tutti gli inizi da 1 a 7 e ho ottenuto 35,35,28,28,28,28,28 per il secondo periodo. La media arriva a 30, che è il numero medio di giorni in un mese. Interessante...
Qualche pensiero o commento?