AR(1) с нелинейными наименьшими квадратами с использованием алгоритма Марквардта: EViews против R
Несколько недель назад я разместил плохо продуманный вопрос, изобилующий неопределенной информацией. Это моя попытка исправить первоначальный вопрос и получить лучшие ответы.
Основная проблема: я не могу получить аналогичные оценки параметров с EViews и R.
По причинам, которые я сам не знаю, мне нужно оценить параметры для определенных данных, используя EViews. Это делается путем выбора опции NLS (нелинейные наименьшие квадраты) и использования следующей формулы: indep_var c dep_var ar(1)
EViews утверждает, что они оценивают линейные процессы AR(1), такие как:
Yt = a + B * Xt + ut
где ошибкиt определены как
ut = p * ut-1 + e
используя эквивалентное уравнение (с некоторыми алгебраическими заменами):
Yt = (1 - p) * a + p * Yt - 1 + B * Xt - p * B * Xt - 1 + et
Кроме того, этот поток на форумах EViews предполагает, что их оценки NLS генерируются алгоритмом Марквардта.
Теперь функция перехода к R для оценки процессов AR(1) arima
, Однако есть две проблемы: 1) оценки являются оценками максимального правдоподобия; 2) оценка перехвата фактически не является оценкой перехвата.
Поэтому я обратился к nlsLM
функция из пакета minpack.lm. Эта функция использует алгоритм Марквардта для получения нелинейных оценок наименьших квадратов, которые должны давать те же результаты, что и реализация 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 - именно поэтому я пытаюсь сделать это в R вместо EViews. Я также хотел бы предоставить вам данные, с которыми я работаю, но это невозможно, поскольку это конфиденциальные данные.
1 ответ
Кажется, что спецификация Eviews должна быть:
dep_var c indep_var ar(1)