Causal inference with imperfect instrumental variables