Wie kann ich ein rollendes Fenster/Schleife (Rückschauperiode 30 Tage/Datenpunkte) erstellen, während ich die Daten mit base::rank
rangiere? Siehe unten, dass die Funktion apply.rolling
nicht zu funktionieren scheint.apply.rolling window/loop mit einer Rangfunktion
Siehe Beispiel unten:
# example data
require(xts)
set.seed(3)
A <- matrix(runif(900, max=30), ncol=3)
Data <- xts(A, Sys.Date()-300:1)
names(Data) <- c("C1", "C2", "C3")
Daraus ergibt sich (nur der letzten 7 Tage/Datenpunkte werden angezeigt):
2016-06-20 16.71131510 12.80074552 19.27525535
2016-06-21 22.92512330 25.11613536 17.45237229
2016-06-22 20.09403965 17.20945809 28.06481040
2016-06-23 28.68593738 4.84698272 18.36108782
2016-06-24 15.52956209 25.54946621 3.97892474
2016-06-25 25.76582707 18.14117193 8.17883282
2016-06-26 25.23925100 16.07418907 15.35118717
ich nur die letzten 30 Datenpunkte wählen:
rolldata30 <- tail(Data[,2:3], 30)
rollindex30 <- tail(Data[,1], 30)
Ich ordne die Daten (letzten 30 Datenpunkte) von Vektor C2
und C3
Basis d auf ihren ursprünglichen Werten. Dies ist also der Zeitraum 2016-05-28 bis 2016-6-26. Dann mache ich einen neuen Vektor, der einen Durchschnitt der beiden berechnet. factorx
zeigt das Ergebnis, das ich interessiert bin
rank30 <- as.xts(apply(-rolldata30, 2, rank, na.last= "keep"))
factor <- cbind(rollindex30, global = rowMeans(rank30))
factorx <- last(factor)
was zur Folge hat.
2016-06-20 16.711315 14.5
2016-06-21 22.925123 9.5
2016-06-22 20.094040 9.0
2016-06-23 28.685937 19.0
2016-06-24 15.529562 15.0
2016-06-25 25.765827 18.5
2016-06-26 25.239251 17.0
mit Daten am letzten Tag:
C1 global
2016-06-26 25.23925 17
Wie kann ich die Berechnung Roll machen in Um die gleiche Berechnung für 2016-5-27 bis 2016-06-26, 2016-05-26 bis 2016-06-25 usw.?
PerformanceAnalytics::apply.rolling
Verwendung gibt einen Fehler:
Fehler in xts (x, order.by = order.by, Frequenz = Frequenz, .CLASS = "double",: order.by erfordert eine entsprechende zeit basiertes Objekt
require(PerformanceAnalytics)
test1 <- apply.rolling(Data, width=30, gap=30, by=1, FUN=function(x) as.xts(-x, 2, rank))
ich die folgende Funktion aus. factorz
das gleiche Ergebnis gibt. Vielleicht hilft die Funktion zu machen, rollen sie?
rollrank <- function(x)
{
a <- tail(x, 30)
b <- as.xts(apply(-a, 2, rank, na.last= "keep"))
c <- cbind(a, global = rowMeans(b))
d <- last(c)
return(d)
}
factorz <- rollrank(Data[,2:3])
Vielen Dank, das ist, was ich gesucht habe! –