/// <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); } }
/// <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; }