1

我正在尝试在 R 中实现此链接中提到的线性回归曲线并需要帮助。

链接:线性回归曲线

我发现以下 ThinkScript 代码实现了我正在寻找的内容。将其转换为 R 有什么帮助吗?

script inertiaTS {
    input y = close;
    input n = 20;
    rec x = x[1] + 1;
    def a = (n * Sum(x * y, n) - Sum(x, n) * Sum(y, n) ) / ( n * Sum(Sqr(x), n) - Sqr(Sum(x, n)));
    def b = (Sum(Sqr(x), n) * Sum(y, n) - Sum(x, n) * Sum(x * y, n) ) / ( n * Sum(Sqr(x), n) - Sqr(Sum(x, n)));
    plot InertiaTS = a * x + b;
}

这是我到目前为止所拥有的..

Sqr <- function(x) {
return (x^2)
}

inertiaTS <- function(y, n) {
    x <- x + 1;
    a <- (n * rollapply( x*y, n, sum) - rollapply( x, n, sum ) * rollapply( y, n, sum )) / ( n * rollapply( Sqr(x), n, sum ) - Sqr(rollapply( x, n, sum )))
    b <- (rollapply( Sqr(x), n, sum) * rollapply( y, n, sum ) - rollapply( x, n, sum ) * rollapply( x*y, n, sum ) ) / ( n * rollapply( Sqr(x), n, sum ) - Sqr

(rollapply( x, n, sum )))
    return (a * x + b)
}

当我用

lrc <-惯性TS(Cl(stockData$AAPL),20)

我收到以下错误。有什么帮助吗?

seq.default(start.at, NROW(data), by = by) 中的错误:'by' 参数中的错误符号

谢谢。

4

1 回答 1

1

rollapply执行lm任务:

library(zoo)
inertiaTS <- function(y, n) {
  x <- 1:n;
  c.ab=rollapply(y,n,function(yt){
    coef(lm(yt~x))
  },align = "right")                                                                                                                    
  plot(y,col=2)
  lines(c.ab[ ,2]*x[n]+c.ab[ ,1],col=4,lwd=2)
  list(axpb=c.ab[ ,2]*x[n]+c.ab[ ,1],rolcoef=c.ab)
}

#simulate any ts series
set.seed(123)
y=ts(10+sort(rnorm(150,sd=.8))+runif(150))
plot(y)
res<-inertiaTS(y,20)

在此处输入图像描述 尾巴(res$axpb)

[1] 11.84216 11.95979 12.06342 12.05539 12.06578 12.19312
于 2016-06-23T18:16:12.940 回答