# MetricNMEntropy (ARX GUI Documentation)

org.deidentifier.arx.metric

## Class MetricNMEntropy

- java.lang.Object
- - org.deidentifier.arx.metric.Metric<org.deidentifier.arx.metric.InformationLossDefault>
  - - org.deidentifier.arx.metric.MetricDefault
    - - org.deidentifier.arx.metric.MetricEntropy
      - - org.deidentifier.arx.metric.MetricNMEntropy

- All Implemented Interfaces:
    java.io.Serializable

      public class MetricNMEntropy
      extends MetricEntropy

  This class provides an efficient implementation of a non-monotonic and non-uniform entropy metric. It avoids a cell-by-cell process by utilizing a three-dimensional array that maps identifiers to their frequency for all quasi-identifiers and generalization levels. It further reduces the overhead induced by subsequent calls by caching the results for previous columns and generalization levels. It takes supressed tuples into account by adding the information loss induced by suppressing the transformed representation of the outliers.
  See Also:
    Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.deidentifier.arx.metric.Metric

      `Metric.AggregateFunction`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `MetricNMEntropy()` Creates a new instance.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected InformationLossWithBound<org.deidentifier.arx.metric.InformationLossDefault>` | `getInformationLossInternal(org.deidentifier.arx.framework.lattice.Transformation node, org.deidentifier.arx.framework.check.groupify.HashGroupify g)` Evaluates the metric for the given node.
    `protected org.deidentifier.arx.metric.InformationLossDefault` | `getLowerBoundInternal(org.deidentifier.arx.framework.lattice.Transformation node)` Returns a lower bound for the information loss for the given node.
    `protected org.deidentifier.arx.metric.InformationLossDefault` | `getLowerBoundInternal(org.deidentifier.arx.framework.lattice.Transformation node, org.deidentifier.arx.framework.check.groupify.HashGroupify groupify)` Returns a lower bound for the information loss for the given node.
    `protected void` | `initializeInternal(org.deidentifier.arx.framework.data.DataManager manager, DataDefinition definition, org.deidentifier.arx.framework.data.Data input, org.deidentifier.arx.framework.data.GeneralizationHierarchy[] hierarchies, ARXConfiguration config)` Implement this to initialize the metric.
    `ElementData` | `render(ARXConfiguration config)` Renders the privacy model
    `java.lang.String` | `toString()` Returns the name of metric.

    - ### Methods inherited from class org.deidentifier.arx.metric.MetricEntropy

      `getCache, getCardinalities, getHierarchies, getInformationLossInternal`

    - ### Methods inherited from class org.deidentifier.arx.metric.MetricDefault

      `createMaxInformationLoss, createMinInformationLoss`

    - ### Methods inherited from class org.deidentifier.arx.metric.Metric

      `createAECSMetric, createAECSMetric, createAmbiguityMetric, createDiscernabilityMetric, createDiscernabilityMetric, createEntropyBasedInformationLossMetric, createEntropyBasedInformationLossMetric, createEntropyMetric, createEntropyMetric, createEntropyMetric, createEntropyMetric, createEntropyMetric, createEntropyMetric, createHeightMetric, createHeightMetric, createInstanceOfHighestScore, createInstanceOfLowestScore, createKLDivergenceMetric, createLossMetric, createLossMetric, createLossMetric, createLossMetric, createMetric, createNormalizedEntropyMetric, createNormalizedEntropyMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecisionMetric, createPrecomputedEntropyMetric, createPrecomputedEntropyMetric, createPrecomputedEntropyMetric, createPrecomputedEntropyMetric, createPrecomputedEntropyMetric, createPrecomputedEntropyMetric, createPrecomputedLossMetric, createPrecomputedLossMetric, createPrecomputedLossMetric, createPrecomputedLossMetric, createPrecomputedNormalizedEntropyMetric, createPrecomputedNormalizedEntropyMetric, createPublisherPayoutMetric, createPublisherPayoutMetric, createStaticMetric, createStaticMetric, getAggregateFunction, getConfiguration, getDescription, getDescription, getGeneralizationFactor, getGeneralizationSuppressionFactor, getInformationLoss, getInformationLoss, getLowerBound, getLowerBound, getName, getNumRecords, getSubset, getSuppressionFactor, initialize, isAbleToHandleMicroaggregation, isGSFactorSupported, isIndependent, isMonotonic, isMonotonicWithGeneralization, isMonotonicWithSuppression, isMultiDimensional, isPrecomputed, isWeighted, list, round`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### MetricNMEntropy

          protected MetricNMEntropy()

      Creates a new instance.

  - ### Method Detail

    - #### render

          public ElementData render(ARXConfiguration config)

      Description copied from class: `Metric`
      Renders the privacy model
      Overrides:
        `render` in class `MetricEntropy`
      Returns:

    - #### toString

          public java.lang.String toString()

      Description copied from class: `Metric`
      Returns the name of metric.
      Overrides:
        `toString` in class `MetricEntropy`

    - #### getInformationLossInternal

          protected InformationLossWithBound<org.deidentifier.arx.metric.InformationLossDefault> getInformationLossInternal(org.deidentifier.arx.framework.lattice.Transformation node,
                                                                                                                org.deidentifier.arx.framework.check.groupify.HashGroupify g)

      Description copied from class: `Metric`
      Evaluates the metric for the given node.
      Overrides:
        `getInformationLossInternal` in class `MetricEntropy`
      Parameters:
        `node` - The node for which to compute the information loss
        `g` - The groupify operator of the previous check
      Returns:
        the double

    - #### getLowerBoundInternal

          protected org.deidentifier.arx.metric.InformationLossDefault getLowerBoundInternal(org.deidentifier.arx.framework.lattice.Transformation node)

      Description copied from class: `Metric`
      Returns a lower bound for the information loss for the given node. This can be used to expose the results of monotonic shares of a metric, which can significantly speed-up the anonymization process. If no such metric exists, simply return `null`.
      Overrides:
        `getLowerBoundInternal` in class `MetricEntropy`
      Returns:

    - #### getLowerBoundInternal

          protected org.deidentifier.arx.metric.InformationLossDefault getLowerBoundInternal(org.deidentifier.arx.framework.lattice.Transformation node,
                                                                                 org.deidentifier.arx.framework.check.groupify.HashGroupify groupify)

      Description copied from class: `Metric`
      Returns a lower bound for the information loss for the given node. This can be used to expose the results of monotonic shares of a metric, which can significantly speed-up the anonymization process. If no such metric exists, simply return `null`.
      This variant of the method allows computing a monotonic share based on a groupified data representation. IMPORTANT NOTE: The groups may not have been classified correctly when the method is called, i.e., HashGroupifyEntry.isNotOutlier may not be set correctly!
      Overrides:
        `getLowerBoundInternal` in class `MetricEntropy`
      Returns:

    - #### initializeInternal

          protected void initializeInternal(org.deidentifier.arx.framework.data.DataManager manager,
                                DataDefinition definition,
                                org.deidentifier.arx.framework.data.Data input,
                                org.deidentifier.arx.framework.data.GeneralizationHierarchy[] hierarchies,
                                ARXConfiguration config)

      Description copied from class: `Metric`
      Implement this to initialize the metric.
      Overrides:
        `initializeInternal` in class `MetricEntropy`