Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
st: Looping with the tin() function
From
Autria Mazda <[email protected]>
To
"[email protected]" <[email protected]>
Subject
st: Looping with the tin() function
Date
Fri, 29 Jun 2012 14:08:35 -0700 (PDT)
Hi again Statalisters!
I'm a first-timer and this is a re-post of a previously poorly explained problem I'm having, my apologies.
(I'm trying to replicate Stock and Watson 2007, "Why Has Inflation Become Harder to Forecast" in case anyone is familiar with the paper).
Data: I have a quarterly time series of gdp deflator data from 1960-2010.
Objective: Ultimately, I'm trying to run a pseudo-out-of-sample forecast.
What I'm currently doing:
1) Obtain the optimal lag length (based on AIC) over an initial sub-sample (e.g. 1960q1-1970q1) using varsoc.
2) Once I obtain the optimal lag length, I feed that into an AR(n) model. (Technically, n can change every quarter based on the varsoc results.)
3) I am able to do the above steps successfully but not efficiently with the code below. (Right now I'm just deleting the observations that are
outside the sub-sample period before I run varsoc.)
Problem:
I need to run the regression over the sub-sample (1960-1970q1) use those parameters and model specification to forecast for the next quarter (1970q2).
Then I need to store the forecast in a variable (e.g. f_cast_gdp_def) as the observation for 1970q2.
Next I need to repeat steps 1 and 2 above and re-run the regression (this time over the sample period 1960q1-1970q2).
Then forecast for 1970q3 and save that as observation 2 in variable f_cast_gdp_def, and so on and so forth for every quarter until the end of the sample.
I looked into trying the rolling reg command but from my understanding of the documentation I don't think I can keep changing the model specification at each iteration.
I think if I can figure out how to have tin() accept a variable, scalar or my loop var (t), then I can get what I need. My code is below.
I've tried many syntax variants and either I get an error message: invalid syntax or stata just ignores the tin() function altogether and uses the entire sample.
Any tips or advice would be greatly appreciated. Thanks again!!!
Autria Christensen
[email protected]
use "C:\Stata Files\Thesis\Data\SW_Econ_Activity_Vars_Tab1-3.dta", clear
forvalues t = `=tq(1970q1)'/`=tq(2010q4)' {
preserve
*set date range for optimal lag length selection
drop if date < tq(1960q1)
drop if date > `t'
set more off
varsoc gdpc96_yoy, maxlag(20)
*Select optimal lag length and save as new scalar AIC_LAG
matrix D = r(stats)
svmat D, name(col)
egen min_aic = min(AIC)
gen opt_lag_aic = lag if min_aic == AIC
egen store_a = mean(opt_lag_aic)
scalar aic_lag = store_a
disp "OPTIMAL LAG (BASED ON AIC) = " aic_lag
*Run regression and store/output parameter estimates
eststo one: arima gdpc96_yoy L(0/`=aic_lag').gdpc96_yoy, robust
esttab one using "C:\Stata Files\Thesis\Data\Stats\test_`=end_date'.csv", cells("b se z p ci") stats(N ll chi2) nomtitle nonumber replace wide plain
*Now I need to forecast for the period t+1 using parameter estimates and lags from period t
gen fcast_date = `t' + 1
scalar f_date = fcast_date
*I've tried using fcast_date and f_date but neither work the "predict" code below which doesn't really work
predict static_yhat_AR if tin(`t', `t')
predict dynamic_yhat_AR if tin(1970q2,2010q2), dyn(tq(1970q1))
est clear
restore
}
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/