Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/BestSymbolicRegressionSolutionAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/BestSymbolicRegressionSolutionAnalyzer.cs	(revision 3892)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/BestSymbolicRegressionSolutionAnalyzer.cs	(revision 3905)
@@ -35,4 +35,5 @@
 using HeuristicLab.Problems.DataAnalysis;
 using HeuristicLab.Problems.DataAnalysis.Evaluators;
+using HeuristicLab.Analysis;
 
 namespace HeuristicLab.Problems.DataAnalysis.Regression.Symbolic.Analyzers {
@@ -43,4 +44,6 @@
     private const string SymbolicExpressionTreeInterpreterParameterName = "SymbolicExpressionTreeInterpreter";
     private const string BestSolutionInputvariableCountResultName = "Variables used by best solution";
+    private const string VariableFrequenciesParameterName = "VariableFrequencies";
+    private const string VariableImpactsResultName = "Integrated variable frequencies";
     private const string BestSolutionParameterName = "BestSolution";
 
@@ -55,4 +58,7 @@
       get { return (ILookupParameter<SymbolicRegressionSolution>)Parameters[BestSolutionParameterName]; }
     }
+    public ILookupParameter<DataTable> VariableFrequenciesParameter {
+      get { return (ILookupParameter<DataTable>)Parameters[VariableFrequenciesParameterName]; }
+    }
     #endregion
     #region properties
@@ -63,4 +69,7 @@
       get { return SymbolicExpressionTreeParameter.ActualValue; }
     }
+    public DataTable VariableFrequencies {
+      get { return VariableFrequenciesParameter.ActualValue; }
+    }
     #endregion
 
@@ -69,5 +78,13 @@
       Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
       Parameters.Add(new ValueLookupParameter<ISymbolicExpressionTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, "The interpreter that should be used for the analysis of symbolic expression trees."));
+      Parameters.Add(new LookupParameter<DataTable>(VariableFrequenciesParameterName, "The variable frequencies table to use for the calculation of variable impacts"));
       Parameters.Add(new LookupParameter<SymbolicRegressionSolution>(BestSolutionParameterName, "The best symbolic regression solution."));
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void Initialize() {
+      if (!Parameters.ContainsKey(VariableFrequenciesParameterName)) {
+        Parameters.Add(new LookupParameter<DataTable>(VariableFrequenciesParameterName, "The variable frequencies table to use for the calculation of variable impacts"));
+      }
     }
 
@@ -89,9 +106,30 @@
         if (Results.ContainsKey(BestSolutionInputvariableCountResultName)) {
           Results[BestSolutionInputvariableCountResultName].Value = new IntValue(model.InputVariables.Count());
+          Results[VariableImpactsResultName].Value = CalculateVariableImpacts();
         } else {
           Results.Add(new Result(BestSolutionInputvariableCountResultName, new IntValue(model.InputVariables.Count())));
+          Results.Add(new Result(VariableImpactsResultName, CalculateVariableImpacts()));
         }
       }
       return BestSolutionParameter.ActualValue;
+    }
+
+    private DoubleMatrix CalculateVariableImpacts() {
+      if (VariableFrequencies != null) {
+        var impacts = new DoubleMatrix(VariableFrequencies.Rows.Count, 1, new string[] { "Impact" }, VariableFrequencies.Rows.Select(x => x.Name));
+        int rowIndex = 0;
+        foreach (var dataRow in VariableFrequencies.Rows) {
+          string variableName = dataRow.Name;
+          double integral = 0;
+          if (dataRow.Values.Count > 1) {
+            double baseline = dataRow.Values.First();
+            integral = (from value in dataRow.Values
+                        select value - baseline)
+                              .Sum();
+          }
+          impacts[rowIndex++, 0] = integral;
+        }
+        return impacts;
+      } else return new DoubleMatrix(1, 1);
     }
 
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionVariableFrequencyAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionVariableFrequencyAnalyzer.cs	(revision 3892)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionVariableFrequencyAnalyzer.cs	(revision 3905)
@@ -60,5 +60,5 @@
     #endregion
     #region properties
-    public DataTable VariableImpacts {
+    public DataTable VariableFrequencies {
       get { return VariableFrequenciesParameter.ActualValue; }
       set { VariableFrequenciesParameter.ActualValue = value; }
@@ -80,14 +80,14 @@
       ResultCollection results = ResultsParameter.ActualValue;
 
-      if (VariableImpacts == null) {
-        VariableImpacts = new DataTable("Variable frequencies", "Relative frequency of variable references aggregated over the whole population.");
+      if (VariableFrequencies == null) {
+        VariableFrequencies = new DataTable("Variable frequencies", "Relative frequency of variable references aggregated over the whole population.");
         // add a data row for each input variable
         foreach (var inputVariable in inputVariables)
-          VariableImpacts.Rows.Add(new DataRow(inputVariable));
-        results.Add(new Result("Variable frequencies", VariableImpacts));
+          VariableFrequencies.Rows.Add(new DataRow(inputVariable));
+        results.Add(new Result("Variable frequencies", VariableFrequencies));
       }
       foreach (var pair in VariableFrequencyAnalyser.CalculateVariableFrequencies(expressions, inputVariables)) {
-        VariableImpacts.Rows[pair.Key].Values.Add(pair.Value);
-        results["Variable frequencies"].Value = VariableImpacts;
+        VariableFrequencies.Rows[pair.Key].Values.Add(pair.Value);
+        results["Variable frequencies"].Value = VariableFrequencies;
       }
 
