code: @Override
      protected void _transform(Dataframe newData) {
          ModelParameters modelParameters = knowledgeBase.getModelParameters();
          Map<Object, Object> referenceLevels = modelParameters.getReferenceLevels();
  
          Map<Object, TypeInference.DataType> columnTypes = newData.getXDataTypes();
  
          //Replace variables with dummy versions
          streamExecutor.forEach(StreamMethods.stream(newData.entries(), isParallelized()), e -> {
              Integer rId = e.getKey();
              Record r = e.getValue();
  
              AssociativeArray xData = r.getX().copy();
  
              boolean modified = false;
              for(Object column : r.getX().keySet()) {
                  Object referenceLevel = referenceLevels.get(column);
                  if(referenceLevel == null) {
                      continue;
                  }
                  Object value = xData.remove(column);
                  if(value!= null && !referenceLevel.equals(value)) {
                      //add a new dummy variable for this column-value combination
                      xData.put(Arrays.asList(column,value), true);
                  }
                  modified = true;
              }
  
              if(modified) {
                  Record newR = new Record(xData, r.getY(), r.getYPredicted(), r.getYPredictedProbabilities());
  
                  //we call below the recalculateMeta()
                  newData._unsafe_set(rId, newR);
              }
          });
  
          //Reset Meta info
          newData.recalculateMeta();
      }
docs: {@inheritDoc}