Ejemplo n.º 1
0
        private void sharedFixedVariables_ItemChanged(object o, EventArgs <int, int> e)
        {
            if (o != sharedFixedVariables)
            {
                return;
            }
            var variables   = sharedFixedVariables.VariableNames.ToList();
            var rowIndex    = e.Value;
            var columnIndex = e.Value2;

            var variableName = variables[columnIndex];

            if (variableName == FreeVariable)
            {
                return;
            }
            if (internalDataset.VariableHasType <double>(variableName))
            {
                var v      = sharedFixedVariables.GetDoubleValue(variableName, rowIndex);
                var values = new List <double>(Enumerable.Repeat(v, internalDataset.Rows));
                internalDataset.ReplaceVariable(variableName, values);
            }
            else if (internalDataset.VariableHasType <string>(variableName))
            {
                var v      = sharedFixedVariables.GetStringValue(variableName, rowIndex);
                var values = new List <String>(Enumerable.Repeat(v, internalDataset.Rows));
                internalDataset.ReplaceVariable(variableName, values);
            }
            else
            {
                // unsupported type
                throw new NotSupportedException();
            }
        }
Ejemplo n.º 2
0
        private void sharedFixedVariables_ItemChanged(object o, EventArgs <int, int> e)
        {
            if (o != sharedFixedVariables)
            {
                return;
            }
            var variables   = sharedFixedVariables.DoubleVariables.ToList();
            var rowIndex    = e.Value;
            var columnIndex = e.Value2;

            var variableName = variables[columnIndex];

            if (variableName == FreeVariable)
            {
                return;
            }
            var v      = sharedFixedVariables.GetDoubleValue(variableName, rowIndex);
            var values = new List <double>(Enumerable.Repeat(v, DrawingSteps));

            internalDataset.ReplaceVariable(variableName, values);
        }
    private static IEnumerable<double> EvaluateModelWithReplacedVariable(IRegressionModel model, string variable, ModifiableDataset dataset, IEnumerable<int> rows, ReplacementMethodEnum replacement = ReplacementMethodEnum.Median) {
      var originalValues = dataset.GetReadOnlyDoubleValues(variable).ToList();
      double replacementValue;
      List<double> replacementValues;
      IRandom rand;

      switch (replacement) {
        case ReplacementMethodEnum.Median:
          replacementValue = rows.Select(r => originalValues[r]).Median();
          replacementValues = Enumerable.Repeat(replacementValue, dataset.Rows).ToList();
          break;
        case ReplacementMethodEnum.Average:
          replacementValue = rows.Select(r => originalValues[r]).Average();
          replacementValues = Enumerable.Repeat(replacementValue, dataset.Rows).ToList();
          break;
        case ReplacementMethodEnum.Shuffle:
          // new var has same empirical distribution but the relation to y is broken
          rand = new FastRandom(31415);
          replacementValues = rows.Select(r => originalValues[r]).Shuffle(rand).ToList();
          break;
        case ReplacementMethodEnum.Noise:
          var avg = rows.Select(r => originalValues[r]).Average();
          var stdDev = rows.Select(r => originalValues[r]).StandardDeviation();
          rand = new FastRandom(31415);
          replacementValues = rows.Select(_ => NormalDistributedRandom.NextDouble(rand, avg, stdDev)).ToList();
          break;

        default:
          throw new ArgumentException(string.Format("ReplacementMethod {0} cannot be handled.", replacement));
      }

      dataset.ReplaceVariable(variable, replacementValues);
      //mkommend: ToList is used on purpose to avoid lazy evaluation that could result in wrong estimates due to variable replacements
      var estimates = model.GetEstimatedValues(dataset, rows).ToList();
      dataset.ReplaceVariable(variable, originalValues);

      return estimates;
    }