Exemple #1
0
        /// <summary>
        /// populates the roc table (list) with information for the selected model
        /// </summary>
        /// <param name="data"></param>
        private void updateList(List<object> data)
        {
            listView4.Items.Clear();
            foreach (object element in data)
            {
                ROCParameters rocp = new ROCParameters((object[])element);
                string[] item = new string[5];
                item[0] = rocp.DecisionThreshold.ToString("f4");
                item[3] = rocp.Specificity.ToString("f4");
                item[4] = rocp.Sensitivity.ToString("f4");
                item[1] = rocp.FalsePosCount.ToString("n0");
                item[2] = rocp.FalseNegCount.ToString("n0");

                ListViewItem lvi = new ListViewItem(item);
                listView4.Items.Add(lvi);
            }
        }
Exemple #2
0
        /// <summary>
        /// given a model and decision threshold calculate (and store) information for a roc curve
        /// </summary>
        /// <param name="model">mlr model</param>
        /// <param name="decisionThreshold">threshold value</param>
        /// <param name="rocPars">roc curve information </param>
        /// <returns>point pair for plotting</returns>
        private PointPair ROCpoint(MLRIndividual model, double decisionThreshold, out ROCParameters rocPars)
        {
            //for a given threshold and model, categorize predictions relative to observations
            //and calculate the sensitivity and specificity evaluation criteria, return theses
            //values as a zedgraph point.

            PointPair pp = new PointPair();
            double[] measurement = model.ObservedValues;
            double[] est = model.PredictedValues;
            int truePos = 0;
            int trueNeg = 0;
            int falsePos = 0;
            int falseNeg = 0;
            double pred = double.NaN;
            double obs = double.NaN;
            double specificity = double.NaN;
            double sensitivity = double.NaN;

            for (int i = 0; i < est.Length; i++)
            {
                pred = est[i];
                obs = measurement[i];
                if ((pred > decisionThreshold) && (obs > _mandateThreshold))
                    truePos++;
                else if ((pred > decisionThreshold) && (obs < _mandateThreshold))
                    falsePos++;
                else if ((pred < decisionThreshold) && (obs > _mandateThreshold))
                    falseNeg++;
                else if ((pred < decisionThreshold) && (obs < _mandateThreshold))
                    trueNeg++;
            }

            sensitivity = (double)truePos / (double)(truePos + falseNeg);
            specificity = (double)trueNeg / (double)(trueNeg + falsePos);

            if (!sensitivity.Equals(double.NaN) && !specificity.Equals(double.NaN))
            {
                pp.X = (1.0d - specificity);
                pp.Y = sensitivity;
            }

            ROCParameters rocpars = new ROCParameters(decisionThreshold, sensitivity, specificity, falsePos, falseNeg);
            rocPars = rocpars;

            return pp;
        }