Κινητός μέσος όρος στην R

Έστω μια ακολουθία τιμών :

$$ x_t = x_1, x_2, x_3 \ldots $$

Στην απλή περίπτωση του κινητού μέσου όρου, πχ 3 όρων, ορίζουμε την ακολουθία

$$ m_3 = \frac{x_1+x_2+x_3}{3} \, , \, m_4 = \frac{x_2+x_3+x_4}{3} \, \, $$ κτλ

Υπολογίσουμε δηλαδή το μέσο όρο για 3 διαδοχικές τιμές. Το πλήθος των στοιχείων λέγεται παράθυρο (window), εδώ ίσο με 3. Προφανώς, ανάλογα με την περίπτωση, μπορείτε να έχετε διαφορετικό παράθυρο, πχ 5, 10 ή και 50, 200 κτλ.

Το R δε διαθέτει έτοιμη συνάρτηση για το υπολογισμό του κινητού μέσου όρου. θα χρησιμοποιήσουμε τη συνάρτηση filter, η οποία με κάποιο τρυκ θα αποδώσει τον κινητό μέσο όρο.

Έστω η ακολουθία τιμών 1:10 και πως θέλουμε να υπολογίσουμε τον κινητό μέρο με παράθυρο 3. Δηλαδή το μέσο όρο των 1,2,3, τον μέσο όρο των 2,3,4, τον μέσο όρο των 3,4,5 κτλ κτλ. Να πως γίνεται:

> x <- 1:10
> filter(x, rep(1/3, 3), sides=1)
Time Series:
Start = 1 
End = 10 
Frequency = 1 
 [1] NA NA  2  3  4  5  6  7  8  9

Υπενθυμίζεται πως η συνάρτηση rep() επαναλαμβάνει κάποιες τιμές, εδώ επαναλαμβάνει τρεις φορές το 1/3:

> rep(1/3, 3)
[1] 0.33333 0.33333 0.33333

Η επιλογή sides=1 λέει πως λαμβάνονται υπ'όψιν μόνο οι προηγούμενες τιμές, διαφορετικά ο μέσος όρος υπολογίζεται ως προς την κεντρική τιμή. Αν παραλείψουμε την επιλογή θα πάρουμε:

> filter(x, rep(1/3, 3))
Time Series:
Start = 1 
End = 10 
Frequency = 1 
 [1] NA  2  3  4  5  6  7  8  9 NA

Τελικά, ο τύπος:

> filter(x, rep(1/3, 3), sides=1)

σημαίνει: Φιλτράρισε τα δεδομένα του x ανά 3 με στάθμιση 1/3 (επομένως μέση τιμή) υπολογίζοντας τις 3 προηγούμενες τιμές από την τρέχουσα θέση.

Μια εξαιρετική ιδέα είναι να δοκιμάσετε τον τύπο για διαφορετικά x μέχρι να εξοικιωθείτε με τον υπολογισμό.

Η ανάλυση χρημαστηριακών χρονολογικών σειρών χρησιμοποιεί πολλούς ακόμα τύπους για κινητούς μέσους όρους. Εδώ θα δείξουμε ένα απλό παράδειγμα για λευκό θόρυβο και τυχαίο περίπατο με τον κλασσικό κινητό μέσο όρο.

Ας θεωρήσουμε μια ακολουθία τιμών (χρονολογική σειρά) που είναι λευκός θόρυθος:

x <- rnorm(100)

και ο αντίστοιχος τυχαίος περίπατος που παράγεται από τον λευκό θόρυθο:

y <- cumsum(x)
Για παράθυρο ίσο με 10:
w <- 10

Ο κινητός μέσος όρος είναι:

m <- filter(x, rep(1/w, w), sides=1)

Και μπορεί να παρασταθεί γραφικά ως εξής:

plot(x, type="l")
lines(m, col=2, lwd=6)

351a

Ο κινητός μέσος όρος του τυχαίου περιπάτου είναι:

m <- filter(y, rep(1/w, w), sides=1)

Και μπορεί να παρασταθεί γραφικά ως εξής:

plot(y, type="l")
lines(m, col=2, lwd=6)

351a

Όπως παρατηρείτε ο κινητός μέσος όρος εξομαλύνει τα δεδομένα.

Συνδεθείτε για περισσότερες δυνατότητες αλληλεπίδρασης,
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.

Creative Commons License
Εκπαιδευτικό υλικό από τον Αθανάσιο Σταυρακούδη σας παρέχετε κάτω από την άδεια Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.