Al utilizar la función ROC en el paquete TTR de R, se puede elegir entre continuo (el valor predeterminado) y discreto, pero sin ninguna orientación sobre qué elegir cuando. En el código la diferencia es:
roc <- x/lag(x) - 1
contra:
roc <- diff(log(x))
Reconozco que mis matemáticas son débiles, pero ¿no son lo mismo?
cbind(ROC(x,type='continuous'),ROC(x,type='discrete'),log(x))
da:
2012-08-16 19:00:00 NA NA 8.673855
2012-08-17 07:00:00 0.00008549566 0.00008549932 8.673940
2012-08-17 08:00:00 0.00000000000 0.00000000000 8.673940
2012-08-17 09:00:00 -0.00085528572 -0.00085492006 8.673085
2012-08-17 10:00:00 0.00034220207 0.00034226063 8.673427
2012-08-17 11:00:00 -0.00102695773 -0.00102643059 8.672400
Hay una sutil diferencia, pero ¿es una diferencia real o un artefacto del cálculo en coma flotante?
Parece que Quantmod: ¿cuál es la diferencia entre ROC(Cl(SPY)) y ClCl(SPY)? es casi pedir lo mismo. Pero las respuestas parecen decir que con una se suman los rendimientos y con la otra se multiplican. Está claro que no va a ser el caso de los números anteriores.
(Por cierto, nadie ha respondido a su pregunta (en los comentarios) sobre qué formulario espera el paquete PerformanceAnalytics, lo que podría haber dado una pista sobre cuál elegir cuando).
Aquí están los datos de la prueba para lo anterior:
structure(c(5848, 5848.5, 5848.5, 5843.5, 5845.5, 5839.5), class = c("xts",
"zoo"), .indexCLASS = c("POSIXct", "POSIXt"), .indexTZ = "", tclass = c("POSIXct",
"POSIXt"), tzone = "", index = structure(c(1345143600, 1345186800,
1345190400, 1345194000, 1345197600, 1345201200), tzone = "", tclass = c("POSIXct",
"POSIXt")), .Dim = c(6L, 1L), .Dimnames = list(NULL, "Close"))