2016-08-07 13 views
2

Iはcovariance関数の出力はconvert.to.vecであるか異なるであろう異なる結果は、オブジェクト

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) 
} 

次の元のコードを有するTRUEまたはFALSE

> covariance(ts.prices, TRUE) 
[1] -5.679376 
> covariance(ts.prices, FALSE) 
[1] 4.445328 

いくつかの変数を追加した後、printをデバッグするコードを簡単に作成した後:

FALSEある場合、それは3つの浮動番号が含まれ、一方

> 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 

convert.to.vecTRUEある、term.3は、4つの浮動番号が含ま:

我々はterm.3の値が異なるものであることがわかります。だから、私は、異なる値が2つのxtsオブジェクトの乗算と2つのvector'ed xtsオブジェクトによって引き起こされると仮定しています。これはなぜですか?そのインデックスが同一でない場合は、私たちが見ることができるような+*などOps.xts関数は、2つのxtsオブジェクトに使用される@ alexis_lazさんのコメントに基づいて

DC

+0

私は[ジョシュアの答えはこちら](http://stackoverflow.com/a/10516245/2414948)が適切であると信じています。 'Ops.xts'は、算術演算が行われる前に重複している" index "を考慮に入れるために' merge.xts'を使うようです。 –

+0

@alexis_lazリンクをありがとう。私はそれを受け入れることができるように答えとして投稿できますか? – DivineComedy

+0

私は 'xts'のドキュメントを十分に理解していないので、正式な答えをどのように構成するのか分かりません。リンクされたQAが十分であれば、重複としてマークされる可能性があります –

答えて

1

は、両方のオブジェクトはまず、お互いにマージされますxts`s sourcecodeに:私の例では

if(NROW(e1)==NROW(e2) && identical(.index(e1),.index(e2))) { 
    .Class <- "matrix" 
    NextMethod(.Generic) 
} else { 
    tmp.e1 <- merge.xts(e1, e2, all=FALSE, retclass=FALSE, retside=c(TRUE,FALSE)) 
    e2 <- merge.xts(e2, e1, all=FALSE, retclass=FALSE, retside=c(TRUE,FALSE)) 
    e1 <- tmp.e1 
    .Class <- "matrix" 
    NextMethod(.Generic) 
} 

term.1term.2は、このように両方のオブジェクトがマージされ、同一でないインデックスを持っている、とOps機能*は、重複する日付のみを含むオブジェクトを返します。 1つの解決方法は、元のxオブジェクトのcoredataに電話することです。