2

xtsオブジェクトに対して100日間のローリング回帰を実行し、すべての日付の勾配係数のt統計量を返そうとしています。xtsオブジェクト、価格があります:

> tail(prices)
             DBC   EEM   EFA    GLD   HYG    IEF   IWM   IYR    MDY    TLT
2012-11-02 27.14 41.60 53.69 162.60 92.41 107.62 81.19 64.50 179.99 122.26
2012-11-05 27.37 41.80 53.56 163.23 92.26 107.88 81.73 64.02 181.10 122.95
2012-11-06 27.86 42.13 54.07 166.30 92.40 107.39 82.34 64.16 182.69 121.79
2012-11-07 27.34 41.44 53.26 166.49 91.85 108.29 80.34 63.84 178.90 124.00
2012-11-08 27.38 40.92 52.78 167.99 91.55 108.77 79.21 63.19 176.37 125.84
2012-11-09 27.60 41.00 52.80 167.82 91.39 108.78 79.38 62.98 176.80 125.98

そして、最後の100個の価格の回帰からt値を生成し、価格と同じ列名を持つxtsオブジェクトとして返す関数:

compute.regression <- function(x) 
{
  last100 = last(x,100)
  fit <- lm (last100~time(last100))
  tval <- unlist(lapply( coef(summary(fit)), "[" ,"(Intercept)"  ,"t value"))
  tval.mat <-as.matrix(tval)
  tval.mat2 <- matrix(c(tval.mat), nrow=1, ncol=10)
  new2 <- xts(tval.mat2, Sys.Date())
  colnames(new2) <- tickers
  return(new2)
}

> compute.regression(prices)
                 IWM       EFA       HYG       EEM       IYR      IEF       TLT            DBC       GLD      MDY
2012-11-10 -7.642781 -14.33474 -16.28911 -14.52982 -15.85337 5.732489 -8.026495 -1.960392 -11.82474 8.686045

ただし、この関数は現在の日付のt値のみを返します。価格xtsオブジェクトに含まれるすべての日付のt値を含むxtsオブジェクトが必要です。使用しようとしていますrollapplyが、どこにも行きません:

fit.r <- function (x) 
{
      hard <- lm (x~time(x))
      return(hard)
}

compute.r <- function(x)
{  
  l100.ra <- rollapply(x, 100, fit.r, fill=NA, align='right')
  tval <- unlist(lapply( coef(summary(l100.ra)), "[" ,"(Intercept)"  ,"t value"))
  tval.mat <-as.matrix(tval)
  tval.mat2 <- matrix(c(tval.mat), nrow=1, ncol=10)
  new2 <- xts(tval.mat2, Sys.Date())
  colnames(new2) <- tickers
  return(new2)
}

しかし、これはエラーを返します:

Compute.r(prices)zoo(rval、index(x)[i])のエラー:“ x”:無効なzooオブジェクトを定義しようとしました

問題がl100.ra行にあることはわかっていますが、修正できません。何かご意見は?

編集1

以下に提供される機能:

x <- prices
f <- function (x) {
  res <- coef(summary(lm(x ~ time(x)))
  sapply(res, "[" ,"time(x)"  ,"t value")
}
r <- rollapplyr(x, 100, f, by.column=FALSE)

正常に動作しますが、日付/時刻の形式を次のように変更します。

> last(r,5)
           Response MDY Response TLT
1352160000     15.38380    -7.913764
1352246400     14.81888    -7.957261
1352332800     13.96203    -7.666699
1352419200     13.28624    -7.299532
1352678400     12.75266    -7.100558

タイムスタンプを読んでいますが、変換が行われた理由がわかりません。また、私が試してみると:

last(index(r),5)
[1] "2012-11-06 GMT" "2012-11-07 GMT" "2012-11-08 GMT" "2012-11-09 GMT" "2012-11-12 GMT"

タイムスタンプをPOSIXct形式で表示します。ここに手がかりはありますか?上記の価格の形式に戻す必要があります。

4

1 に答える 1

4

呼び出しrollapplyは、t値を返す関数を呼び出す必要があります。現在、オブジェクトを返しますが、これはzooオブジェクトのlm有効な値ではありません。coredata

関数がt値のみを返すようにすると、機能します。

library(quantmod)
getSymbols("SPY;IEF")
x <- merge(Cl(SPY),Cl(IEF))
f <- function (x) {
  res <- coef(summary(lm(x ~ time(x))))
  sapply(res, "[" ,"(Intercept)"  ,"t value")
}
r <- rollapplyr(x, 100, f, by.column=FALSE)
于 2012-11-10T19:08:08.453 に答える