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);
        }
Esempio n. 2
0
        // 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;
            }
        }