Skip to content
Prev 1812 / 63424 Next

Bug in lm.wfit with zero weights in 0.63.3 (PR#136)

R 0.63.3 (any platform)

library(lqs)
example(lqs)

gives

Warning in (y - z$residuals) + offset : longer object length
        is not a multiple of shorter object length

repeatedly. The problem is in lm.wfit, which removes cases with
zero weights, but does not adjust the offset.  The fix is

    z$fitted.values <- (y - z$residuals)
    z$weights <- w
    if (zero.weights) {
	coef[is.na(coef)] <- 0
	f0 <- x0 %*% coef
	if (ny > 1) {
	    save.r[ok, ] <- z$residuals
	    save.r[nok, ] <- y0 - f0
	    save.f[ok, ] <- z$fitted.values + offset[ok,]
	    save.f[nok, ] <- f0 + offset[nok,]
	}
	else {
	    save.r[ok] <- z$residuals
	    save.r[nok] <- y0 - f0
	    save.f[ok] <- z$fitted.values + offset[ok]
	    save.f[nok] <- f0 + offset[nok]
	}
	z$residuals <- save.r
	z$fitted.values <- save.f
	z$weights <- save.w
    } else 
      z$fitted.values <- z$fitted.values + offset
      
The only examples affected are those with a non-zero offset and zero
weights:  these will have incorrect fitted values.

I've commited this for 0.64.0.