Ich habe folgende Original-CodeVerschiedene Ergebnis bei der Multiplikation xts Objekte gegen vector'ed xts Objekte
prices <- c(11.44, 12.64, 13.12, 11.98, 19.34)
dates <- seq(as.Date("2011-07-01"), by=1, len=length(prices))
ts.prices <- xts(prices, order.by =dates)
covariance <- function(x, convert.to.vec=FALSE) {
if (convert.to.vec == TRUE)
x <- as.vector(x)
xbar <- mean(x)
N <- length(x)
i <- 1
covariance <- sum((x[1:(N-i)]-xbar)*(x[(1+i):N]-xbar))
return(covariance)
}
Der Ausgang der covariance
Funktion wird anders sein, ob convert.to.vec
ist TRUE
oder FALSE
:
> covariance(ts.prices, TRUE)
[1] -5.679376
> covariance(ts.prices, FALSE)
[1] 4.445328
Nach dem Hinzufügen einiger Variablen und print
s Debugging erleichtern den Code:
können wir, dass der Wert von term.3
ist derjenige, der verschieden ist:
> covariance(ts.prices, TRUE)
[1] -2.264 -1.064 -0.584 -1.724
[1] -1.064 -0.584 -1.724 5.636
[1] 2.408896 0.621376 1.006816 -9.716464
[1] -5.679376
> covariance(ts.prices, FALSE)
[,1]
2011-07-01 -2.264
2011-07-02 -1.064
2011-07-03 -0.584
2011-07-04 -1.724
[,1]
2011-07-02 -1.064
2011-07-03 -0.584
2011-07-04 -1.724
2011-07-05 5.636
e1
2011-07-02 1.132096
2011-07-03 0.341056
2011-07-04 2.972176
[1] 4.445328
Wenn convert.to.vec
TRUE
ist, term.3
enthält 4 Gleitkommazahlen, während es enthält 3 Gleitpunktzahlen wenn convert.to.vec
FALSE
ist. Also nehme ich an, dass der unterschiedliche Wert durch die Multiplikation zweier xts-Objekte mit zwei vektorisierten xts-Objekten verursacht wird. Warum ist das der Fall?
DC
Ich glaube [Joshua's Antwort hier] (http://stackoverflow.com/a/10516245/2414948) ist relevant. 'Ops.xts' scheint' merge.xts' zu verwenden, um überlappende "Indizes" zu berücksichtigen, bevor eine arithmetische Operation stattfindet. –
@alexis_laz Danke für den Link. Kannst du es als Antwort posten, damit ich es annehmen kann? – DivineComedy
Ich bin mir der 'xts'-Dokumentation nicht ganz bewusst, also nicht sicher, wie man eine formale Antwort verfasst. Wenn die verknüpfte QA ausreichend ist, könnte es als Duplikat markiert werden –