2016-09-13 3 views

Antwort

7

Die folgende Abfrage führt eine lineare Regression unter Verwendung von Berechnungen durch, die numerisch stabil sind und leicht modifiziert werden können, um über jede Eingabetabelle zu arbeiten. Es erzeugt die Steigung und den Schnittpunkt der besten Anpassung an das Modell Y = SLOPE * X + INTERCEPT und den Pearson-Korrelationskoeffizienten unter Verwendung der eingebauten Funktion CORR.

Als Beispiel verwenden wir den öffentlichen Geburtsdatensatz, um das Geburtsgewicht als eine lineare Funktion der Schwangerschaftsdauer zu berechnen, aufgeschlüsselt nach Staat. Sie könnten dies kompakter schreiben, aber wir verwenden mehrere Ebenen von Unteranfragen, um hervorzuheben, wie die Teile zusammenpassen. Um dies auf ein anderes Dataset anzuwenden, müssen Sie nur die innerste Abfrage ersetzen.

SELECT Bucket, 
     SLOPE, 
     (SUM_OF_Y - SLOPE * SUM_OF_X)/N AS INTERCEPT, 
     CORRELATION 
FROM (
    SELECT Bucket, 
      N, 
      SUM_OF_X, 
      SUM_OF_Y, 
      CORRELATION * STDDEV_OF_Y/STDDEV_OF_X AS SLOPE, 
      CORRELATION 
    FROM (
     SELECT Bucket, 
       COUNT(*) AS N, 
       SUM(X) AS SUM_OF_X, 
       SUM(Y) AS SUM_OF_Y, 
       STDDEV_POP(X) AS STDDEV_OF_X, 
       STDDEV_POP(Y) AS STDDEV_OF_Y, 
       CORR(X,Y) AS CORRELATION 
     FROM (SELECT state AS Bucket, 
        gestation_weeks AS X, 
        weight_pounds AS Y 
       FROM [publicdata.samples.natality]) 
     WHERE Bucket IS NOT NULL AND 
       X IS NOT NULL AND 
       Y IS NOT NULL 
     GROUP BY Bucket)); 

die STDDEV_POP und CORR mit Hilfe von Funktionen verbessern die numerische Stabilität dieser Abfrage im Vergleich zu Produkten von X und Y zusammenfassend und dann Unterschiede und Dividieren nehmen, aber wenn Sie verwenden beiden Ansätze auf einer gut erzogene Datensatz Sie können überprüfen, dass sie die gleichen Ergebnisse mit hoher Genauigkeit erzeugen.