使用Marquardt算法的非线性最小二乘AR(1):EViews vs R.

时间:2012-11-12 23:51:04

标签: r eviews

几周前,我posted一个经过深思熟虑的问题困扰着模糊的信息。这是我尝试纠正原始问题并获得更好的答案。

主要问题是:我无法使用EViews和R获得类似的参数估计值。

由于我不了解自己的原因,我需要使用EViews估算某些数据的参数。这是通过选择NLS(非线性最小二乘)选项并使用以下公式来完成的:indep_var c dep_var ar(1)

EViews声称他们估计了线性AR(1)过程,例如:

  

Y t = a + B * X t + u t

其中u t 错误定义为

  

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

此外,this thread over at the EViews forums表明他们的NLS估计是由Marquardt算法生成的。

现在,估算AR(1)过程的首选R函数是arima。但是,存在两个问题:1)估计是最大似然估计; 2)拦截估计is not actually the intercept estimate

因此,我转向minpack.lm包中的nlsLM函数。该函数使用Marquardt算法来实现非线性最小二乘估计,这应该产生与EViews实现相同的结果(或至少非常类似的结果)。

现在的代码。我有一个数据框(data),其中包含一个自变量和一个因变量,例如由以下代码生成的变量:

data <- data.frame(independent = abs(rnorm(48)), dependent = abs(rnorm(48)))

为了估计EViews声称估计的等式中的参数(本文中3 rd 1),我使用以下命令:

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 个答案:

答案 0 :(得分:0)

Eviews规范似乎应该是:

dep_var  c indep_var ar(1)