2016-04-13 11 views
1

私はデータフレームに基本的な回帰と統計解析のためのいくつかの変数をインポートして格納しました。これらの変数の時系列から、私は自分のDFを構築し、プロット時の明確な参照時間を持つDate変数も付けました。今、私は動的なlm推定のためにDFを時系列に変換する

reg1<-lm(df, ffr ~ cpi + gap) 

のような簡単な回帰を実行すると、すべてが期待される結果と正常に動作します

 time  ffr  cpi   gap 
266 2013-04-01 0.12 0.75   -4.17 
267 2013-07-01 0.09 1.90   -3.85 
268 2013-10-01 0.09 1.28   -3.34 
269 2014-01-01 0.07 1.32   -3.94 
270 2014-04-01 0.09 1.98   -3.24 
271 2014-07-01 0.09 1.31   -2.60 
272 2014-10-01 0.10 -0.02   -2.47 
273 2015-01-01 0.11 -0.06   -2.68 
274 2015-04-01 0.12 2.02   -2.10 
275 2015-07-01 0.13 1.24   -1.98 
276 2015-10-01 0.16 0.78   -2.11 

:DFは、この(私はランダムな部分を取る)のように広く見えます。しかし、私は、自己回帰的な部分、遅れ、前進を伴って、より滑らかで洗練されたモデルを試してみると、物事がかなり乱雑になり、ウェブ上で見つけた解決策は私の場合はうまくいかないようです。以下にいくつかのexemplesです:どのような実際に起こることは、FFRが遅れずにiteselfに回帰していることであるので、

reg2<-lm(df, ffr ~ cpi + gap + lag(ffr)) 

これは、完璧なフィット感を提供します。 はその後、私はそれが表示されますので、私は、

df<-xts(df, order.by=df$time) 

、その後、実際にスーパー奇妙な結果を与える

reg3<-lm(df, ffr ~ cpi + gap + lag(ffr)) 

により、他の場所を見つけると、時系列形式のデータフレームを回すものをフォロー - 私の理解で - cpi、gap、ffrのすべての観測値が変数として使用されていること。 zoo代わりにxtsを使用するときにここ 回帰

Call: 
lm(formula = ffr ~ cpi + gap + lag(ffr), data = small2) 

Residuals: 
ALL 11 residuals are 0: no residual degrees of freedom! 

Coefficients: (16 not defined because of singularities) 
      Estimate Std. Error t value Pr(>|t|) 
(Intercept)   3   NA  NA  NA 
cpi-0.06   1   NA  NA  NA 
cpi 0.75   2   NA  NA  NA 
cpi 0.78   4   NA  NA  NA 
cpi 1.24   3   NA  NA  NA 
cpi 1.28   -1   NA  NA  NA 
cpi 1.31   -1   NA  NA  NA 
cpi 1.32   -2   NA  NA  NA 
cpi 1.90   -1   NA  NA  NA 
cpi 1.98   -1   NA  NA  NA 
cpi 2.02   2   NA  NA  NA 
gap-2.10   NA   NA  NA  NA 
gap-2.11   NA   NA  NA  NA 
gap-2.47   NA   NA  NA  NA 
gap-2.60   NA   NA  NA  NA 
gap-2.68   NA   NA  NA  NA 
gap-3.24   NA   NA  NA  NA 
gap-3.34   NA   NA  NA  NA 
gap-3.85   NA   NA  NA  NA 
gap-3.94   NA   NA  NA  NA 
gap-4.17   NA   NA  NA  NA 
lag(ffr)0.09  NA   NA  NA  NA 
lag(ffr)0.10  NA   NA  NA  NA 
lag(ffr)0.11  NA   NA  NA  NA 
lag(ffr)0.12  NA   NA  NA  NA 
lag(ffr)0.13  NA   NA  NA  NA 

lag(ffr)0.16  NA   NA  NA  NA 

Residual standard error: NA on 0 degrees of freedom 
Multiple R-squared:  NA, Adjusted R-squared:  NA 
F-statistic: NA on 10 and 0 DF, p-value: NA 

のouputを、次の警告

