Doğrusal Regession 3 yöntemleri farklı sonuçlar

Sabah,

Bu yüzden doğrusal bir regresyon yöntemine sahip olan Ninja Trader adında bir paket kullanıyorum, kendi yöntemimi yazdım ve sonuçları lineer regresyon yöntemiyle karşılaştırdım. Üçü de farklı sonuçlar veriyor ve ben nedenini anlamaya çalışıyorum.

Eğer bir örneğe bakarsak, belki birisi birisinin neden ışık tutabileceğidir.

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

İşte C# 'daki linea regresyon yöntemim:

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);
        }

Umarım birisi bunun altından çıkmama yardım edebilir. Teşekkürler ; )

2
Yine de, bu algoritmayı uygulamak için bir tane daha var ve yöntemdeki bir farkın bir yuvarlama hatasıyla sonuçlandığından şüpheleniyorum.
katma yazar Bob Jansen, kaynak
Evet, Excel ile ilgili bir sorun olduğunu görebiliyorum ama Ninjatarder Metodu C# ile yazılıyor ve ayrıca Doubles kullanıyor. Ninja tüccarına yazdım, böylece geri döndüklerini görelim. Yardım için teşekkürler.
katma yazar Pirzada, kaynak

1 cevap

Kayan nokta aritmetiği nedeniyle yaygın bir sorundur. Örneğin, değişkenleri çift tipe çevirirsiniz, oysa Excel sınırlı bir doğruluk kullanır.

Here you can find more info about the numeric precision in Excel: https://en.wikipedia.org/wiki/Numeric_precision_in_Microsoft_Excel

NinjaTrader hakkında bir şey bilmiyorum, ama kullanılan sonuçtan dolayı sonuçların uygulamanızdan biraz farklı olduğunu düşünüyorum.

3
katma