数週間前、私はあいまいな情報に悩まされているよく考えられていない質問を投稿しました。これは、元の質問を修正し、より良い回答を得るための私の試みです。
主な問題は、EViews と R で同様のパラメーター推定値を取得できないことです。
理由はよくわかりませんが、EViews を使用して特定のデータのパラメーターを推定する必要があります。これは、NLS (非線形最小二乗) オプションを選択し、次の式を使用して行います。indep_var c dep_var ar(1)
EViews は、次のような線形 AR(1) プロセスを推定すると主張しています。
Y t = a + B * X t + u t
ここで、u tエラーは次のように定義されます。
u t = p * u t-1 + e
同等の方程式を使用して (いくつかの代数置換を使用):
Y t = (1 - p) * a + p * Y t - 1 + B * X t - p * B * X t - 1 + e t
さらに、EViews フォーラムのこのスレッドは、彼らの NLS 推定が Marquardt アルゴリズムによって生成されることを示唆しています。
さて、AR(1) プロセスを推定するための頼りになる R 関数はarima
です。ただし、2 つの問題があります。1) 推定値は最尤推定値です。2) 切片推定値は、実際には切片推定値ではありません。
したがって、nlsLM
minpack.lm パッケージの関数に目を向けました。この関数は、Marquardt アルゴリズムを使用して、非線形最小二乗推定を達成します。これにより、EViews 実装と同じ結果 (または少なくとも非常に類似した結果) が得られるはずです。
今コード。data
次のコードで生成されるような、独立変数と従属変数を持つデータ フレーム ( ) があります。
data <- data.frame(independent = abs(rnorm(48)), dependent = abs(rnorm(48)))
EViews が推定すると主張する方程式 (この投稿の 3 番目の方程式) のパラメーターを推定するには、次のコマンドを使用します。
library(minpack.lm)
result <-
nlsLM(dependentB ~ ((1 - theta1) * theta2) + (theta1 * dependentA) +
(theta3 * independentB) - (theta1 * theta3 * independentA),
data = list(dependentB = data$dependent[2:48], dependentA = data$dependent[1:47],
independentB = data$independent[2:48], independentA = data$independent[1:47]),
start = list(theta1 = -10, theta2 = -10, theta3 = -10)
)
残念ながら、 によって出力される推定値nlsLM
は、EViews によって出力される推定値に近くありません。これを引き起こしている可能性のあるものについて何か考えがありますか? それとも、私のコードが間違っているのでしょうか?
最後に、私は個人的に R ユーザーであると言いたいです。それこそが、EViews ではなく R でこれを行おうとしている理由です。また、私が扱っているデータを提供したいのですが、機密データであるため不可能です。