Warning messages: 
1: In model.response(mf, "numeric") : 
    using type = "numeric" with a factor response will be ignored 
2: In Ops.factor(y, z$residuals) : ‘-’ not meaningful for factors 
3: In Ops.factor(r, 2) : ‘^’ not meaningful for factors 

同じことが当てはまります。次に、データフレームとxts/zooオブジェクトの両方の形式のデータを使用して、dynパッケージを試してみましょう。何も動作せず、完璧なフィット感と通常のエラーがそれぞれ得られます。パッケージdynlmを使用しても何も変わりません。何が起こっているかについてのヒントやアイデアはありますか?

ああ、XTSでorginalデータフレームを変換した後、それは全体の問題は、変換がDFを変換するのに失敗したということであるのであれば、私は疑問に思う。この

  time   ffr cpi  gap  
2013-04-01 "2013-04-01" "0.12" " 0.75" "-4.17" 
2013-07-01 "2013-07-01" "0.09" " 1.90" "-3.85" 
2013-10-01 "2013-10-01" "0.09" " 1.28" "-3.34" 
2014-01-01 "2014-01-01" "0.07" " 1.32" "-3.94" 
2014-04-01 "2014-04-01" "0.09" " 1.98" "-3.24" 
2014-07-01 "2014-07-01" "0.09" " 1.31" "-2.60" 
2014-10-01 "2014-10-01" "0.10" "-0.02" "-2.47" 
2015-01-01 "2015-01-01" "0.11" "-0.06" "-2.68" 
2015-04-01 "2015-04-01" "0.12" " 2.02" "-2.10" 
2015-07-01 "2015-07-01" "0.13" " 1.24" "-1.98" 
2015-10-01 "2015-10-01" "0.16" " 0.78" "-2.11" 

のように見えます。

答えて

0

あなたは、単にあなたのデータフレームに新しい列を追加するshiftを使用して、自分で遅れを計算することができます:

df$lag1 <- shift(df$ffr) 
reg3<-lm(ffr ~ cpi + gap + lag1, df) 

の検索結果をあなたの11行使用:時系列に変換し、また

> summary(reg3) 

Call: 
lm(formula = ffr ~ cpi + gap + lag1, data = df) 

Residuals: 
     Min  1Q Median  3Q  Max 
-0.-0.006234 -0.004345 0.003007 0.019277 

Coefficients: 
       Estimate Std. Error t value Pr(>|t|) 
(Intercept) 0.0983353 0.0362563 2.712 0.0350 * 
cpi   -0.0009486 0.0058926 -0.161 0.8774 
gap   0.0215892 0.0066774 3.233 0.0178 * 
lag1   0.6821619 0.2476126 2.755 0.0331 * 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.01254 on 6 degrees of freedom 
    (1 observation deleted due to missingness) 
Multiple R-squared: 0.844, Adjusted R-squared: 0.7659 
F-statistic: 10.82 on 3 and 6 DF, p-value: 0.007808 

をし、 dynlm

dft <- as.ts(df) 
library(dynlm) 
reg4 <- dynlm(ffr ~ cpi + gap + L(ffr,1), dft) 

結果:

> summary(reg4) 

Time series regression with "ts" data: 
Start = 2, End = 11 

Call: 
dynlm(formula = ffr ~ cpi + gap + L(ffr, 1), data = dft) 

Residuals: 
     Min  1Q Median  3Q  Max 
-0.-0.006234 -0.004345 0.003007 0.019277 

Coefficients: 
       Estimate Std. Error t value Pr(>|t|) 
(Intercept) 0.0983353 0.0362563 2.712 0.0350 * 
cpi   -0.0009486 0.0058926 -0.161 0.8774 
gap   0.0215892 0.0066774 3.233 0.0178 * 
L(ffr, 1) 0.6821619 0.2476126 2.755 0.0331 * 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.01254 on 6 degrees of freedom 
Multiple R-squared: 0.844, Adjusted R-squared: 0.7659 
F-statistic: 10.82 on 3 and 6 DF, p-value: 0.007808 

希望します。コメントの後に


EDIT:lagが機能しなかった理由についていくつかの明確化。

