2 votos

Regesión lineal 3 métodos resultados diferentes

Por la mañana,

Así que uso un paquete llamado Ninja Trader que tiene un método de regresión lineal, también he escrito mi propio método y comparado los resultados con el método de regresión lineal de Excels. Los tres están dando resultados diferentes y estoy tratando de entender por qué.

Si observamos un ejemplo, tal vez alguien pueda arrojar algo de luz sobre el porqué de esto.

EXAMPLE

Y vals 165.05 165.02 165.03 165.07 165.02 165.07 165.04 165.03 165.02 165.01 165 165.02 165.03 165.02 165.02 165.01 165.03 165.04 165.04 165.07

x vals 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

The results I have from the three different methods are:

Ninja Trader method : 165.034571428572
My own method:        165.036842105263
Excels method:        165.025578947368000

Aquí está mi método de regresión de línea, en C#:

public static double LinearRegression(double[] xVals, double[] yVals, int inclusiveStart, int inclusiveEnd)
        {

                double sumOfX = 0;
                double sumOfY = 0;
                double sumOfXSq = 0;
                double sumOfYSq = 0;
                double ssX = 0;
                double ssY = 0;
                double sumCodeviates = 0;
                double sCo = 0;
                double count = xVals.Length;
                double x;
                double y;

                for (int ctr = inclusiveStart; ctr < count; ctr++)
                {
                    x = xVals[ctr];
                    y = yVals[ctr];
                    sumCodeviates += x * y;
                    sumOfX += x;
                    sumOfY += y;
                    sumOfXSq += x * x;
                    sumOfYSq += y * y;
                }

            double slope = ((count * sumCodeviates) - (sumOfX * sumOfY)) / ( (count * sumOfXSq) - (sumOfX * sumOfX));
            double yIntercept = ((sumOfXSq * sumOfY) - (sumOfX * sumCodeviates)) / ((count * sumOfXSq) - (sumOfX * sumOfX));

            return yIntercept + slope * (xVals.Length + 1);
        }

Espero que alguien pueda ayudarme a llegar al fondo de esto. Gracias ; )

0 votos

Sí, puedo ver que es un problema con Excel, pero el método ninjatarder está escrito en c# y también utiliza dobles. He escrito a ninja trader así que vamos a ver lo que vienen con. Gracias por la ayuda.

0 votos

Aún así, hay más uno para implementar este algoritmo y sospecho que una diferencia en el método resulta en un error de redondeo.

3voto

Pentarex Puntos 51

Es un problema común debido a la aritmética de punto flotante. Por ejemplo, usted convierte las variables en tipo doble, mientras que Excel utiliza una precisión limitada.

Aquí puede encontrar más información sobre la precisión numérica en Excel: https://en.wikipedia.org/wiki/Numeric_precision_in_Microsoft_Excel

No sé nada de NinjaTrader, pero creo que los resultados son ligeramente diferentes a los de tu implementación por la precisión utilizada.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X