Karina van Kuijk asked the following question:
Question:
I need to calculate the factor sensitivity of firms to ultimately sort portfolio’s based on this factor. I have found the asreg Stata code on your website and I was wondering if this code would be useful for my purpose. However, if I compare the rolling Stata code with your aserg program on a small dataset, I won’t get the same results.
Answer
The key difference between the Stata’s official rolling command and asreg [see this blog entry for installation] is in their speeds. asreg is an order of magnitude faster than rolling. There are other differences with respect to how these two calculate the regression components in a rolling window. For example, rolling command will report statistics when the rolling window reaches the required length while asreg reports statistics when the number of observations is greater than the parameters being estimated. Therefore, if we have one independent variable and use a rolling window of 10 periods, rolling will report statistics from the 10th period in the dataset. However, asreg will report statistics from the 3rd observation (two parameters here, the coefficient of the independent variable and the intercept). To make the results of asreg at par with the rolling command, let us use an example:
Example
Let us use the grunfeld data that has 10 companies and 20 years of time series for each company. We shall use the variables invest as dependent variable and mvalue as the independent variable. Therefore, the rolling command will look like:
webuse grunfeld rolling _b, window(10) saving (beta, replace): reg invest mvalue
The results from the rolling command are reported below only for the first company
company | start | end | _b_cons | _b_mvalue |
1 | 1935 | 1944 | 186.5406 | .0562316 |
1 | 1936 | 1945 | 196.1084 | .0573704 |
1 | 1937 | 1946 | 106.4769 | .0847188 |
1 | 1938 | 1947 | 53.12083 | .1053145 |
1 | 1939 | 1948 | 364.5426 | .0359897 |
1 | 1940 | 1949 | 372.5457 | .0400371 |
1 | 1941 | 1950 | 360.8489 | .04835 |
1 | 1942 | 1951 | 213.7943 | .090357 |
1 | 1943 | 1952 | 119.8572 | .1195415 |
1 | 1944 | 1953 | -284.6031 | .2229699 |
1 | 1945 | 1954 | -496.6066 | .2841584 |
To find similar results with asreg, we shall type:
bysort company: asreg invest mvalue, wind(year 10)
asreg generated the following results for the first company:
company | year | _Nobs | _R2 | _adjR2 | _b_cons | _b_mvalue |
1 | 1935 | . | . | . | . | . |
1 | 1936 | . | . | . | . | . |
1 | 1937 | 3 | .98568503 | .97137006 | 192.3812 | .04135324 |
1 | 1938 | 4 | .91957661 | .87936492 | 129.06727 | .05411168 |
1 | 1939 | 5 | .86795099 | .82393465 | 129.91674 | .05233687 |
1 | 1940 | 6 | .69944952 | .6243119 | 108.59266 | .06102699 |
1 | 1941 | 7 | .54085608 | .4490273 | 91.235677 | .06942586 |
1 | 1942 | 8 | .31250011 | .19791679 | 182.86065 | .05101677 |
1 | 1943 | 9 | .25355654 | .14692176 | 197.08754 | .05052367 |
1 | 1944 | 10 | .24298452 | .14835759 | 186.54064 | .05623158 |
1 | 1945 | 10 | .20582267 | .10655051 | 196.10839 | .05737045 |
1 | 1946 | 10 | .29515806 | .20705282 | 106.47691 | .0847188 |
1 | 1947 | 10 | .3728928 | .2945044 | 53.120829 | .10531451 |
1 | 1948 | 10 | .05894158 | -.05869073 | 364.54258 | .03598974 |
1 | 1949 | 10 | .1461912 | .0394651 | 372.54574 | .04003715 |
1 | 1950 | 10 | .18946219 | .08814496 | 360.84887 | .04834995 |
1 | 1951 | 10 | .41646846 | .34352702 | 213.79429 | .09035704 |
1 | 1952 | 10 | .38796888 | .31146499 | 119.85717 | .11954148 |
1 | 1953 | 10 | .69741758 | .65959478 | -284.60313 | .22296989 |
1 | 1954 | 10 | .67138447 | .63030752 | -496.6066 | .28415839 |
As mentioned above, asreg does not wait for the full window to get the required number of periods. Therefore, results from the rolling command and asreg start to match only from the 10th observation, i.e., the year 1944. If you like asreg to ignore observation unless the minimum number of periods are available, you can use the option min. So to match the results with the rolling command, we can type:
bysort company: asreg invest mvalue, wind(year 10) min(9)
and there you go, asreg produces the same coefficients as the rolling command, with blistering speed.
Please do cite asreg in your research
In-text citation
Rolling regressions were estimated using asreg, a Stata program written by Shah (2017).
Bibliography
Shah, Attaullah, (2017), ASREG: Stata module to estimate rolling window regressions. Fama-MacBeth and by(group) regressions, https://EconPapers.repec.org/RePEc:boc:bocode:s458339.
Dear mr. Shah,
Thank you very much for your detailed post.
Regards,