2017-08-19 3 views
0

回転回帰の係数(特に切片)を計算したいと考えています。多くの従属変数があります。その一部(Y1とY2)を以下に示します。それらの各々は、独立変数X1およびX2で回帰される。さらに、Y1およびY2の両方は、異なる期間にNAsを有する。データは毎月の間隔を持つ時系列です。ローリング・ウィンドウには、これは私のコードである6列内の従属変数による回転回帰の係数を計算する

です:

rr <- rollapply(df, width = 6, 
        FUN = function(z) coef(lm(Y1~ X1+X2, 
          data = as.data.frame(z))), 
       by.column = FALSE, align = "right") 

しかし、このコードの問題は
1)それは一度だけで一つの独立変数、この場合は(Y1)を扱うということです、
2)すべての回帰回帰について同じ係数を与えた。私はNAの存在が圧延回帰を台無しにしたと仮定しますか?
誰かが光を当てることができれば大変感謝します。ありがとう。

これはサンプルデータです。

Date  Y1 Y2 X1  X2 
1/1/2009 NA 1.51 0.02 0.75 
2/1/2009 NA -0.38 0.01 0.59 
3/1/2009 NA 1.54 0.02 0.96 
4/1/2009 NA 1.78 0.01 0.92 
5/1/2009 NA 0.94 0.02 0.02 
6/1/2009 NA 1.37 0.01 0.46 
7/1/2009 NA 1.22 0.01 0.61 
8/1/2009 NA 1.32 0.01 0.04 
9/1/2009 NA 0.83 0.01 0.03 
10/1/2009 NA 0.95 0.02 0.61 
11/1/2009 NA 0.28 0.03 0.53 
12/1/2009 NA 0.17 0.01 0.32 
1/1/2010 1.71 NA 0.03 0.53 
2/1/2010 0.39 NA 0.03 0.16 
3/1/2010 0.11 NA 0.01 0.58 
4/1/2010 1.25 NA 0.01 0.41 
5/1/2010 0.57 NA 0.01 0.9 
6/1/2010 0.48 NA 0.01 0.58 
7/1/2010 0.16 NA 0.01 0.03 
8/1/2010 0.37 NA 0.01 0.23 
9/1/2010 0.31 NA 0.01 0.77 
10/1/2010 0.63 NA 0.01 0.75 
11/1/2010 0.61 NA 0.01 0.74 
12/1/2010 0.91 NA 0.01 0.41 

答えて

1

二つの問題があります。rollapplyにdata.frameを渡す

  1. が、それはマトリックスに変換されるようにすると、いずれかの列が文字列であるため、結果は文字行列になりますが、数字は必要なものです。 df[-1]または下記のコードを使用してください。

  2. lmはすべてのNA値を持つ従属変数を受け入れません。そのような場合は、それを確認してNAを返します。

いくつかの改良を加え:

  • は、ファーストクラスの動物園への入力に変換します。
  • 2のリストを生成するc("Y1", "Y2")rollapplyr
  • lapply機能rollを使用して実際のrollapplyを実行する機能rollを定義するデータと式
  • の左右を所与の係数を取得する機能getCoefを定義動物園は
  • 、必要に応じてデータフレームのリストを与えるためにLオーバーfortify.zoo地図オブジェクト

コード:

z <- read.zoo(df, FUN = as.yearmon, format = "%m/%d/%Y") 

getCoef <- function(z, lhs, rhs) { 
    if (all(is.na(z[, lhs]))) NA 
    else coef(lm(paste(lhs, "~", rhs), z)) 
} 

roll <- function(z, lhs, rhs = "X1 + X2") { 
    rollapplyr(z, 6, getCoef, by.column = FALSE, coredata = FALSE, lhs = lhs, rhs = rhs) 
} 

ynames <- c("Y1", "Y2") 
L <- lapply(ynames, roll, z = z) 

任意に、data.framesのリストについて:

Map(fortify.zoo, L) 

注:再現可能な形で入力dfである:

Lines <- "Date Y1 Y2 X1 X2 
1/1/2009 NA 1.51 0.02 0.75 
2/1/2009 NA -0.38 0.01 0.59 
3/1/2009 NA 1.54 0.02 0.96 
4/1/2009 NA 1.78 0.01 0.92 
5/1/2009 NA 0.94 0.02 0.02 
6/1/2009 NA 1.37 0.01 0.46 
7/1/2009 NA 1.22 0.01 0.61 
8/1/2009 NA 1.32 0.01 0.04 
9/1/2009 NA 0.83 0.01 0.03 
10/1/2009 NA 0.95 0.02 0.61 
11/1/2009 NA 0.28 0.03 0.53 
12/1/2009 NA 0.17 0.01 0.32 
1/1/2010 1.71 NA 0.03 0.53 
2/1/2010 0.39 NA 0.03 0.16 
3/1/2010 0.11 NA 0.01 0.58 
4/1/2010 1.25 NA 0.01 0.41 
5/1/2010 0.57 NA 0.01 0.9 
6/1/2010 0.48 NA 0.01 0.58 
7/1/2010 0.16 NA 0.01 0.03 
8/1/2010 0.37 NA 0.01 0.23 
9/1/2010 0.31 NA 0.01 0.77 
10/1/2010 0.63 NA 0.01 0.75 
11/1/2010 0.61 NA 0.01 0.74 
12/1/2010 0.91 NA 0.01 0.41" 
df <- read.table(text = Lines, header = TRUE) 
関連する問題