[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:

   ---------------------------------------------------------------------------
   A <- read.table(file="datafile.2",
          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




More information about the R-help mailing list