rangerun
rangerun runs a user-supplied Stata program for each observation in the sample. At each pass, the data in memory is cleared and replaced with observations that fall within the interval bounds specified for the current observation. The user's program is run and results are collected from new variables left in memory when the program terminates without error. rangerun provides the same functionality as rangestat except that, instead of using Mata functions, statistics are calculated by running a user-written Stata program that may contain any number of Stata statistical commands.
公卫论坛
安装:
ssc install rangerun ssc install rangestat 公卫百科
rangerun provides a general solution to any type of rolling window problem. To contrast the mechanics of rolling compared to rangerun, here's the last example from rolling's help file:
公卫百科
webuse lutkepohl2, clear
tsset qtr
rolling ratio=(r(mean)/r(p50)), window(10): summarize inc, detail
list in 1/10
clear all
program myprog
if _N < 10 exit
summarize inc, detail
gen ratio = r(mean)/r(p50)
end
webuse lutkepohl2, clear
rangerun myprog, interval(qtr -9 0) use(inc)
list qtr inc ratio in 1/19, sep(0)
公卫论坛
公卫家园 With rolling, execution times increase exponentially as the data size increases. With rangerun (and rangestat), execution times increase linearly with the number of observations in the sample. If you double the number of observations, the run time for rangerun will be twice as long. For large problems, rangerun will be orders of magnitude faster than rolling.
公卫人
Everything that can be done with statsby can also be done with rangerun. Since statsby's execution times also increase exponentially as the data size increases, rangerun will be orders of magnitude faster for large data problems. See the help file for a fully spelled out example that shows how to specify the interval bounds so that rangerun only runs the user's program once per group.
公卫考场
Because rangerun manages all the data in Mata and runs the user's program from Mata, there is very little overhead. The commands in the user's program do not require in or if qualifiers since the data in memory is only populated with observations in range for the current observation. So even with the most efficient Stata loop, rangerun will be significantly faster (and more convenient). Here's an example that calculates a regression on a rolling window of 7 years (including the current observation) and stores the constant term. A minimum of 4 observations is required:
公卫家园
clear all webuse grunfeld local nobs = _N gen alpha = . quietly forvalues i = 1/`nobs' { capture regress invest kstock if company == company[`i'] &inrange(year, year[`i']-6, year[`i']) if _rc == 0 & e(N) >= 4 replace alpha = _b[_cons] in `i' } program myprog if _N < 4 exit regress invest kstock gen alpha_rr = _b[_cons] end rangerun myprog, interval(year -6 0) by(company) assert alpha == alpha_rr公卫考场
公卫考场
附件列表
词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。