Skip to content

glm.nb, anova.negbin

7 messages · Jari Oksanen, Brian Ripley, Ben Bolker +1 more

#
juli at ceam.es said:
I looked quickly, and it seems that this error comes actually from 
`anova.glm'  and from the following `get':

        if (!is.function(method))
            method <- get(method, mode = "function")

`anova.negbin' sends the  `negbin' `object' to `anova.glm', but the 
negbin object does not have a method (`glm' objects have method 
"glm.fit"). There seem to be some other differences in `negbin' and 
`glm' objects, so that `anova.glm' can't handle them (e.g., glm.control 
object is missing in `negbin' object).

I would like to help, but I don't have time now (got to mark exams).

cheers, jari oksanen
#
On Wed, 26 Sep 2001, Jari Oksanen wrote:

            
Yes, that's it: R is incompatible with S.  Although the information
is in the saved call, R uses a duplicate copy.  In glm.nb() adding
    fit$method <- method
    fit$control <- control
at the end seems to fix it, but without an example I can reproduce,
I cannot of course be sure.

And that was my main point: if reporting problems *please* report the
results of traceback(), and if possible a small reproducible example.
#
Yes, that appears to fix the problem, at least in the snippet of code I
sent.  Thanks Brian ...

  Ben Bolker
On Wed, 26 Sep 2001, Prof Brian Ripley wrote:

            

  
    
#
Thank you very much. This fix the problem on my own dataset.
I have tried to test in other reproducible exemples, following the example by
Ben Bolker (many thanks!), and it works well. I've only got problems when
trying to fit -1. I'm not sure if this is because it doen't make sense with
this dataset or because there is still a bug there (see below). Anyway, my
main problem is solved now. Many thanks.

t.tax <- rnbinom(200,mu=1,size=1)
t.var1 <- runif(200)
t.var2 <- runif(200)
t.var3 <- runif(200)
t.var4 <- runif(200)
t.var5 <- runif(200)

## ignore warning messages about convergence
t <- glm.nb(t.tax ~ t.var1)
t2 <- update(t, .~ .+t.var2)
t3 <- update(t2, .~ .+t.var3)
t4 <- update(t3, .~ .+t.var4)
t5 <- update(t4, .~ .+t.var5)
t6 <- update(t5, .~ . -1 )


anova(t, t2, t3, t4, t5, t6) ## OK
anova(t5)   ## OK
summary(t6) ## OK
anova(t6)   ## error

Error in "names<-.default"(*tmp*, value = c("", "", "", "", "", "", "",  :
        names attribute must be the same length as the vector
In addition: Warning message:
tests made without re-estimating theta in: anova.negbin(t6)
--
Juli G. Pausas   (Mr)
Centro de Estudios Ambientales del Mediterraneo (CEAM)
C/ C.R. Darwin 14, Parc Tecnologic,
46980 Paterna, Valencia, SPAIN
Tel: (+ 34) 96 131 8227; Fax: (+ 34) 96 131 8190
mailto:juli at ceam.es
http://www.gva.es/ceam

GCTE Fire Network - http://www.gva.es/ceam/FireNetwork


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
That's an error in anova.glm: try it with glm rather than glm.nb.

The line in anova.glm like

            fit <- method(x = x[, varseq <= i], y = object$y,

should be

            fit <- method(x = x[, varseq <= i, drop = FALSE], y = object$y,

You are really good at finding long-standing bugs!
On Wed, 26 Sep 2001, juli g. pausas wrote:

            

  
    
#
That's solve the problem. Thank you very much.
I think that there is still a minor problem, in the display of the results only.
When ommiting the intercept, the dispaly in the anova do not show the P(>|Chi|) of
the first var. This is very minor problem but you may like to know it.

t.tax <- rnbinom(200,mu=1,size=1)
t.var1 <- rnorm(200, t.tax, 5)
t.var2 <- runif(200)
t <- glm.nb(t.tax ~ t.var1)
t2 <- update(t, .~ .+t.var2)
t3 <- update(t3, .~ . -1 )
anova(t3)

Analysis of Deviance Table

Model: Negative Binomial(1.3652), link: log

Response: t.tax

Terms added sequentially (first to last)


        Df Deviance Resid. Df Resid. Dev P(>|Chi|)
NULL                      199    205.098
t.var1   0    4.597       199    200.501
t.var2   1    1.534       198    198.967     0.215
t.var3   1    0.055       197    198.912     0.815
Warning messages:
1: tests made without re-estimating theta in: anova.negbin(t3)
2: NaNs produced in: pchisq(q, df, lower.tail, log.p)



Prof Brian Ripley escribi?:
--
Juli G. Pausas   (Mr)
Centro de Estudios Ambientales del Mediterraneo (CEAM)
C/ C.R. Darwin 14, Parc Tecnologic,
46980 Paterna, Valencia, SPAIN
Tel: (+ 34) 96 131 8227; Fax: (+ 34) 96 131 8190
mailto:juli at ceam.es
http://www.gva.es/ceam

GCTE Fire Network - http://www.gva.es/ceam/FireNetwork


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
On Thu, 27 Sep 2001, juli g. pausas wrote:

            
It is not a problem at all.  Look at the df. Those two models are not
comparable: one has an intercept, the other does not. Ideally this would
fit a null model, but again that's an R/S difference as to how glm
internals work.