Suppose I have longitudinal data and want to use the econometric strategy of 
"de-meaning" a model matrix by time. For sake of illustration 'mat' is a model 
matrix for 3 individuals each with 3 observations where ``1'' denotes that 
individual i was in group j at time t or ``0'' otherwise.
 
mat <- matrix(c(1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,1,1,0), ncol=3)
mat <- data.frame(mat, id=gl(3,3))
 
I can conceive of two ways of de-meaning: either use an explicit loop or use 
mapply, both of which are below.
 
# put this in a loop over each column to create the de-meaned X matrix
mat2 <- matrix(0, 9,3)
for(i in 1:3){
 mat2[,i] <- mat[,i] - ave(mat[,i], mat$id)
}
# Or use mapply as follows
mat[,1:3]-mapply(ave, mat[,1:3], MoreArgs=list(mat$id))
 
Both work, but they require that the model matrix is explictly created and then 
used in the regression. For example, assume I am using the star data in the 
mlmRev package
 
data(star, package='mlmRev')
 
I would first need to explictly create the model matrix for the fixed effects 
as follows and then use the strategy above to de-mean this matrix.
 
mat <-model.matrix(lm(math~ -1 + sch, star))
 
Of course in R, this is rather inefficient as one generally only needs to have 
a factor for any independent variables and the model matrix is created for you 
when using lm(). So, my question is whether there is a more efficient way of 
creating the time de-meaned model matrix? Or, is the solution above the kind of 
strategy that must be used for this situation?
 
Harold
 
 

        [[alternative HTML version deleted]]

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to