protected override void worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { Configuration config = dashboardHelper.Config; Dictionary<string, string> setProperties = new Dictionary<string, string>(); setProperties.Add("BLabels", config.Settings.RepresentationOfYes + ";" + config.Settings.RepresentationOfNo + ";" + config.Settings.RepresentationOfMissing); // TODO: Replace Yes, No, Missing with global vars bool includeMissing = true; Dictionary<string, string> inputVariableList = GadgetOptions.InputVariableList; lock (syncLock) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToProcessingState)); this.Dispatcher.BeginInvoke(new SimpleCallback(ClearResults)); SetGridTextDelegate setText = new SetGridTextDelegate(SetGridText); AddGridRowDelegate addRow = new AddGridRowDelegate(AddGridRow); System.Collections.Generic.Dictionary<string, System.Data.DataTable> Freq_ListSet = new Dictionary<string, System.Data.DataTable>(); string customFilter = string.Empty; List<string> columnNames = new List<string>(); foreach (KeyValuePair<string, string> kvp in inputVariableList) { if (kvp.Key.ToLower().Equals("includemissing")) { includeMissing = bool.Parse(kvp.Value); } } foreach (KeyValuePair<string, string> kvp in inputVariableList) { if (kvp.Value.ToLower().Equals("unsorted") || kvp.Value.ToLower().Equals("dependvar") || kvp.Value.ToLower().Equals("weightvar") || kvp.Value.ToLower().Equals("matchvar")) { columnNames.Add(kvp.Key); if (!kvp.Value.ToLower().Equals("dependvar")) { customFilter = customFilter + StringLiterals.PARANTHESES_OPEN + StringLiterals.LEFT_SQUARE_BRACKET + kvp.Key + StringLiterals.RIGHT_SQUARE_BRACKET + StringLiterals.SPACE + "is not null" + StringLiterals.PARANTHESES_CLOSE + " AND "; } } else if (kvp.Value.ToLower().Equals("discrete")) { columnNames.Add(kvp.Key); customFilter = customFilter + StringLiterals.PARANTHESES_OPEN + StringLiterals.LEFT_SQUARE_BRACKET + kvp.Key + StringLiterals.RIGHT_SQUARE_BRACKET + StringLiterals.SPACE + "is not null" + StringLiterals.PARANTHESES_CLOSE + " AND "; } } if (includeMissing) { customFilter = string.Empty; } else { customFilter = customFilter.Remove(customFilter.Length - 4, 4); } try { lock (staticSyncLock) { DataTable regressTable = dashboardHelper.GenerateTable(columnNames, customFilter); RegressionResults results = new RegressionResults(); if (regressTable == null || regressTable.Rows.Count <= 0) { this.Dispatcher.BeginInvoke(new RenderFinishWithErrorDelegate(RenderFinishWithError), SharedStrings.NO_RECORDS_SELECTED); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToFinishedState)); Debug.Print("Thread stopped due to errors."); return; } else if (worker.CancellationPending) { this.Dispatcher.BeginInvoke(new RenderFinishWithErrorDelegate(RenderFinishWithError), SharedStrings.DASHBOARD_GADGET_STATUS_OPERATION_CANCELLED); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToFinishedState)); Debug.Print("Thread cancelled"); return; } else { StatisticsRepository.LogisticRegression logisticRegression = new StatisticsRepository.LogisticRegression(); results.regressionResults = logisticRegression.LogisticRegression(inputVariableList, regressTable); results.casesIncluded = results.regressionResults.casesIncluded; results.convergence = results.regressionResults.convergence; results.finalLikelihood = results.regressionResults.finalLikelihood; results.iterations = results.regressionResults.iterations; results.LRDF = results.regressionResults.LRDF; results.LRP = results.regressionResults.LRP; results.LRStatistic = results.regressionResults.LRStatistic; results.scoreDF = results.regressionResults.scoreDF; results.scoreP = results.regressionResults.scoreP; results.scoreStatistic = results.regressionResults.scoreStatistic; results.errorMessage = results.regressionResults.errorMessage.Replace("<tlt>", string.Empty).Replace("</tlt>", string.Empty); results.variables = new List<VariableRow>(); if (!string.IsNullOrEmpty(results.errorMessage)) { throw new ApplicationException(results.errorMessage); } if (results.regressionResults.variables != null) { foreach (StatisticsRepository.LogisticRegression.VariableRow vrow in results.regressionResults.variables) { VariableRow nrow = new VariableRow(); nrow.coefficient = vrow.coefficient; nrow.ci = vrow.ci; nrow.P = vrow.P; nrow.ninetyFivePercent = vrow.ninetyFivePercent; nrow.oddsRatio = vrow.oddsRatio; nrow.se = vrow.se; nrow.variableName = vrow.variableName; nrow.Z = vrow.Z; results.variables.Add(nrow); } this.Dispatcher.BeginInvoke(new SimpleCallback(RenderRegressionHeader)); int rowCount = 1; foreach (VariableRow row in results.variables) { this.Dispatcher.Invoke(addRow, grdRegress, 30); string displayValue = row.variableName; this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(displayValue, new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Left, TextAlignment.Left, rowCount, 0, Visibility.Visible)); if (row.oddsRatio <= -9999) { this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig("*", new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 1, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig("*", new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 2, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig("*", new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 3, Visibility.Visible)); } else { this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(row.oddsRatio.ToString("F4"), new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 1, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(row.ninetyFivePercent.ToString("F4"), new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 2, Visibility.Visible)); if (row.ci > 1.0E12) { this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(">1.0E12", new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 3, Visibility.Visible)); } else { this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(row.ci.ToString("F4"), new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 3, Visibility.Visible)); } } this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(row.coefficient.ToString("F4"), new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 4, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(row.se.ToString("F4"), new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 5, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(row.Z.ToString("F4"), new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 6, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(row.P.ToString("F4"), new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 7, Visibility.Visible)); rowCount++; } if (results.regressionResults.interactionOddsRatios != null) { this.Dispatcher.BeginInvoke(new SimpleCallback(RenderIORHeader)); rowCount = 1; foreach (StatisticsRepository.LogisticRegression.InteractionRow ir in results.regressionResults.interactionOddsRatios) { this.Dispatcher.Invoke(addRow, grdIOR, 30); this.Dispatcher.BeginInvoke(setText, grdIOR, new TextBlockConfig(ir.interactionName.ToString(), new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Left, TextAlignment.Right, rowCount, 0, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdIOR, new TextBlockConfig(ir.oddsRatio.ToString(), new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Left, TextAlignment.Right, rowCount, 1, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdIOR, new TextBlockConfig(ir.ninetyFivePercent.ToString(), new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Left, TextAlignment.Right, rowCount, 2, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdIOR, new TextBlockConfig(ir.ci.ToString(), new Thickness(4, 0, 4, 0), VerticalAlignment.Center, HorizontalAlignment.Left, TextAlignment.Right, rowCount, 3, Visibility.Visible)); rowCount++; } } this.Dispatcher.BeginInvoke(new SimpleCallback(DrawRegressionBorders)); } } this.Dispatcher.BeginInvoke(new RenderGridDelegate(RenderRegressionResults), results); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToFinishedState)); } } catch (Exception ex) { this.Dispatcher.BeginInvoke(new RenderFinishWithErrorDelegate(RenderFinishWithError), ex.Message); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToFinishedState)); } finally { stopwatch.Stop(); Debug.Print("Logistic regression gadget took " + stopwatch.Elapsed.ToString() + " seconds to complete with " + dashboardHelper.RecordCount.ToString() + " records and the following filters:"); Debug.Print(dashboardHelper.DataFilters.GenerateDataFilterString()); //gridCells.singleTableResults = new StatisticsRepository.cTable().SigTable((double)gridCells.yyVal, (double)gridCells.ynVal, (double)gridCells.nyVal, (double)gridCells.nnVal, 0.95); } } }
private void RenderRegressionResults(RegressionResults results) { txtConvergence.Visibility = Visibility.Visible; txtIterations.Visibility = Visibility.Visible; txtFinalLog.Visibility = Visibility.Visible; txtCasesIncluded.Visibility = Visibility.Visible; txtConvergenceLabel.Visibility = Visibility.Visible; txtIterationsLabel.Visibility = Visibility.Visible; txtFinalLogLabel.Visibility = Visibility.Visible; txtCasesIncludedLabel.Visibility = Visibility.Visible; grdRegress.Visibility = System.Windows.Visibility.Visible; grdIOR.Visibility = System.Windows.Visibility.Visible; grdStats.Visibility = System.Windows.Visibility.Visible; grdParameters.Visibility = System.Windows.Visibility.Visible; waitPanel.Visibility = System.Windows.Visibility.Collapsed; btnRun.IsEnabled = true; if (!string.IsNullOrEmpty(results.errorMessage) || results.variables == null) { grdParameters.Visibility = System.Windows.Visibility.Hidden; grdStats.Visibility = System.Windows.Visibility.Visible; txtConvergence.Text = string.Empty; txtIterations.Text = string.Empty; txtFinalLog.Text = string.Empty; txtCasesIncluded.Text = string.Empty; txtIterationsLabel.Text = string.Empty; txtFinalLogLabel.Text = string.Empty; txtCasesIncludedLabel.Text = string.Empty; txtConvergenceLabel.Text = results.errorMessage; txtConvergenceLabel.TextWrapping = TextWrapping.Wrap; } else { grdParameters.Visibility = System.Windows.Visibility.Visible; grdStats.Visibility = System.Windows.Visibility.Visible; txtScoreStatistic.Text = StringLiterals.SPACE + results.scoreStatistic.ToString("F4") + StringLiterals.SPACE; txtScoreDF.Text = StringLiterals.SPACE + results.scoreDF.ToString() + StringLiterals.SPACE; txtScoreP.Text = StringLiterals.SPACE + results.scoreP.ToString("F4") + StringLiterals.SPACE; txtLStatistic.Text = StringLiterals.SPACE + results.LRStatistic.ToString("F4") + StringLiterals.SPACE; txtLDF.Text = StringLiterals.SPACE + results.LRDF.ToString() + StringLiterals.SPACE; txtLP.Text = StringLiterals.SPACE + results.LRP.ToString("F4") + StringLiterals.SPACE; txtConvergence.Text = results.convergence; txtIterations.Text = StringLiterals.SPACE + results.iterations.ToString() + StringLiterals.SPACE; txtFinalLog.Text = StringLiterals.SPACE + results.finalLikelihood.ToString("F4") + StringLiterals.SPACE; txtCasesIncluded.Text = StringLiterals.SPACE + results.casesIncluded.ToString() + StringLiterals.SPACE; txtConvergenceLabel.Text = "Convergence:"; txtIterationsLabel.Text ="Iterations:"; txtFinalLogLabel.Text = "Final -2*Log-Likelihood:"; txtCasesIncludedLabel.Text = "Cases Included:"; } }
protected override void worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { lock (syncLock) { Configuration config = DashboardHelper.Config; Dictionary<string, string> setProperties = new Dictionary<string, string>(); setProperties.Add("Intercept", "true"); setProperties.Add("P", 0.95.ToString()); setProperties.Add("BLabels", config.Settings.RepresentationOfYes + ";" + config.Settings.RepresentationOfNo + ";" + config.Settings.RepresentationOfMissing); // TODO: Replace Yes, No, Missing with global vars //Dictionary<string, string> inputVariableList = (Dictionary<string, string>)e.Argument; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToProcessingState)); this.Dispatcher.BeginInvoke(new SimpleCallback(ClearResults)); SetGridTextDelegate setText = new SetGridTextDelegate(SetGridText); AddGridRowDelegate addRow = new AddGridRowDelegate(AddGridRow); //SetGridBarDelegate setBar = new SetGridBarDelegate(SetGridBar); System.Collections.Generic.Dictionary<string, System.Data.DataTable> Freq_ListSet = new Dictionary<string, System.Data.DataTable>(); //string customFilter = string.Empty; List<string> columnNames = new List<string>(); foreach (KeyValuePair<string, string> kvp in GadgetOptions.InputVariableList) { if (kvp.Value.ToLower().Equals("unsorted") || kvp.Value.ToLower().Equals("dependvar") || kvp.Value.ToLower().Equals("weightvar") || kvp.Value.ToLower().Equals("matchvar")) { columnNames.Add(kvp.Key); } else if (kvp.Value.ToLower().Equals("discrete")) { columnNames.Add(kvp.Key); } } try { lock (staticSyncLock) { RequestUpdateStatusDelegate requestUpdateStatus = new RequestUpdateStatusDelegate(RequestUpdateStatusMessage); CheckForCancellationDelegate checkForCancellation = new CheckForCancellationDelegate(IsCancelled); GadgetOptions.GadgetStatusUpdate += new GadgetStatusUpdateHandler(requestUpdateStatus); GadgetOptions.GadgetCheckForCancellation += new GadgetCheckForCancellationHandler(checkForCancellation); DataTable regressTable = DashboardHelper.GenerateTable(columnNames); RegressionResults results = new RegressionResults(); if (regressTable == null || regressTable.Rows.Count <= 0) { this.Dispatcher.BeginInvoke(new RenderFinishWithErrorDelegate(RenderFinishWithError), SharedStrings.NO_RECORDS_SELECTED); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToFinishedState)); Debug.Print("Thread stopped due to errors."); return; } else if (worker.CancellationPending) { this.Dispatcher.BeginInvoke(new RenderFinishWithErrorDelegate(RenderFinishWithError), SharedStrings.DASHBOARD_GADGET_STATUS_OPERATION_CANCELLED); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToFinishedState)); Debug.Print("Thread cancelled"); return; } else { StatisticsRepository.LinearRegression linearRegression = new StatisticsRepository.LinearRegression(); results.regressionResults = linearRegression.LinearRegression(GadgetOptions.InputVariableList, regressTable); results.correlationCoefficient = results.regressionResults.correlationCoefficient; results.regressionDf = results.regressionResults.regressionDf; results.regressionF = results.regressionResults.regressionF; results.regressionMeanSquare = results.regressionResults.regressionMeanSquare; results.regressionSumOfSquares = results.regressionResults.regressionSumOfSquares; results.residualsDf = results.regressionResults.residualsDf; results.residualsMeanSquare = results.regressionResults.residualsMeanSquare; results.residualsSumOfSquares = results.regressionResults.residualsSumOfSquares; results.totalDf = results.regressionResults.totalDf; results.totalSumOfSquares = results.regressionResults.totalSumOfSquares; results.errorMessage = results.regressionResults.errorMessage.Replace("<tlt>", string.Empty).Replace("</tlt>", string.Empty); if (!string.IsNullOrEmpty(results.errorMessage)) { throw new ApplicationException(results.errorMessage); } results.variables = new List<VariableRow>(); if (results.regressionResults.variables != null) { double tScore = 1.9; while (Epi.Statistics.SharedResources.PFromT(tScore, results.residualsDf) > 0.025) { tScore += 0.000001; } foreach (StatisticsRepository.LinearRegression.VariableRow vrow in results.regressionResults.variables) { VariableRow nrow = new VariableRow(); nrow.coefficient = vrow.coefficient; nrow.Ftest = vrow.Ftest; nrow.P = vrow.P; nrow.stdError = vrow.stdError; nrow.variableName = vrow.variableName; nrow.coefficientLower = nrow.coefficient - tScore * nrow.stdError; nrow.coefficientUpper = nrow.coefficient + tScore * nrow.stdError; results.variables.Add(nrow); } results.regressionFp = Epi.Statistics.SharedResources.PFromF(results.regressionF, results.regressionDf, results.residualsDf); this.Dispatcher.BeginInvoke(new SimpleCallback(RenderRegressionHeader)); int rowCount = 1; foreach (VariableRow row in results.variables) { this.Dispatcher.Invoke(addRow, grdRegress, 30); string displayValue = row.variableName; this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(StringLiterals.SPACE + displayValue + StringLiterals.SPACE, new Thickness(2, 0, 2, 0), VerticalAlignment.Center, HorizontalAlignment.Left, TextAlignment.Left, rowCount, 0, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(StringLiterals.SPACE + row.coefficient.ToString("F3") + StringLiterals.SPACE, new Thickness(2, 0, 2, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 1, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(StringLiterals.SPACE + row.coefficientLower.ToString("F3") + StringLiterals.SPACE, new Thickness(2, 0, 2, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 2, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(StringLiterals.SPACE + row.coefficientUpper.ToString("F3") + StringLiterals.SPACE, new Thickness(2, 0, 2, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 3, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(StringLiterals.SPACE + row.stdError.ToString("F3") + StringLiterals.SPACE, new Thickness(2, 0, 2, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 4, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(StringLiterals.SPACE + row.Ftest.ToString("F4") + StringLiterals.SPACE, new Thickness(2, 0, 2, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 5, Visibility.Visible)); this.Dispatcher.BeginInvoke(setText, grdRegress, new TextBlockConfig(StringLiterals.SPACE + row.P.ToString("F6") + StringLiterals.SPACE, new Thickness(2, 0, 2, 0), VerticalAlignment.Center, HorizontalAlignment.Right, TextAlignment.Right, rowCount, 6, Visibility.Visible)); rowCount++; } //this.Dispatcher.BeginInvoke(new AddGridFooterDelegate(RenderFrequencyFooter), rowCount, count); this.Dispatcher.BeginInvoke(new SimpleCallback(DrawRegressionBorders)); } } this.Dispatcher.BeginInvoke(new RenderGridDelegate(RenderRegressionResults), results); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToFinishedState)); } } catch (Exception ex) { this.Dispatcher.BeginInvoke(new RenderFinishWithErrorDelegate(RenderFinishWithError), ex.Message); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToFinishedState)); } finally { stopwatch.Stop(); Debug.Print("Linear regression gadget took " + stopwatch.Elapsed.ToString() + " seconds to complete with " + DashboardHelper.RecordCount.ToString() + " records and the following filters:"); Debug.Print(DashboardHelper.DataFilters.GenerateDataFilterString()); } } //gridCells.singleTableResults = new StatisticsRepository.cTable().SigTable((double)gridCells.yyVal, (double)gridCells.ynVal, (double)gridCells.nyVal, (double)gridCells.nnVal, 0.95); }
public void MatchedLogisticRegressionTest() { int iterations = 100; var reader = new StreamReader(File.OpenRead(@"..\..\Data\MatchedLogisticCoefficientResults.csv")); int linesinfile = 2 * iterations; double[] coefficients = new double[linesinfile]; double[] stderrs = new double[linesinfile]; double[] chisqs = new double[linesinfile]; double[] ps = new double[linesinfile]; int i = 0; while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); bool rv = Double.TryParse(values[2], out coefficients[i]); rv = Double.TryParse(values[3], out stderrs[i]); rv = Double.TryParse(values[4], out chisqs[i]); rv = Double.TryParse(values[5], out ps[i]); i++; if (i == linesinfile) { break; } } reader = new StreamReader(File.OpenRead(@"..\..\Data\MatchedLogisticOddsRatioResults.csv")); linesinfile = 2 * iterations; double[] oddsratios = new double[linesinfile]; double[] lowercls = new double[linesinfile]; double[] uppercls = new double[linesinfile]; i = 0; while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); bool rv = Double.TryParse(values[2], out oddsratios[i]); rv = Double.TryParse(values[3], out lowercls[i]); rv = Double.TryParse(values[4], out uppercls[i]); i++; if (i == linesinfile) { break; } } reader = new StreamReader(File.OpenRead(@"..\..\Data\MatchedLogisticGlobalTestResults.csv")); linesinfile = 2 * iterations; double[] globalchisqs = new double[linesinfile]; double[] dfs = new double[linesinfile]; double[] probchisqs = new double[linesinfile]; i = 0; while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); bool rv = Double.TryParse(values[2], out globalchisqs[i]); rv = Double.TryParse(values[3], out dfs[i]); rv = Double.TryParse(values[4], out probchisqs[i]); i++; if (i == linesinfile) { break; } } reader = new StreamReader(File.OpenRead(@"..\..\Data\MatchedLogisticFitStatisticResults.csv")); linesinfile = iterations; double[] withcovariates = new double[linesinfile]; i = 0; while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); bool rv = Double.TryParse(values[1], out withcovariates[i]); i++; if (i == linesinfile) { break; } } for (int j = 0; j < iterations; j++) { getData("MatchedLogisticTestData", "iteration = " + j); Dictionary <string, string> inputVariableList = new Dictionary <string, string>(); inputVariableList.Add("case", "dependvar"); inputVariableList.Add("intercept", "true"); inputVariableList.Add("includemissing", "false"); inputVariableList.Add("GROUPID", "matchvar"); inputVariableList.Add("P", "0.95"); inputVariableList.Add("indepvar1", "unsorted"); inputVariableList.Add("indepvar2", "unsorted"); DataTable regressTable = new DataTable(); RegressionResults results = new RegressionResults(); StatisticsRepository.LogisticRegression logisticRegression = new StatisticsRepository.LogisticRegression(); results.regressionResults = logisticRegression.LogisticRegression(inputVariableList, mainTable); if (false) { System.Diagnostics.Trace.Write(results.regressionResults.variables[0].oddsRatio + "\t" + results.regressionResults.variables[0].ninetyFivePercent + "\t" + results.regressionResults.variables[0].ci + "\t" + results.regressionResults.variables[0].coefficient + "\t" + results.regressionResults.variables[0].se + "\t" + results.regressionResults.variables[0].Z + "\t" + results.regressionResults.variables[0].P + "\n"); System.Diagnostics.Trace.Write(results.regressionResults.variables[1].oddsRatio + "\t" + results.regressionResults.variables[1].ninetyFivePercent + "\t" + results.regressionResults.variables[1].ci + "\t" + results.regressionResults.variables[1].coefficient + "\t" + results.regressionResults.variables[1].se + "\t" + results.regressionResults.variables[1].Z + "\t" + results.regressionResults.variables[1].P + "\n"); } Assert.AreEqual(results.regressionResults.variables[0].oddsRatio, oddsratios[j * 2], 0.01); Assert.AreEqual(results.regressionResults.variables[0].ninetyFivePercent, lowercls[j * 2], 0.01); Assert.AreEqual(results.regressionResults.variables[0].ci, uppercls[j * 2], 0.01); Assert.AreEqual(results.regressionResults.variables[0].coefficient, coefficients[j * 2], 0.01); Assert.AreEqual(results.regressionResults.variables[0].se, stderrs[j * 2], 0.01); // Assert.AreEqual(results.regressionResults.variables[0].Z, chisqs[j * 3 + 1], 0.01); Assert.AreEqual(results.regressionResults.variables[0].P, ps[j * 2], 0.01); Assert.AreEqual(results.regressionResults.variables[1].oddsRatio, oddsratios[j * 2 + 1], 0.01); Assert.AreEqual(results.regressionResults.variables[1].ninetyFivePercent, lowercls[j * 2 + 1], 0.01); Assert.AreEqual(results.regressionResults.variables[1].ci, uppercls[j * 2 + 1], 0.01); Assert.AreEqual(results.regressionResults.variables[1].coefficient, coefficients[j * 2 + 1], 0.01); Assert.AreEqual(results.regressionResults.variables[1].se, stderrs[j * 2 + 1], 0.01); // Assert.AreEqual(results.regressionResults.variables[1].Z, chisqs[j * 3 + 2], 0.01); Assert.AreEqual(results.regressionResults.variables[1].P, ps[j * 2 + 1], 0.01); Assert.AreEqual(results.regressionResults.finalLikelihood, withcovariates[j], 0.0001); Assert.AreEqual(results.regressionResults.LRStatistic, globalchisqs[j * 2], 0.0001); Assert.AreEqual(results.regressionResults.scoreStatistic, globalchisqs[j * 2 + 1], 0.0001); Assert.AreEqual(results.regressionResults.LRDF, dfs[j * 2], 0.0001); Assert.AreEqual(results.regressionResults.scoreDF, dfs[j * 2 + 1], 0.0001); Assert.AreEqual(results.regressionResults.LRP, probchisqs[j * 2], 0.0001); Assert.AreEqual(results.regressionResults.scoreP, probchisqs[j * 2 + 1], 0.0001); } }
private void RenderRegressionResults(RegressionResults results) { txtCorrelation.Visibility = Visibility.Visible; //waitCursor.Visibility = Visibility.Collapsed; waitPanel.Visibility = System.Windows.Visibility.Collapsed; grdParameters.Visibility = Visibility.Visible; grdRegress.Visibility = System.Windows.Visibility.Visible; btnRun.IsEnabled = true; if (!string.IsNullOrEmpty(results.errorMessage)) { txtCorrelation.Text = results.errorMessage; Thickness margin = txtCorrelation.Margin; margin.Top = 52; txtCorrelation.Margin = margin; grdParameters.Visibility = System.Windows.Visibility.Hidden; } else if (results.variables == null) { txtCorrelation.Text = string.Empty; Thickness margin = txtCorrelation.Margin; margin.Top = 8; txtCorrelation.Margin = margin; grdParameters.Visibility = System.Windows.Visibility.Hidden; } else { Thickness margin = txtCorrelation.Margin; margin.Top = 8; txtCorrelation.Margin = margin; grdParameters.Visibility = System.Windows.Visibility.Visible; txtRegressionDf.Text = StringLiterals.SPACE + results.regressionDf.ToString() + StringLiterals.SPACE; txtRegressionSumOfSquares.Text = StringLiterals.SPACE + results.regressionSumOfSquares.ToString("F4") + StringLiterals.SPACE; txtRegressionMeanSquare.Text = StringLiterals.SPACE + results.regressionMeanSquare.ToString("F4") + StringLiterals.SPACE; txtRegressionFstatistic.Text = StringLiterals.SPACE + results.regressionF.ToString("F4") + StringLiterals.SPACE; txtRegressionFstatisticP.Text = StringLiterals.SPACE + results.regressionFp.ToString("F4") + StringLiterals.SPACE; txtResidualsDf.Text = StringLiterals.SPACE + results.residualsDf.ToString() + StringLiterals.SPACE; txtResidualsSumOfSquares.Text = StringLiterals.SPACE + results.residualsSumOfSquares.ToString("F4") + StringLiterals.SPACE; txtResidualsMeanSquare.Text = StringLiterals.SPACE + results.residualsMeanSquare.ToString("F4") + StringLiterals.SPACE; txtTotalDf.Text = StringLiterals.SPACE + results.totalDf.ToString() + StringLiterals.SPACE; txtTotalSumOfSquares.Text = StringLiterals.SPACE + results.totalSumOfSquares.ToString("F4") + StringLiterals.SPACE; txtCorrelation.Text = "Correlation Coefficient: r^2 = " + results.correlationCoefficient.ToString("F2"); if (results.regressionResults.pearsonCoefficient <= 1.0) { grdPearson.Visibility = System.Windows.Visibility.Visible; txtPearsonAnalysis.Visibility = System.Windows.Visibility.Visible; txtPearsonCoefficient.Text = results.regressionResults.pearsonCoefficient.ToString("F4"); txtPearsonCoefficientT.Text = results.regressionResults.pearsonCoefficientT.ToString("F4"); txtPearsonCoefficientTP.Text = results.regressionResults.pearsonCoefficientTP.ToString("F4"); if (results.regressionResults.pearsonCoefficientTP < 0.0001) txtPearsonCoefficientTP.Text = "<0.0001"; if (results.regressionResults.spearmanCoefficient <= 1.0) { grdSpearman.Visibility = System.Windows.Visibility.Visible; txtSpearmanAnalysis.Visibility = System.Windows.Visibility.Visible; txtSpearmanCoefficient.Text = results.regressionResults.spearmanCoefficient.ToString("F4"); txtSpearmanCoefficientT.Text = results.regressionResults.spearmanCoefficientT.ToString("F4"); txtSpearmannCoefficientTP.Text = results.regressionResults.spearmanCoefficientTP.ToString("F4"); if (results.regressionResults.spearmanCoefficientTP < 0.0001) txtSpearmannCoefficientTP.Text = "<0.0001"; } else { grdSpearman.Visibility = System.Windows.Visibility.Collapsed; txtSpearmanAnalysis.Visibility = System.Windows.Visibility.Collapsed; } } else { grdPearson.Visibility = System.Windows.Visibility.Collapsed; txtPearsonAnalysis.Visibility = System.Windows.Visibility.Collapsed; grdSpearman.Visibility = System.Windows.Visibility.Collapsed; txtSpearmanAnalysis.Visibility = System.Windows.Visibility.Collapsed; } } HideConfigPanel(); }