O principal problema é: não consigo obter estimativas de parâmetros semelhantes com EViews e R.
Por razões que eu não conheço, preciso estimar parâmetros para determinados dados usando EViews. Isso é feito escolhendo a opção NLS (mínimos quadrados não lineares) e usando a seguinte fórmula:indep_var c dep_var ar(1)
O EViews alega que eles estimam processos lineares de AR (1), como: onde os erros são definidos como: usando um equivalente equação (com algumas substituições algébricas): Além disso, esta discussão sobre nos fóruns do EViews sugere que suas estimativas de NLS são geradas pelo algoritmo de Marquardt.u t u t = ρ ⋅ u t - 1 + ε Y t = ( 1 - ρ ) α + ρ Y t - 1 + β X t - ρ β X t - 1 + ε t
Agora, a função go-to R para estimar os processos AR (1) é arima
. No entanto, existem dois problemas:
- as estimativas são estimativas de probabilidade máxima;
- a estimativa de interceptação não é realmente a estimativa de interceptação (de acordo com RH Shumway e DS Stoffer).
Portanto, virei para a nlsLM
função do pacote minpack.lm. Essa função usa o algoritmo de Marquardt para obter estimativas de mínimos quadrados não lineares, que devem produzir os mesmos resultados que a implementação do EViews (ou pelo menos muito similares).
Agora o código. Eu tenho um quadro de dados ( data
) com uma variável independente e uma variável dependente, como a gerada pelo seguinte código:
data <- data.frame(independent = abs(rnorm(48)), dependent = abs(rnorm(48)))
Para estimar parâmetros na equação que o EViews reivindica para estimar ( terceiro nesta publicação), use os seguintes comandos:
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)
)
Infelizmente, as estimativas produzidas por nlsLM
não são próximas das produzidas pelos EViews. Você tem alguma idéia do que pode estar causando isso? Ou talvez meu código esteja errado?
Por fim, gostaria de dizer que pessoalmente sou um usuário R - é exatamente por isso que estou tentando fazer isso no R, em vez do EViews. Também gostaria de fornecer os dados com os quais estou trabalhando, mas é impossível, pois são dados confidenciais.