R中的通道归一化运算符

时间:2018-07-08 18:03:32

标签: r rstudio formula

我是R语言的新手,我试图在R语言中重新创建Channel Normalization Operator,但效果不佳。 我要计算的公式是:

CNO = [(St - Smin(n))]/(Smax(n)-Smin(n)]

其中: St是时间t处的时间序列值。 Smin(n)是持续n天的时间序列的最小值。 Smax(n)是时间序列的最大值,最近n天。 n =通道回溯跨度,以天为单位(例如30天)。

到目前为止,我所做的是:

t <- c(RUT_2012_2017T$Close)
n <- 30 #look back period defined by the rule
CN <- {(t - min(tail(t,n)))/((max(tail(t,n)))/(min(tail(t,n))))}

但是它不起作用,因为它仅计算一个最小值。一个在n-30位置。

有人可以帮助我吗? 谢谢。

2 个答案:

答案 0 :(得分:0)

创建一个CNO函数,该函数计算其参数的最后一个组件的CNO,并将其传递给rollapplyr。出于示例目的,我们使用了25个长的随机序列,移动窗口的宽度为5。

library(zoo)

set.seed(123)
x <- rgamma(25, 1) # test data

CNO <- function(x) (tail(x, 1) - min(x)) / (max(x) - min(x))
rollapplyr(x, 5, CNO, fill = NA)

也可以这样做(也可以使用动物园):

mx <- rollmaxr(x, 5, fill = NA)
mn <- - rollmaxr(-x, 5, fill = NA)
(x - mn) / (mx - mn)

答案 1 :(得分:0)

请考虑以下内容:

doFx <- function(pos, len, x, fx) fx(x[(pos-len):pos])

len <- 100
t <- rnorm(len) # just some numbers to work with
n <- 30

# calculations for t[30:100]

Smin <- sapply(n:len, doFx, n, t, min)
Smax <- sapply(n:len, doFx, n, t, max)

CN <- (t[n:len] - Smin)/(Smax - Smin)

您的方程式不同,所以这是我最好的猜测。