[R] length 1 offset in glm
Kenneth Knoblauch
ken.knoblauch at inserm.fr
Mon Feb 23 17:05:46 CET 2009
Hi,
I'm trying to use an offset with glm. According to the glm man
page
offset ... This should be NULL or a numeric vector of length either
one or equal to the number of cases. ...
but with the following example, I get an error if the offset is of length 1
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)')
but not if it has the length of the number of rows of the data frame
glm(cbind(Correct, Incorrect) ~ Contr - 1, binomial,
data = c1, offset = rep(qlogis(0.25), nrow(c1)))
...
Coefficients:
Contr
28.34
Degrees of Freedom: 6 Total (i.e. Null); 5 Residual
Null Deviance: 1342
Residual Deviance: 92.35 AIC: 114.3
(I'm not pushing this as a good model...)
I traced the error to this line in glm
mf <- eval(mf, parent.frame())
and the error can be "fixed" if the following code from later in glm is put
before the above line with the additional line that I added to
(re)set the offset of mf
if (!is.null(offset)) {
if (length(offset) == 1)
offset <- rep(offset, NROW(Y))
else if (length(offset) != NROW(Y))
stop(gettextf("number of offsets is %d should equal %d
(number of observations)",
length(offset), NROW(Y)), domain = NA)
}
mf$offset <- offset
I don't know if this breaks something important or is a terrible
hack. Or, am I misreading the way glm should work...
sessionInfo()
R version 2.8.1 Patched (2009-02-22 r47985)
i386-apple-darwin8.11.1
locale:
en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_2.8.1
Thanks for any enlightenment.
Ken
--
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
More information about the R-help
mailing list