Как заставить Stata производить динамический прогноз при использовании запаздывающего результата в качестве регрессора?

В настоящее время я имею дело с очень небольшим набором данных (20 наблюдений, я знаю, что это ужасно). Но мне нужно как-то прогнозировать значения. Когда я просто регрессирую время по зависимой переменной, я могу получить прогноз, но когда я добавляю запаздывающие или разностные переменные, это не дает прогноза более чем на один год в будущем. Это из-за слишком малого количества наблюдений?

Вот мой код для контекста. Две закомментированные строки приводят к более точному прогнозу для текущих данных, но генерируют только один прогноз на будущее.

use "scrappage.dta", clear

drop if year == 1993

tsappend, add(12)

tsset year, y

reg scrappagerate year

*reg scrappagerate year l.scrappagerate l2.scrappagerate

*reg scrappagerate year d.scrappagerate d2.scrappagerate

predict p

predict yp if year>year(2013)

tsline yp p scrappagerate

Извините, если это глупый вопрос, я впервые использую Stata для прогнозирования значений.


person user3529691    schedule 24.06.2014    source источник
comment
Это сработало для вас?   -  person Dimitriy V. Masterov    schedule 26.06.2014


Ответы (2)


Посмотрите здесь, чтобы найти решение и объяснение. По сути, вы можете использовать arima для оценки модели без компонентов AR или MA (что должно быть эквивалентно OLS с reg) и создать динамический/рекурсивный прогноз:

arima y L(1/2).y, hessian
predict y_dynhat, dyn(tm(2011m2))

Просто замените 2011m2 любой фактической датой последнего месяца, когда вы наблюдаете y. Параметр гессиана заставит стандартные ошибки более точно соответствовать OLS.

Вы можете опубликовать свои данные на сайте статистики, чтобы узнать, есть ли у людей лучшие советы по моделированию, чем OLS.

person Dimitriy V. Masterov    schedule 24.06.2014
comment
Это не работает. Выдает ошибку: опция dyn() не разрешена - person AlpU; 31.12.2016
comment
@ Pythoner1234 Я не уверен, о чем вы говорите. - person Dimitriy V. Masterov; 31.12.2016

Вот ваша проблема:

Причина, по которой вы получаете только один прогноз, не имеет ничего общего с функцией прогнозирования, а связана с характером ваших данных. Допустим, у вас есть N наблюдения. В вашем случае вы использовали tsappend, add(12), поэтому у вас есть N+12 наблюдений. И ваша переменная с задержкой l1.y будет перенесена в N+1 строку.

Функция Stata predict будет предсказывать все неотсутствующие данные, если есть доступные предикторы. Поэтому, поскольку ваша независимая переменная l1.y заполняется в строке N + 1, Stata будет предсказывать это наблюдение. (Точно так же predict не будет предсказывать 1-е наблюдение, так как ваш запаздывающий предиктор будет отсутствовать.)

Вот ваше решение:

Чтобы получить динамический прогноз с использованием регрессии OLS в Stata, вам необходимо передать этот N+1th прогноз в матрицу X и использовать матрицу коэффициентов регрессии для прогнозирования N+2 наблюдения. Затем вы повторяете.

* Example of how to do dynamic prediction using OLS regression and lagged variables
clear
set obs 12
gen time = _n
gen y = rnormal(100,100)

tsset time
tsappend, add(12)
gen y_lag1 = l1.y

* Establish the regression relationship and save the coefficients
regress y y_lag1
matrix a = r(table)'
matrix beta = a[1..2,1]

* Predict the N+1 value (notice you have y_lag1 in the 13th row)
predict yhat

* Predict the next values
local lag = 1
forval i = 14/24 {
    local last_y = yhat[`i'-`lag']
    matrix xinput = [`last_y',1]
    * Estimate the next sales
    matrix next_y = xinput*beta
    replace yhat = next_y[1,1] in `i'
}

Сравнивая это с использованием модели ARIMA (согласно комментарию Дмитрия В. Мастерова), вы получаете почти идентичные результаты.

arima y l1.y
predict yhat_ar, dyn(13)
person Bryan    schedule 19.05.2016