docs: private double[][] runDerivator(Relation<ParameterizationFunction> relation, int dim, CASHInterval interval, ModifiableDBIDs ids) {
      Database derivatorDB = buildDerivatorDB(relation, interval);
  
      PCARunner pca = new PCARunner(new StandardCovarianceMatrixBuilder());
      EigenPairFilter filter = new FirstNEigenPairFilter(dim - 1);
      DependencyDerivator<DoubleVector> derivator = new DependencyDerivator<>(null, FormatUtil.NF4, pca, filter, 0, false);
  
      CorrelationAnalysisSolution<DoubleVector> model = derivator.run(derivatorDB);
  
      double[][] weightMatrix = model.getSimilarityMatrix();
      double[] centroid = model.getCentroid();
      double eps = .25;
  
      ids.addDBIDs(interval.getIDs());
      // Search for nearby vectors in original database
      for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) {
        double[] v = minusEquals(relation.get(iditer).getColumnVector(), centroid);
        double d = transposeTimesTimes(v, weightMatrix, v);
        if(d <= eps) {
          ids.add(iditer);
        }
      }
  
      double[][] basis = model.getStrongEigenvectors();
      return getMatrix(basis, 0, basis.length, 0, dim - 1);
    }