> test <- ts(rnorm(48), start=c(2012), frequency=12) 
      Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct 
2012 0.55388567 -1.44187059 -1.81896266 -1.44285425 -1.37991005 -0.49844787 -1.26719606 -0.49876644 1.89507307 -0.74584888 
2013 1.55083914 0.15779179 0.58075346 0.90677437 0.31632688 -0.20882555 0.05336465 -0.22241098 -0.11031220 0.12591051 
2014 1.49442765 1.87654149 -1.18599539 1.72865701 -0.90245650 0.19460586 0.16168719 0.16245094 1.30435313 1.27952402 
2015 0.53370893 -0.74539203 -0.47584512 0.19720682 -1.50906070 -0.21765018 1.03436621 -0.42588233 -0.15680010 -1.46725844 
      Nov   Dec 
2012 0.64720686 -0.88955517 
2013 0.53687326 -0.04852013 
2014 0.02273335 0.33675748 
2015 -0.24954432 -0.89610509 
> lag(test) 
      Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct 
2011                               
2012 -1.44187059 -1.81896266 -1.44285425 -1.37991005 -0.49844787 -1.26719606 -0.49876644 1.89507307 -0.74584888 0.64720686 
2013 0.15779179 0.58075346 0.90677437 0.31632688 -0.20882555 0.05336465 -0.22241098 -0.11031220 0.12591051 0.53687326 
2014 1.87654149 -1.18599539 1.72865701 -0.90245650 0.19460586 0.16168719 0.16245094 1.30435313 1.27952402 0.02273335 
2015 -0.74539203 -0.47584512 0.19720682 -1.50906070 -0.21765018 1.03436621 -0.42588233 -0.15680010 -1.46725844 -0.24954432 
      Nov   Dec 
2011    0.55388567 
2012 -0.88955517 1.55083914 
2013 -0.04852013 1.49442765 
2014 0.33675748 0.53370893 
2015 -0.89610509 

は機能が本当に列自体を変更されていませんが、時間は:

はたぶん、あなたはシリーズは、適切な時間値を持っているこのおもちゃの例と時系列のlag作品がどのようにより明確に表示されますそれが関連付けられている値。しかし、あなたの例では、「通常」のデータフレームでそれをやって:

あなたはそれが時系列でない場合でも、 lagはそれに tsp属性を追加していることを見
> df$ffr 
[1] 0.12 0.09 0.09 0.07 0.09 0.09 0.10 0.11 0.12 0.13 0.16 
> lag(df$ffr) 
[1] 0.12 0.09 0.09 0.07 0.09 0.09 0.10 0.11 0.12 0.13 0.16 
attr(,"tsp") 
[1] 0 10 1 

?tspを参照)が、値そのもの変更しないでください。索引もありません。そのため、lmで使用すると完璧なフィット感が得られます。

あなたがデータフレームでそれを行う一方、時系列に変換し、

> dft[,2] 
Time Series: 
Start = 1 
End = 11 
Frequency = 1 
[1] 0.12 0.09 0.09 0.07 0.09 0.09 0.10 0.11 0.12 0.13 0.16 
> lag(dft[,2]) 
Time Series: 
Start = 0 
End = 10 
Frequency = 1 
[1] 0.12 0.09 0.09 0.07 0.09 0.09 0.10 0.11 0.12 0.13 0.16 

再びそれは、メタデータの変更ではなく、値またはインデックス、lmは違いを理解していないされています。 を参照して、shift、2番目の引数をデフォルトで1に設定すると、遅れを選択できます。

希望します。

+0

'dynlm'を使うとうまくいくようです!さまざまな遅れをもって自由に作業することの利便性を保ち、「遅れ」や「L」の式に直接入れるのに対し、「シフト」は柔軟性がありません。最後の1つが私を困惑させる: 'dynlm'では、lag()やL()で遅れているときの出力が異なっています。 – Ceschi

+0

明確にしようとする回答を更新しました。乾杯。 – lrnzcig

+0

ありがとう!ああ、最後の質問: 'シフト'はパッケージの一部でもRで構築されていないのですか? – Ceschi

関連する問題