From henric.nilsson at statisticon.se  Tue Jun 21 19:13:22 2005
From: henric.nilsson at statisticon.se (henric.nilsson@statisticon.se)
Date: Tue, 21 Jun 2005 19:13:22 +0200 (CEST)
Subject: [Rd] weighted.residuals for glm objects (PR#7961)
Message-ID: <20050621171322.6145AF90D@slim.kubism.ku.dk>

Full_Name: Henric Nilsson
Version: 2.2.0 (2005-06-20 r34776)
OS: Windows 2000
Submission from: (NULL) (213.115.23.26)


The help page for `weighted.residuals' states that the function can be used with
both `lm' and `glm' objects. However, it's unclear what's meant by the following
passage

"Weighted residuals are the usual residuals Ri, multiplied by wi^0.5, where wi
are the weights as specified in lm's call."

when it comes to a GLM. What's "...usual residuals..." in this context?

After reading the code it's clear that the function multiplies the deviance
residuals by wi^0.5, but this doesn't seem sensible for a GLM. Consider e.g.

> set.seed(1)
> x <- runif(10)
> y <- x + rnorm(10)
> w <- 0:9
> weighted.residuals(lm(y ~ x, weights = w))
         2          3          4          5          6          7          8 
 0.3845201  1.0361636  1.2689516 -0.9817686  3.7205310  1.3823979 -1.5458433 
         9         10 
-6.2029822  2.6149474 
> weighted.residuals(glm(y ~ x, weights = w))
          2           3           4           5           6           7 
  0.3845201   1.4653567   2.1978886  -1.9635372   8.3193602   3.3861695 
          8           9          10 
 -4.0899170 -17.5446831   7.8448423 

I suggest that the code for `weighted.residuals' is changed to

weighted.residuals <- function (obj, drop0 = TRUE) 
{
    w <- weights(obj)
    r <- residuals(obj, type = "deviance")
    if (is.null(w)) 
        r
    else if (drop0) 
        r[w != 0]
    else r
}

which seems to do the "right thing" for both `lm' and `glm' objects.



[Rd] weighted.residuals for glm objects (PR#7961)
henric.nilsson@statisticon.se