docs: @Override
    public int filter(double[] eigenValues) {
      // find the last eigenvector that is considered 'strong' by the weak rule
      // applied to the remaining vectors only
      double eigenValueSum = eigenValues[eigenValues.length - 1];
      for(int i = eigenValues.length - 2; i >= 0; i--) {
        eigenValueSum += eigenValues[i];
        double needEigenvalue = eigenValueSum / (eigenValues.length - i) * ralpha;
        if(eigenValues[i] >= needEigenvalue) {
          return i + 1;
        }
      }
      return eigenValues.length;
    }