public LinearModelWithSweep(ArrayList<ModelEffect> effects, double[] data) {
   int numberOfEffects = effects.size();
   this.data = data;
   xtxmatrices = new DoubleMatrix2D[numberOfEffects][numberOfEffects];
   xtymatrices = new DoubleMatrix2D[numberOfEffects][1];
   for (int i = 0; i < numberOfEffects; i++) {
     ModelEffect me = effects.get(i);
     xtxmatrices[i][i] = me.getXTX();
     xtymatrices[i][0] =
         DoubleFactory2D.dense.make(me.getXTy(data).toArray(), me.getNumberOfLevels());
     for (int j = 0; j < i; j++) {
       xtxmatrices[i][j] = ModelEffect.getX1TX2(me, effects.get(j));
       xtxmatrices[j][i] = xtxmatrices[i][j].viewDice();
     }
   }
   sweep = new Sweep();
   initialSweep();
 }