R et EVue les différences dans les estimations AR (1)

10

Le problème principal est: je ne peux pas obtenir d'estimations de paramètres similaires avec EViews et R.

Pour des raisons que je ne me connais pas, j'ai besoin d'estimer les paramètres de certaines données à l'aide d'EViews. Pour ce faire, sélectionnez l'option NLS (moindres carrés non linéaires) et utilisez la formule suivante:indep_var c dep_var ar(1)

EViews affirme qu'ils estiment des processus AR (1) linéaires tels que: où les erreurs u t sont définies comme: u t = ρ u t - 1 + ε en utilisant une équation équivalente ( avec quelques substitutions algébriques): Y t = ( 1 - ρ ) α + ρ Y t - 1 + β X t

Ouit=α+βXt+ut
ut
ut=ρut-1+ε
De plus,ce fil de discussion sur les forums EViewssuggère que leurs estimations NLS sont générées par l'algorithme de Marquardt.
Ouit=(1-ρ)α+ρOuit-1+βXt-ρβXt-1+εt

Maintenant, la fonction go-to R pour estimer les processus AR (1) est arima. Cependant, il y a deux problèmes:

  1. les estimations sont des estimations du maximum de vraisemblance;
  2. l'estimation d'interception n'est pas réellement l'estimation d'interception (selon RH Shumway & DS Stoffer).

Par conséquent, je me suis tourné vers la nlsLMfonction du package minpack.lm. Cette fonction utilise l'algorithme Marquardt pour obtenir des estimations des moindres carrés non linéaires, ce qui devrait donner les mêmes résultats que la mise en œuvre d'EViews (ou très similaires, au moins).

Maintenant, le code. J'ai une trame de données ( data) avec une variable indépendante et une variable dépendante telle que celle générée par le code suivant:

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

Pour estimer les paramètres dans l'équation pour estimer revendications EViews (3 rd une de cet article), on utilise les commandes suivantes:

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)
)

Malheureusement, les estimations produites par nlsLMne sont pas proches de celles produites par EViews. Avez-vous une idée de ce qui pourrait causer cela? Ou peut-être que mon code est incorrect?

Enfin, je voudrais dire que je suis personnellement un utilisateur R - c'est exactement pourquoi j'essaie de le faire dans R au lieu d'EViews. J'aimerais aussi vous fournir les données avec lesquelles je travaille mais c'est impossible car ce sont des données confidentielles.

Fael
la source
4
Bienvenue sur le site, @Fael. +1 pour une question claire. J'ai pris la liberté de modifier légèrement le formatage pour le rendre plus propre. Veuillez vous assurer qu'il indique toujours ce que vous voulez.
gung - Rétablir Monica
Wow, c'était vraiment gentil de ta part. Merci beaucoup, @gung!
Fael
2
Vous pouvez toujours adapter / coder les données et les publier. une transformation de la forme [(y-constant1) / constant2] fera l'affaire.
IrishStat
BTW: Les paramètres des processus linéaires peuvent être estimés via OLS.
Germaniawerks

Réponses:

1

ρ,β,αXt-1

JDav
la source