Hmm - since we're centralizing anyway, I'm going to take one pass over the thing and be done with it. A data generator will take some list of weights, an optional intercept, an n, a d, and an error term, as well as a "nparts" parameter.