This post about length 1 offsets on R help seems to have been ignored (sorry deleted original email - is there a way to continue thread in this case?) https://stat.ethz.ch/pipermail/r-help/2009-February/189352.html It does seem to be a bug, in that glm does not behave as documented. In fact the same bug applies to lm as well. I don't think the suggested fix works though - Y isn't available until the model frame is evaluated. Moreover you would want to evaluate the offset as part of the model frame, to take care of the search path, subset and na.action. One possibility would be to modify model.frame to recycle variables of length one. This would be a potentially useful feature from my point of view as offset(constant) could replace Const(constant) in gnm, which is basically a work around for this problem in the case of specifying a constant in a nonlinear term. However, this solution may have undesired side-effects and I don't feel too strongly about it as there are various work-arounds. Perhaps the simplest solution would be to modify the docs so that offsets of length one are disallowed - it is easy enough for the user to create a vector of the right length as necessary. Best regards, Heather
On Wed, 25 Feb 2009, Heather Turner wrote:> This post about length 1 offsets on R help seems to have been ignored > (sorry deleted original email - is there a way to continue thread in > this case?) > > https://stat.ethz.ch/pipermail/r-help/2009-February/189352.htmlSo let's be clear: this was the 'offset' argument' and not the offset() function as you refer to below.> It does seem to be a bug, in that glm does not behave as documented. In > fact the same bug applies to lm as well.Not ignored, just not yet resolved so nothing really useful to say as yet. I suspect the documentation was once correct but the offset argument had some rather undesirable prperties at the time. And there appears to be some legacy code to do the recycling. So quite a bit of work is needed on the history to deal wth what is rather a small point: sorting out some problems with failing packages (rgdal and friends) has been a much higher priority (let alone the day jobs).> I don't think the suggested fix works though - Y isn't available until > the model frame is evaluated. Moreover you would want to evaluate the > offset as part of the model frame, to take care of the search path, > subset and na.action.That used not to be the case for the offset _argument_, so probably where the docs came from.> One possibility would be to modify model.frame to recycle variables of > length one. This would be a potentially useful feature from my point of > view as offset(constant) could replace Const(constant) in gnm, which is > basically a work around for this problem in the case of specifying a > constant in a nonlinear term. However, this solution may have undesired > side-effects and I don't feel too strongly about it as there are various > work-arounds. Perhaps the simplest solution would be to modify the docs > so that offsets of length one are disallowed - it is easy enough for the > user to create a vector of the right length as necessary. > > Best regards, > > Heather > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Brian D. Ripley, ripley at stats.ox.ac.uk 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
Hi, Thanks for responding/noticing. I was going to wait a few more days while contemplating how to get more notice for the post. It occurred to me later that it should have gone to R-devel as you have forwarded it. I'll include my example (with a fix) for refresher c1 <- structure(list(Contr = c(0.028, 0.043, 0.064, 0.097, 0.146, 0.219 ), Correct = c(34L, 57L, 94L, 152L, 160L, 160L), Incorrect = c(126L, 103L, 66L, 8L, 0L, 0L)), .Names = c("Contr", "Correct", "Incorrect" ), row.names = c(NA, 6L), class = "data.frame") glm(cbind(Correct, Incorrect) ~ Contr - 1, binomial, data = c1, offset = qlogis(0.25)) Error in model.frame.default(formula = cbind(Correct, Incorrect) ~ Contr - : variable lengths differ (found for '(offset)') lm(cbind(Correct, Incorrect) ~ Contr - 1, binomial, data = c1, offset = rep(qlogis(0.25), nrow(c1))) ## which works The line which throws the error is: mf <- eval(mf, parent.frame()) I must have done something additional of which I did not keep a record, but if I change the nrow(Y) in the code fragment to nrow(data), that works, as in if (!is.null(offset)) { if (length(offset) == 1) offset <- rep(offset, NROW(data)) else if (length(offset) != NROW(data)) stop(gettextf("number of offsets is %d should equal %d (number of observations)", length(offset), NROW(data)), domain = NA) } mf$offset <- offset mf <- eval(mf, parent.frame()) Thank you. Ken Quoting Heather Turner <Heather.Turner at warwick.ac.uk>:> This post about length 1 offsets on R help seems to have been ignored > (sorry deleted original email - is there a way to continue thread in > this case?) > > https://stat.ethz.ch/pipermail/r-help/2009-February/189352.html > > It does seem to be a bug, in that glm does not behave as documented. In > fact the same bug applies to lm as well. > > I don't think the suggested fix works though - Y isn't available until > the model frame is evaluated. Moreover you would want to evaluate the > offset as part of the model frame, to take care of the search path, > subset and na.action. > > One possibility would be to modify model.frame to recycle variables of > length one. This would be a potentially useful feature from my point of > view as offset(constant) could replace Const(constant) in gnm, which is > basically a work around for this problem in the case of specifying a > constant in a nonlinear term. However, this solution may have undesired > side-effects and I don't feel too strongly about it as there are various > work-arounds. Perhaps the simplest solution would be to modify the docs > so that offsets of length one are disallowed - it is easy enough for the > user to create a vector of the right length as necessary. > > Best regards, > > Heather >-- Ken Knoblauch Inserm U846 Stem-cell and Brain Research Institute Department of Integrative Neurosciences 18 avenue du Doyen L?pine 69500 Bron France tel: +33 (0)4 72 91 34 77 fax: +33 (0)4 72 91 34 61 portable: +33 (0)6 84 10 64 10 http://www.sbri.fr/members/kenneth-knoblauch.html