Esempio n. 1
0
        public ConditionalGaussianDistributionParams CreateDistributionGaussianOrNull(
            Leaf leaf,
            OptimizationParameterList gaussianParameters,
            Converter <Leaf, SufficientStatistics> predictorLeafToBoolStats)
        {
            if (leaf.Length == 0)
            {
                Debug.WriteLine("Branch length of zero observed");
            }

            // TODO: make continuous
            BooleanStatistics hasPredictor = (BooleanStatistics)predictorLeafToBoolStats(leaf);

            if (hasPredictor.IsMissing())
            {
                ConditionalGaussianDistributionParams.GetNullInstance();
                //return null; // Predictor data is missing, so skip this leaf.
            }

            ConditionalGaussianDistributionParams plainConditionalDistribution = GetPlainConditionalGaussianDistribution(leaf, gaussianParameters);

            if (!hasPredictor)
            {
                return(plainConditionalDistribution);
            }
            else
            {
                double delta = GetOffset(gaussianParameters);

                ConditionalGaussianDistributionParams offsetConditionalDistribution = plainConditionalDistribution.AddOffsetToMean(delta);
                return(offsetConditionalDistribution);
            }
            //return CreateDistributionGaussianOrNull(plainConditionalDistribution, hasPredictor, delta);
        }
        public override void ReflectClassInDictionaries(DiscreteStatistics discreteStatistics, Leaf leaf, ref Dictionary <string, BooleanStatistics> predictorMapToCreate, ref Dictionary <string, BooleanStatistics> targetMapToCreate)
        {
            BooleanStatistics leafHasTarget = (int)discreteStatistics == (int)DistributionClass.True;

            if (!targetMapToCreate.ContainsKey(leaf.CaseName))
            {
                targetMapToCreate.Add(leaf.CaseName, leafHasTarget);
            }
            else
            {
                targetMapToCreate[leaf.CaseName] = leafHasTarget;
            }
        }
 public static Converter <Leaf, SufficientStatistics> DictionaryToLeafMap(Dictionary <string, BooleanStatistics> caseIdToNonMissingValue)
 {
     return(delegate(Leaf leaf)
     {
         string name = leaf.CaseName;
         if (name == null || !caseIdToNonMissingValue.ContainsKey(name))
         {
             return BooleanStatistics.GetMissingInstance();
         }
         else
         {
             return (BooleanStatistics)caseIdToNonMissingValue[name];
         }
     });
 }
        public static SufficientStatistics Parse(string val)
        {
            SufficientStatistics result;

            if (
                MissingStatistics.Parse(val, out result) ||
                GaussianStatistics.Parse(val, out result) ||
                BooleanStatistics.Parse(val, out result) ||
                DiscreteStatistics.Parse(val, out result) ||
                ContinuousStatistics.Parse(val, out result))
            {
                return(result);
            }
            throw new ArgumentException(string.Format("Unable to parse {0} into an instance of ISufficientStatistics", val));
        }
        //public static bool operator !=(BooleanStatistics stats1, BooleanStatistics stats2)
        //{
        //    return !(stats1 == stats2);
        //}
        //public static bool operator ==(BooleanStatistics boolStats1, BooleanStatistics boolStats2)
        //{
        //    DiscreteStatistics d1 = boolStats1 as DiscreteStatistics;
        //    DiscreteStatistics d2 = boolStats2 as DiscreteStatistics;
        //    return d1 == d2;
        //}

        new internal static bool Parse(string val, out SufficientStatistics result)
        {
            result = null;
            if (val.Equals("true", StringComparison.CurrentCultureIgnoreCase) || val == "1")
            {
                result = BooleanStatistics.GetInstance(true);
            }
            else if (val.Equals("false", StringComparison.CurrentCultureIgnoreCase) || val == "0")
            {
                result = BooleanStatistics.GetInstance(false);
            }
            else if (val.Equals("null", StringComparison.CurrentCultureIgnoreCase) || val == "-1")
            {
                result = BooleanStatistics.GetMissingInstance();
            }
            return(result != null);
        }
        public ConditionalGaussianDistribution CreateDistributionGaussianOrNull(
            Leaf leaf,
            OptimizationParameterList gaussianParameters,
            Converter <Leaf, SufficientStatistics> predictorLeafToBoolStats)
        {
            if (leaf.Length == 0)
            {
                Debug.WriteLine("Branch length of zero observed");
            }

            ConditionalGaussianDistribution plainConditionalDistribution = GetPlainConditionalGaussianDistribution(leaf, gaussianParameters);

            BooleanStatistics hasPredictor = (BooleanStatistics)predictorLeafToBoolStats(leaf);

            if (hasPredictor.IsMissing())
            {
                return(null); // Predictor data is missing, so skip this leaf.
            }

            double delta = GetOffset(gaussianParameters);

            return(LabelledLeafDistributionGaussian.CreateDistributionGaussianOrNull(plainConditionalDistribution, hasPredictor, delta));
        }