2017-03-22 12 views
0

ProblemR、AR(1)およびFGLS計算。遅れこんにちは

Data

変数みんなを作成することができません。私は教授の助けを借りずにこの2週間問題を解決しようとしています。私は本当に正確なコードを要求していませんが、問題を開始することはできません...

変数(M、R、Y)のデータセットが与えられ、回帰を実行するように求められます画像に示されています。私の問題は、遅れた変数を作成することができないということです。私は、1)時系列オブジェクトを使う必要はない、2)私は時系列オブジェクトを使うべきだと言っています。さらに、t = 2以降の回帰を実行してp_hatを得ることを求める部分に行くと、私が得ることのできる唯一の係数は1.0000であり、私たちが得ようとしているB1は3.14eのようなものになります-11、信じられないほど間違ったこと。ここでは、与えられたデータに基づいて、私が変数に現在持っているものを示します。誰かが正しい方向に私を導くのを助けることができるなら、私は本当にそれを感謝するでしょう。

#Creates Time Series Objects Which Can Be Lagged using lag() 
Mt2 <- ts(data=DATA$M, start=1,end=180,frequency=1) 
Mt1 <- ts(data=DATA$M, start=1,end=180,frequency=1) 
Rt2 <- ts(data=DATA$R, start=1,end=180,frequency=1) 
Yt2 <- ts(data=DATA$Y, start=1,end=180,frequency=1) 

#Dependent Variable starts at t=2 and ends at t=181 
#Lag Variable starts at t=1 and ends at t=180 
Model_A <- lm(Mt2 ~ lag(Mt2,1) + Rt2 + Yt2, data=DATA) 
bgtest(Model_A) #Conclude there is Autocorrelation 

e <- resid(Model_A) 
et <- ts(e,start=2,end=180,frequency=1) 
et2 <- ts(e,start=1, end=179, frequency=1) 
Model_e <- lm(et ~ et2) 
+0

さらに、これは私の最初の投稿です。質問を改善するために何かできることがあれば教えてください。 –

+0

可能であれば、奇妙な[データものを取り除き、サイト外のイメージではなくポストボディに質問を投稿してください。 'DATA'にあるものを表示して、どの列に時間変数が入っているかを教えてください。 '遅れ(lag) 'をしようとすると何が起こるか教えてください。あるいは、もっと良い例を提供して自分自身を見つけ出すことができます。 – dash2

+0

また、なぜ回帰係数が間違っていると確信していますか? t = 1の値がt = 2の値の非常に正確な予測値である多くのデータセットを簡単に想像することができます。 – dash2

答えて

0

data.frameを使用し、遅れた変数を手作業で作成するか、dplyr :: lagのようなものを使用します。このように:

X <- 1:10 
Xlag <- c(NA, X[1:9]) 

ベースRラグ機能は、TSオブジェクト以外の何のために非常に有用ではありません、彼らはそれをサポートする特定のモデリング機能を除いて非常に有用ではありません。

1

lag()を平文の中で使用すると、lag()は単に時間インデックスをシフトしますが、データベクトルは変更されないため、式は機能しません。時間インデックスを無視する(正確model.frame()以上)lm()ように、これは例示として説明変数の一つとして、応答変数、したがって1の回帰係数などにつながる:

lm(Nile ~ lag(Nile, -1)) 
## Call: 
## lm(formula = Nile ~ lag(Nile, -1)) 
## 
## Coefficients: 
## (Intercept) lag(Nile, -1) 
## -1.819e-13  1.000e+00 

に対する様々な解決策がありますこの問題は、含む:

  • 専用の時系列インフラストラクチャを使用して、このようなar()arima()など。後者はまた、容易xregを介して付加的な回帰を組み込むことができる。

    arima(Nile, c(1, 0, 0)) 
    ## Call: 
    ## arima(x = Nile, order = c(1, 0, 0)) 
    ## 
    ## Coefficients: 
    ##   ar1 intercept 
    ##  0.5063 919.5685 
    ## s.e. 0.0867 29.1410 
    ## 
    ## sigma^2 estimated as 21125: log likelihood = -639.95, aic = 1285.9 
    
  • 便利なインターフェイスを使用しlm()に追加model.frame 処理例えばdynとして、またはdynlmで:

    library("dynlm") 
    dynlm(Nile ~ L(Nile, 1)) 
    ## Time series regression with "ts" data: 
    ## Start = 1872, End = 1970 
    ## 
    ## Call: 
    ## dynlm(formula = Nile ~ L(Nile, 1)) 
    ## 
    ## Coefficients: 
    ## (Intercept) L(Nile, 1) 
    ## 452.7668  0.5043 
    
  • が遅れ前処理」を行います手で "電話前にlm()

    nile <- ts.intersect(Nile = Nile, NileLag = lag(Nile, -1)) 
    lm(Nile ~ NileLag, data = nile) 
    ## Call: 
    ## lm(formula = Nile ~ NileLag, data = nile) 
    ## 
    ## Coefficients: 
    ## (Intercept)  NileLag 
    ## 452.7668  0.5043 
    

さらなる計算のために特定の見積もりメソッドまたは返されたモデルクラスを必要とするかどうかによって、どちらか一方の方針がより便利になる場合があります。あなたの特別なケースでは、私は最後の解決策をお勧めし、普通のlm()を使って練習のさまざまなステップを実行します。

関連する問題