1

私は 2 列の時系列データセットを持っています: x は「毎時」の連続温度データで、y は定期的にサンプリングされた応答データ (毎日午前 5 時、午後 2 時、午後 8 時に取得された定期的なサンプル) です。

データを分析するために2つのラグアプローチを行いたい

1) すべての私の y データ (定数) 対徐々に遅れる x データ (x データを 1 時間刻みで 0-24 時間ずらす) をプロットします。つまり、午後 6 時の x と午後 6 時の y です。x 午後 5 時 vs y 午後 6 時 ...... x(前日の午後 5 時) vs y (午後 6 時)

2) 1) と同じですが、累積シフト、つまり x データに対して 1 のステップで 0:24 の「時間的に逆方向」の累積ラグ ウィンドウを使用し、y データに対してテストします。つまり、午後 6 時の x と午後 6 時の y です。x (午後 5 時と午後 6 時の平均) 対 y 午後 6 時 ...... x (前日の午後 6 時から午後 5 時までの平均) 対 y (午後 6 時)

各ラグシナリオ(0〜24)の「y」と「シフトされたx」の線形モデル(lm)をプロットし、ラグの数、lmのp値の列を含むテーブルを作成します。と調整します。lm の R2) で、"x" のどのラグと累積平均ラグが y データを最もよく説明しているかを確認できます。

基本的には「cummean」または「rollapply」関数と同じですが、逆方向に機能しますが、これを行う R には何も見つかりませんでした。X データの反転は機能しません。データの順序を維持する必要があるためです。いくつかの y に対して x のラグが必要なためです。

「i」がラグである各ラグですべてのデータを実行するには、「for」ループが必要になると思います

0ラグのシングルランは次のようになります:

#Creating dummy data 

x<- zoo(c(10,10.5,10.5,11,11.5,12,12.5,12,12,12.5,13,12.5,12,12,11.5,10.5), as.Date(1:16))
y<- zoo(c(rep("NA",3),40,rep("NA",3),45,rep("NA",3),50,rep("NA",3),40), as.Date(1:16))
z<-merge(x, y, all = FALSE)
z

reslt<-lm(z$y~z$x)
a<-summary(reslt)$coefficients[2,4]
b<-summary(reslt)$adj.r.squared

ResltTable<-c(a,b)
colnames(ResltTable)<-c("p-value","Adj. R^2")

ありがとう !

4

1 に答える 1

0

これは、 i を反復する前の i 期間yの値に対して回帰します。x質問では、NA を使用する必要がある場合に「NA」が使用されていることに注意してください。また、質問は毎時を指しますが、毎日のデータを提供するため、毎日のラグが表示されます。自動整列を追加してdyn$lm実行します。lm(昨日、R の開発バージョンでの R の変更に対処する新しいバージョンの dyn が CRAN にリリースされたことに注意してください。)これをラグ 0、1、2、...、10 で実行しましたが、さらにデータがある場合は、より高い値まで実行できます。逆方向に遅れたい場合は、-iiniに置き換えlagます。0 から i までのすべてのラグを使用する場合は、ステートメントを適切に使用lag(x, 0:-i)および調整します。cbind

library(dyn) # also loads zoo


x <- zoo(c(10,10.5,10.5,11,11.5,12,12.5,12,12,12.5,13,12.5,12,12,11.5,10.5), as.Date(1:16))
y <- zoo(c(rep(NA,3),40,rep(NA,3),45,rep(NA,3),50,rep(NA,3),40), as.Date(1:16))
z < -merge(x, y, all = FALSE)
z


k <- 10 # highest lag to consider
tab <- t(sapply(0:10, function(i) {
  fm <- dyn$lm(y ~ lag(x, -i), z)
  s <- summary(fm)
  cbind(i, coef(fm)[1], coef(fm)[2], coef(s)[2, 4], s$adj.r.squared)
}))
colnames(tab) <- c("Lag", "Intercept", "Slope", "P Value", "Adj R Sq")
tab

与える:

> tab
      Lag  Intercept       Slope    P Value   Adj R Sq
 [1,]   0 -13.750000   5.0000000 0.04653741  0.8636364
 [2,]   1  -2.542373   3.8983051 0.09717103  0.7226502
 [3,]   2  -1.944444   3.8888889 0.29647353  0.2424242
 [4,]   3  14.651163   2.5581395 0.49421946 -0.1162791
 [5,]   4  70.357143  -2.1428571 0.78770438 -0.7857143
 [6,]   5  53.571429  -0.7142857 0.87896228 -0.9285714
 [7,]   6  58.461538  -1.1538462 0.84557904 -0.8846154
 [8,]   7  57.884615  -1.1538462 0.84557904 -0.8846154
 [9,]   8 160.000000 -10.0000000        NaN        NaN
[10,]   9 102.500000  -5.0000000        NaN        NaN
[11,]  10 120.000000  -6.6666667        NaN        NaN
于 2016-12-14T13:06:11.630 に答える