2017-02-26 10 views
0

私はACFを計算するための以下の式を持って、私が使用してRで関数ACFを使用しますが、次のデータのためにそれを手動で計算し、その結果をプロットしたい `tをggplot2計算ACF手動

data<-rweibull(168,2,3) 
time<-seq(from=as.POSIXct("2014-01-01 00:00"),to=as.POSIXct("2014-01-07 23:00"),by="hour") 
df<-data.frame(time,data) 

ここで、kはタイムラグであり、μは時系列(、Yt = 1,2、...、N)の平均である。 ACFは、100時間のタイムラグまで考慮した時系列についてここで計算されます。私の最終的な出力では、100個の値を持つベクトルが必要です。方程式では、100回の時間遅れに対してRの方程式のYt + k部分を設定する方法がわかりません。どんな助けもありがとう。

今のところ私はコードを持っていますが、1つのベクトルで100ラグの結果を得るためのコードを設定する方法はわかりません。あなたがしたい場合は、これを試すことができ

x <- data - mean(data) 
sum(x[1:99] * x[2:100])/sum(x^2)# TIME LAG OF 100 
+0

なぜあなたは手動でそれをしたいですか?これまでに何を試しましたか? – Sotos

+0

関数を変更して結果を比較するには時間差Yt + kを異なるステップで設定する。 – kelamahim

+0

まず、 'dplyr'パッケージで提供される' lag'機能を見てみましょう。ラグのサイズが1:100となる(おそらく)ループする必要があります – Sotos

答えて

1

...

data<-rweibull(168,2,3) 
time<-seq(from=as.POSIXct("2014-01-01 00:00"),to=as.POSIXct("2014-01-07 23:00"),by="hour") 
df<-data.frame(time,data) 
x <- data - mean(data) 

maxLag<-100 
acfResults<- data.frame(k=c(1:maxLag), acf=NA, stringsAsFactors = FALSE) 


for (k in 1: maxLag) { 
    N <-nrow(df)-k 
    acf<- sum(x[1:N]*x[(1+k):(N+k)])/sum(x^2) 
    acfResults[k,1] <-k 
    acfResults[k,2] <-acf 
} 
+0

あなたの努力をありがとうが、それは明確ではないあなたのコメントごとに更新された上記の – kelamahim

+0

の上にacfを格納する方法。 (ただし、テストを済ませたら、上のコメントに引用されている既存の機能を使用するのが圧倒的に好ましいでしょう。 – greengrass62

+0

あなたの努力を感謝します – kelamahim