private int calculateRuns(_Worksheet sheet, DataSet dataSet, Range range, double cutoff) { int runs = 1; double[,] array = RangeHelper.To2DDoubleArray(range); double[] array2 = new double[array.Length]; for (int i = 0; i < array.Length; i++) { array2[i] = array[i, 0]; } for (int i = 0; i < array.Length - 1; i++) { if (Math.Sign(array2[i] - cutoff) != Math.Sign(array2[i + 1] - cutoff)) { runs++; } } return(runs); }
// vanaf hier copy van oude code public void Print(DataSet dataSet, List <Variable> variables, bool rdbMovingAverage, bool rdbSimpleExponentialSmoothing, bool rdbHoltsExponentialSmoothing, bool rdbWintersExponentialSmoothing, bool doOptimizeParameters, int numberOfForecasts, int numberOfHoldouts, int seasonalPeriod, int span, string level, string trend, string seasonality) { // Create new sheet var sheet = WorksheetHelper.NewWorksheet("Forecast"); // use variables _doOptimizeParameters = doOptimizeParameters; _numberOfForecasts = numberOfForecasts; _numberOfHoldouts = numberOfHoldouts; _seasonalPeriod = seasonalPeriod; _span = span; // variables for writing on sheet and writing of title int title = 1; int forcastingConstants = 3; int summaryName = forcastingConstants + 5; int row = summaryName + 5; sheet.Cells[title, 1] = "Forecast "; sheet.Cells[forcastingConstants, 1] = "Forecasting Constants"; sheet.Cells[summaryName, 1] = "Summary"; sheet.Cells[summaryName + 1, 1] = "Mean Absolute Error"; sheet.Cells[summaryName + 2, 1] = "Root Mean Squared Error"; sheet.Cells[summaryName + 3, 1] = "Mean Absolute Percentage Error"; ((Range)sheet.Cells[row, 1]).EntireColumn.AutoFit(); // variables to count number of forecast, holdouts and data var nForecasts = Convert.ToDouble(numberOfForecasts); var nHoldouts = Convert.ToDouble(numberOfHoldouts); var nData = Convert.ToDouble(dataSet.rangeSize()); int column = 2; foreach (Variable variable in variables) { row = 1; double[,] array = RangeHelper.To2DDoubleArray(variable.getRange()); double[] array2 = new double[array.Length]; for (int i = 0; i < array.Length; i++) { array2[i] = array[i, 0]; // hier moet nog iets komen waardoor het mogelijk wordt om variabelen in rijen te verwerken } //Print data column++; sheet.Cells[row++, column] = variable.name; for (int i = 0; i < array2.Length; i++) { sheet.Cells[row++, column] = array2[i]; } row = 1; column++; // Plot next figure below the data and the forecast int rowFigure = row + variables.Count + Convert.ToInt16(nForecasts) + 2; // Calculate moving average forecast if box is checked if (rdbMovingAverage) { EvaluateMovingAverage(array2, row, column, sheet); string name = "Forecast Moving Average: " + variable.name; //var rangeLabels = sheet.Range[sheet.Cells[row + 1, column], sheet.Cells[row + nData + nForecasts, column]]; var rangeData = sheet.Range[sheet.Cells[row + 2, column - 1], sheet.Cells[row + nData + nForecasts, column - 1]]; var rangeForecast = sheet.Range[sheet.Cells[row + 2, column], sheet.Cells[row + nData + nForecasts, column]]; new TimeSeriesGraph().CreateNewGraph2(sheet, rowFigure, rangeData, rangeForecast, name); } // Calculate exponential smoothing (simple) forecast if box is checked if (rdbSimpleExponentialSmoothing) { CalculateSimple(array2, row, sheet, column); string name = "Forecast Exponential smoothing (Simple): " + variable.name; //var rangeLabels = sheet.Range[sheet.Cells[row + 1, column], sheet.Cells[row + nData + nForecasts, column]]; var rangeData = sheet.Range[sheet.Cells[row + 2, column - 1], sheet.Cells[row + nData + nForecasts, column - 1]]; var rangeForecast = sheet.Range[sheet.Cells[row + 2, column + 1], sheet.Cells[row + nData + nForecasts, column + 1]]; new TimeSeriesGraph().CreateNewGraph2(sheet, rowFigure, rangeData, rangeForecast, name); } // Calculate exponential smoothing (holt) forecast if box is checked if (rdbHoltsExponentialSmoothing) { CalculateHolt(array2, row, sheet, column); string name = "Forecast Exponential smoothing (Holt): " + variable.name; //var rangeLabels = sheet.Range[sheet.Cells[row + 1, column], sheet.Cells[row + nData + nForecasts, column]]; var rangeData = sheet.Range[sheet.Cells[row + 2, column - 1], sheet.Cells[row + nData + nForecasts, column - 1]]; var rangeForecast = sheet.Range[sheet.Cells[row + 2, column + 2], sheet.Cells[row + nData + nForecasts, column + 2]]; new TimeSeriesGraph().CreateNewGraph2(sheet, rowFigure, rangeData, rangeForecast, name); } // Calculate exponential smoothing (winters) forecast if box is checked if (rdbWintersExponentialSmoothing) { CalculateWinter(array2, row, sheet, column); string name = "Forecast Exponential smoothing (Winter): " + variable.name; //var rangeLabels = sheet.Range[sheet.Cells[row + 1, column], sheet.Cells[row + nData + nForecasts, column]]; var rangeData = sheet.Range[sheet.Cells[row + 2, column - 1], sheet.Cells[row + nData + nForecasts, column - 1]]; var rangeForecast = sheet.Range[sheet.Cells[row + 2, column + 3], sheet.Cells[row + nData + nForecasts, column + 3]]; new TimeSeriesGraph().CreateNewGraph2(sheet, rowFigure, rangeData, rangeForecast, name); } column = column + 6; } }