Dear all,
I am implementing a redundant variables F-test. For that I need to
compute 2 models, restricted and unrestricted, then extracting the
residuals to calculate the test statistic.
I borrowed this elegant solution from the LMtest package to rebuild the
first of the matrices involved (the unrestricted one) on the basis of
model spec. and data
>red.var.test<-function(formula, red.vars, data = list()) {
> mf <- model.frame(formula, data = data)
> y <- model.response(mf)
> modelterms <- terms(formula, data = data)
> X <- model.matrix(modelterms, data = data) # unrestricted model
matrix>
> n <- nrow(X)
> k <- ncol(X)
>
...but then I had to resort to this solution of mine to select the
restricted m.m. according to the possibly redundant regressors specified
in the character vector red.vars
> Z<-X[,!(dimnames(X)[[2]]%in%red.vars)] # restricted model matrix
>
and then the rest...
> q<-dim(X)[[2]]-dim(Z)[[2]]
>
> umod<-lm(y~X)
> rmod<-lm(y~Z)
>
> ures<-umod$resid
> rres<-rmod$resid
>
> URSS<-sum(ures^2)
> RRSS<-sum(rres^2)
>
> test <- ((RRSS - URSS)/q) / (URSS / (n-k))
> (...) }
Now to my question: the above works just fine when the names in red.vars
are *exactly* those of regressors in the model frame, e.g. if I am
taking logs of one variable, say, "a", in model mod<-lm(d ~ log(a)
+ b +
c), testing joint redundancy of a and b I have to write
red.var.test(mod, c("log(a)","b"))
Is there a generic way to restrict the model matrix, so as to write only
the names of regressors involved without having to bother about the
transformations, such as
red.var.test(mod, c("a","b"))
maybe in the style of the first rows?
Thank you in advance for your insights
Giovanni
Giovanni Millo
R&D Dept.
Assicurazioni Generali SpA
Trieste, Italy
Ai sensi del D.Lgs. 196/2003 si precisa che le informazioni contenute in questo
messaggio sono riservate ed a uso esclusivo del destinatario. Qualora il
messaggio in parola Le fosse pervenuto per errore, La invitiamo ad eliminarlo
senza copiarlo e a non inoltrarlo a terzi, dandocene gentilmente comunicazione.
Grazie.<BR><BR>Pursuant to Legislative Decree No. 196/2003, you are
hereby informed that this message contains confidential information intended
only for the use of the addressee. If you are not the addressee, and have
received this message by mistake, please delete it and immediately notify us.
You may not copy or disseminate this message to anyone. Thank you.
[[alternative HTML version deleted]]