Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 3974)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 3975)
@@ -154,10 +154,4 @@
       <DependentUpon>RunCollectionTabularView.cs</DependentUpon>
     </Compile>
-    <Compile Include="RunCollectionVariableImpactView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RunCollectionVariableImpactView.Designer.cs">
-      <DependentUpon>RunCollectionVariableImpactView.cs</DependentUpon>
-    </Compile>
     <Compile Include="RunCollectionView.cs">
       <SubType>UserControl</SubType>
Index: unk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionVariableImpactView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionVariableImpactView.Designer.cs	(revision 3974)
+++ 	(revision )
@@ -1,78 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Views {
-  partial class RunCollectionVariableImpactView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.matrixView = new HeuristicLab.Data.Views.StringConvertibleMatrixView();
-      this.SuspendLayout();
-      // 
-      // matrixView
-      // 
-      this.matrixView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.matrixView.Caption = "StringConvertibleMatrix View";
-      this.matrixView.Content = null;
-      this.matrixView.Location = new System.Drawing.Point(3, 3);
-      this.matrixView.Name = "matrixView";
-      this.matrixView.ReadOnly = true;
-      this.matrixView.Size = new System.Drawing.Size(303, 229);
-      this.matrixView.TabIndex = 0;
-      // 
-      // RunCollectionVariableImpactView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.matrixView);
-      this.Name = "RunCollectionVariableImpactView";
-      this.Size = new System.Drawing.Size(309, 235);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private HeuristicLab.Data.Views.StringConvertibleMatrixView matrixView;
-  }
-}
Index: unk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionVariableImpactView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionVariableImpactView.cs	(revision 3974)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.MainForm;
-using HeuristicLab.MainForm.WindowsForms;
-using HeuristicLab.Core;
-using HeuristicLab.Common;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Optimization.Views {
-  [Content(typeof(RunCollection), false)]
-  [View("RunCollection Variable Impact View")]
-  public partial class RunCollectionVariableImpactView : AsynchronousContentView {
-    private const string variableImpactResultName = "Integrated variable frequencies";
-    public RunCollectionVariableImpactView() {
-      InitializeComponent();
-    }
-
-    public new RunCollection Content {
-      get { return (RunCollection)base.Content; }
-      set { base.Content = value; }
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      this.Content.ItemsAdded += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded);
-      this.Content.ItemsRemoved += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
-      this.Content.CollectionReset += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
-    }
-    protected override void DeregisterContentEvents() {
-      base.RegisterContentEvents();
-      this.Content.ItemsAdded -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded);
-      this.Content.ItemsRemoved -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
-      this.Content.CollectionReset -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      this.UpdateData();
-    }
-    private void Content_ItemsAdded(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
-      this.UpdateData();
-    }
-    private void Content_ItemsRemoved(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
-      this.UpdateData();
-    }
-    private void Content_CollectionReset(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
-      this.UpdateData();
-    }
-
-    private void UpdateData() {
-      matrixView.Content = CalculateVariableImpactMatrix();
-    }
-
-    private DoubleMatrix CalculateVariableImpactMatrix() {
-      DoubleMatrix matrix = null;
-      if (Content != null) {
-        IEnumerable<IRun> runsWithVariables = Content.Where(r => r.Results.ContainsKey(variableImpactResultName));
-        IEnumerable<DoubleMatrix> variableImpacts = (from run in runsWithVariables
-                                                     select run.Results[variableImpactResultName]).Cast<DoubleMatrix>();
-        List<string> variableNames = (from varImpact in variableImpacts
-                                      from variableName in varImpact.RowNames
-                                      select variableName).Distinct().ToList();
-        List<string> columnNames = runsWithVariables.Select(r => r.Name).ToList();
-        columnNames.AddRange( new List<string> { "Mean", "Median", "StdDev" });
-        int runs = runsWithVariables.Count();
-
-        matrix = new DoubleMatrix(variableNames.Count, runs + 3);
-        matrix.SortableView = true;
-        matrix.RowNames = variableNames;
-        matrix.ColumnNames = columnNames;
-
-        foreach (IRun run in runsWithVariables) {
-          DoubleMatrix runVariableImpacts = (DoubleMatrix)run.Results[variableImpactResultName];
-          for (int i = 0; i < runVariableImpacts.Rows; i++) {
-            int rowIndex = variableNames.FindIndex(s => s == runVariableImpacts.RowNames.ElementAt(i));
-            int columnIndex = columnNames.FindIndex(s => s == run.Name);
-            matrix[rowIndex, columnIndex] = runVariableImpacts[i, 0];
-          }
-        }
-
-        for (int variableIndex = 0; variableIndex < matrix.Rows; variableIndex++) {
-          List<double> impacts = new List<double>();
-          for (int runIndex = 0; runIndex < runs; runIndex++)
-            impacts.Add(matrix[variableIndex, runIndex]);
-          matrix[variableIndex, runs] = impacts.Average();
-          matrix[variableIndex, runs + 1] = impacts.Median();
-          matrix[variableIndex, runs + 2] = impacts.StandardDeviation();
-        }
-      }
-      return matrix;
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLab.Problems.DataAnalysis.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLab.Problems.DataAnalysis.Views-3.3.csproj	(revision 3974)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLab.Problems.DataAnalysis.Views-3.3.csproj	(revision 3975)
@@ -98,4 +98,10 @@
       <DependentUpon>ResultsView.cs</DependentUpon>
     </Compile>
+    <Compile Include="RunCollectionVariableImpactView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="RunCollectionVariableImpactView.Designer.cs">
+      <DependentUpon>RunCollectionVariableImpactView.cs</DependentUpon>
+    </Compile>
     <Compile Include="SupportVectorRegressionSolutionView.cs">
       <SubType>UserControl</SubType>
@@ -205,4 +211,8 @@
       <Project>{125D3006-67F5-48CB-913E-73C0548F17FA}</Project>
       <Name>HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.ExtLibs\HeuristicLab.ALGLIB\2.5.0\ALGLIB-2.5.0\ALGLIB-2.5.0.csproj">
+      <Project>{29E4B033-1FEF-4FE1-AE17-0A9319D7C54E}</Project>
+      <Name>ALGLIB-2.5.0</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLabProblemsDataAnalysisViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLabProblemsDataAnalysisViewsPlugin.cs.frame	(revision 3974)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLabProblemsDataAnalysisViewsPlugin.cs.frame	(revision 3975)
@@ -28,4 +28,5 @@
   [Plugin("HeuristicLab.Problems.DataAnalysis.Views","3.3.0.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.DataAnalysis.Views-3.3.dll", PluginFileType.Assembly)]
+    [PluginDependency("HeuristicLab.ALGLIB","2.5.0.0")]
   [PluginDependency("HeuristicLab.Collections", "3.3.0.0")]
   [PluginDependency("HeuristicLab.Common", "3.3.0.0")]
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/RunCollectionVariableImpactView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/RunCollectionVariableImpactView.Designer.cs	(revision 3975)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/RunCollectionVariableImpactView.Designer.cs	(revision 3975)
@@ -0,0 +1,78 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Optimization.Views {
+  partial class RunCollectionVariableImpactView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.matrixView = new HeuristicLab.Data.Views.StringConvertibleMatrixView();
+      this.SuspendLayout();
+      // 
+      // matrixView
+      // 
+      this.matrixView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.matrixView.Caption = "StringConvertibleMatrix View";
+      this.matrixView.Content = null;
+      this.matrixView.Location = new System.Drawing.Point(3, 3);
+      this.matrixView.Name = "matrixView";
+      this.matrixView.ReadOnly = true;
+      this.matrixView.Size = new System.Drawing.Size(303, 229);
+      this.matrixView.TabIndex = 0;
+      // 
+      // RunCollectionVariableImpactView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.matrixView);
+      this.Name = "RunCollectionVariableImpactView";
+      this.Size = new System.Drawing.Size(309, 235);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Data.Views.StringConvertibleMatrixView matrixView;
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/RunCollectionVariableImpactView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/RunCollectionVariableImpactView.cs	(revision 3975)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/RunCollectionVariableImpactView.cs	(revision 3975)
@@ -0,0 +1,128 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Data;
+using alglib;
+
+namespace HeuristicLab.Optimization.Views {
+  [Content(typeof(RunCollection), false)]
+  [View("RunCollection Variable Impact View")]
+  public partial class RunCollectionVariableImpactView : AsynchronousContentView {
+    private const string variableImpactResultName = "Integrated variable frequencies";
+    public RunCollectionVariableImpactView() {
+      InitializeComponent();
+    }
+
+    public new RunCollection Content {
+      get { return (RunCollection)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      this.Content.ItemsAdded += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded);
+      this.Content.ItemsRemoved += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
+      this.Content.CollectionReset += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+    }
+    protected override void DeregisterContentEvents() {
+      base.RegisterContentEvents();
+      this.Content.ItemsAdded -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded);
+      this.Content.ItemsRemoved -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
+      this.Content.CollectionReset -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      this.UpdateData();
+    }
+    private void Content_ItemsAdded(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
+      this.UpdateData();
+    }
+    private void Content_ItemsRemoved(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
+      this.UpdateData();
+    }
+    private void Content_CollectionReset(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
+      this.UpdateData();
+    }
+
+    private void UpdateData() {
+      matrixView.Content = CalculateVariableImpactMatrix();
+    }
+
+    private DoubleMatrix CalculateVariableImpactMatrix() {
+      DoubleMatrix matrix = null;
+      if (Content != null) {
+        IEnumerable<IRun> runsWithVariables = Content.Where(r => r.Results.ContainsKey(variableImpactResultName));
+        IEnumerable<DoubleMatrix> variableImpacts = (from run in runsWithVariables
+                                                     select run.Results[variableImpactResultName]).Cast<DoubleMatrix>();
+        List<string> variableNames = (from varImpact in variableImpacts
+                                      from variableName in varImpact.RowNames
+                                      select variableName).Distinct().ToList();
+        List<string> statictics = new List<string> { "Mean", "Median", "StdDev", "Significance Mean>0", "Significance Median>0" };
+        List<string> columnNames = runsWithVariables.Select(r => r.Name).ToList();
+        columnNames.AddRange(statictics);
+        int runs = runsWithVariables.Count();
+
+        matrix = new DoubleMatrix(variableNames.Count, runs + statictics.Count);
+        matrix.SortableView = true;
+        matrix.RowNames = variableNames;
+        matrix.ColumnNames = columnNames;
+
+        foreach (IRun run in runsWithVariables) {
+          DoubleMatrix runVariableImpacts = (DoubleMatrix)run.Results[variableImpactResultName];
+          for (int i = 0; i < runVariableImpacts.Rows; i++) {
+            int rowIndex = variableNames.FindIndex(s => s == runVariableImpacts.RowNames.ElementAt(i));
+            int columnIndex = columnNames.FindIndex(s => s == run.Name);
+            matrix[rowIndex, columnIndex] = runVariableImpacts[i, 0];
+          }
+        }
+
+        for (int variableIndex = 0; variableIndex < matrix.Rows; variableIndex++) {
+          List<double> impacts = new List<double>();
+          for (int runIndex = 0; runIndex < runs; runIndex++)
+            impacts.Add(matrix[variableIndex, runIndex]);
+          matrix[variableIndex, runs] = impacts.Average();
+          matrix[variableIndex, runs + 1] = impacts.Median();
+          matrix[variableIndex, runs + 2] = impacts.StandardDeviation();
+          double leftTail = 0; double rightTail = 0; double bothTails = 0;
+          double[] impactsArray = impacts.ToArray();
+          studentttests.studentttest1(ref impactsArray, impactsArray.Length, 0, ref bothTails, ref leftTail, ref rightTail);
+          matrix[variableIndex, runs + 3] = leftTail;
+          wsr.wilcoxonsignedranktest(impacts.ToArray(), impactsArray.Length, 0, ref bothTails, ref leftTail, ref rightTail);
+          matrix[variableIndex, runs + 4] = leftTail;
+        }
+      }
+      return matrix;
+    }
+  }
+}
