[R] why does lm() not allow for negative weights?

Jens Hainmueller jhainm at fas.harvard.edu
Fri Aug 4 19:26:49 CEST 2006

Dear List,

Why do commonly used estimator functions (such as lm(), glm(), etc.) not
allow negative case weights? I suspect that there is a good reason for this.
Yet, I can see reasonable cases when one wants to use negative case weights.

Take lm() for example:


n <- 20
Y <- rnorm(n)
X <- cbind(rep(1,n),runif(n),rnorm(n))
Weights <- rnorm(n)
# Includes Pos and Neg Weights

# Now do Weighted LS and get beta coeffs:
b <- solve(t(X)%*%diag(Weights)%*%X) %*% t(X) %*% diag(Weights)%*%Y

# This seems like a valid model, but when I try
lm(Y ~ X[,2:3],weights=Weights)

# I get: "missing or negative weights not allowed"


What is the rationale for not allowing negative weights? I ask this, because
I am currently trying to implement a (two stage) estimator into R that
involves negative case weights. Weights are generated in the first stage, so
it would be nice if I could use canned functions such as
lm(,weights=Weights) in the second stage.

Thank you for your help.


More information about the R-help mailing list