On Tue, 9 Mar 2004 [EMAIL PROTECTED] wrote: > In R1.7 and above (including R 1.9 alpha), 'update.formula' forgets to copy any > offset(...) term in the original '.' formula: > > test> df <- data.frame( x=1:4, y=sqrt( 1:4), z=c(2:4,1)) > test> fit1 <- glm( y~offset(x)+z, data=df) > test> fit1$call > glm(formula = y ~ offset(x) + z, data = df) > > test> fit1u <- update( fit1, ~.) > test> fit1u$call > glm(formula = y ~ z, data = df) > > > The problem occurs when 'update.formula' calls 'terms.formula(..., simplify=TRUE)' > which defines and calls a function 'fixFormulaObject'. The first line of > 'fixFormulaObject' attempts to extract the contents of the RHS of the formula via > > tmp <- attr(terms(object), "term.labels") > > but this omits any offsets. Replacing that line with the following, > which I think pulls in everything except the response, *seems* to fix > the problem without disrupting the guts of 'terms' itself: > > tmp <- dimnames( attr(terms(object), "factors"))[[1]][ -attr( terms, 'response')] > > The suggested line might be simpler than checking the 'offset' component > of 'terms(object)', which won't always exist.
Sorry, but that is a common programming error. The possible values of attr(terms, "response") are 0 or 1 (although code should not rely on the non-existence of 2, 3, ...). foo[-0] == foo[0] is a length-0 vector. Also, in R please use rownames(): it is easier to read and safer. > Footnote: strange things happen when there is more than one offset (OK, > there probably shouldn't be, but I thought I'd experiment): That is allowed, and works in general. > test> fit2 <- glm( y ~ offset( x) + offset( log( x)) + z, data=df) > test> fit2$call > glm(formula = y ~ offset(x) + offset(log(x)) + z, data = df) > > test> fit2u <- update( fit2, ~.) > test> fit2u$call > glm(formula = y ~ offset(log(x)) + z, data = df) > > Curiously, the 'term.labels' attribute of 'terms(object)' now includes the second > offset, but not the first. The issue here is the code to remove offset terms fails if two successive terms are offsets, but not otherwise. -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-devel
