2017-01-29 3 views
-3

Ich habe dieses Problem im Laufe der Jahre mehrmals aufgetreten, vielleicht bin ich nur etwas missverstanden oder irgendwie nur albern darüber. Ich habe ein seltsames Problem bei einem rollierenden Durchschnitt in unregelmäßigen Zeitreihen erlebt. Eine gute Übersicht über die zur Verfügung stehenden Methoden in Paketen und einfaches Skript ist hier: Calculating moving average in RR Rolling Durchschnitt von unregelmäßigen Zeitreihen

ich kann einige von ihnen werden Verlesen, aber ich sehe ein Problem mit unregelmäßiger Zeitreihe im Umgang. Zum Beispiel erfordert die übliche Methode des Rollens im Paket zoo eindeutige Werte für jede Daten. Aber in diesem Fall ist dies nicht der gleitende Durchschnitt, sondern ein gleitender Durchschnitt der Mittelwerte pro Zeiteinheit - Zeiteinheiten werden weniger Datenpunkte haben einen vergleichsweise größeren Einfluss auf den Durchschnitt als solche mit mehr.

Ein echter gleitender Durchschnitt scheint mir nicht mit Aggregaten arbeiten zu müssen, sondern mit Verteilungen für jeden berechneten Punkt.

Da ich den folgenden Datenrahmen oder irreguläre Werte habe, wie kann ich am besten einen gleitenden Durchschnitt für jeden der Werte erstellen.

df <- data.frame(year = c(rep(2000,3),rep(2001,1),rep(2004,4),rep(2005,3),+ 
     rep(2006,3),rep(2007,1),rep(2008,2),rep(2009,6),rep(2010,8)),+ 
     value1=rnorm(31), value2=rnorm(31), value3=rnorm(31)) 

fand ich eine einfache Möglichkeit, es über subsetting zu tun, die ich als eine erste Antwort schreiben würde, aber das funktioniert unter bestimmten Umständen und muß jedes Mal angepasst werden. Ich frage mich, was eine allgemeine Lösung ist. Wenn jemand in der Lage ist, die Praktiken der Verwendung von Durchschnittswerten im Vergleich zu Durchschnittswerten von Verteilungen in rollierenden Mittelberechnungen zu kommentieren, wäre dies besonders hilfreich. Vielen Dank!

Antwort

0

Also hier ist die einfache Teilmenge, die ich mir ausgedacht habe. Kann hilfreich sein, wenn jemand die gleichen Probleme findet:

df <- data.frame(year = c(rep(2000,3),rep(2001,1),rep(2004,4),rep(2005,3), + 
rep(2006,3),rep(2007,1),rep(2008,2),rep(2009,6),rep(2010,8)), + 
value1=rnorm(31), value2=rnorm(31), value3=rnorm(31)) 

rmeans <- data.frame() 
for (i in (min(df$year)+2):(max(df$year)-2)){ 
    rmeans <- rbind(rmeans, data.frame(year=i,as.data.frame.list(colMeans(df + 
[df$year>=(i-2)&df$year<(i+2),-c(1,2)])))) 
} 
Verwandte Themen