# [R] Subset function of lm(); "rolling regressions"

Ajay Shah ajayshah at mayin.org
Mon Feb 9 12:27:57 CET 2004

Folks,

I asked a question on this mailing list about the subset support of
lm(). In a flash, I got three helpful responses from
Rajarshi Guha <rxg218 at psu.edu> <http://jijo.cjb.net>
Erin Hodgess <hodgess at gator.uhd.edu>
and
Peter Dalgaard <p.dalgaard at biostat.ku.dk>

:-) and it was just great.

The mistake I was making was in not understanding the notion of a
`subset'. I was thinking that if I have 10 observations, and I want to
only use observations 3,5,7, then I have to pass in a subset vector
which looks like (0,0,1,0,1,0,1,0,0,0). Nowhere does it say this, but
I jumped to this conclusion (it sortof looked reasonable to me). The
correct thing is to just pass a vector containing 3,5,7. Examples of
working code which do this are at http://www.mayin.org/ajayshah/KB/R/ols.html

I tried to carry this forward into a program which does `rolling
regressions', and I got stuck. I am trying to write a program where I
walk over 100 obs, doing a regression of a "moving window" of 25 obs
at a time. The first regression runs over 1..25, the second from
2..26, etc. I want to make a vector of 75 different slopes obtained
thusly. My code is:

---------------------------------------------------------------------------
col.names=c("date","dlinrchf","dlusdchf","dljpychf","dldemchf"))

# The file datafile.2 has 100 observations. I want window width of 25.
T=100
width=25

# Embark on the loop that will do rolling windows across the dataset.
# Will build up a vector `beta' (of 75 elems) in the process.
for (i in 1:T-width) {
model <- lm(dlinrchf ~ dlusdchf + dljpychf + dldemchf, A, i:i+25)
tmp <- coefficients(model)
beta[i] = tmp[2]
}
summary(beta)
---------------------------------------------------------------------------

I get the error --

Error in "[<-"(`*tmp*`, i, value = tmp[2]) :
object is not subsetable
Execution halted

I am quite stuck. I know for sure that the n1:n2 type notation works
for supplying a set. But when I use 'i' in it, it breaks. Could you
suggest what I should do?

I am very new to R and so I might be missing out on very basic
things. But I am unable to understand why this program does not print
out the numbers from 1 to 10:

for (i in 1:10) {
i
}

Confused,

-ans.

--
Ajay Shah                                                   Consultant
ajayshah at mayin.org                      Department of Economic Affairs
http://www.mayin.org/ajayshah           Ministry of Finance, New Delhi