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.