Are there any Linear Regression Function in SQL Server?

前端 未结 8 1590
遇见更好的自我
遇见更好的自我 2020-12-12 17:19

Are there any Linear Regression Function in SQL Server 2005/2008, similar to the the Linear Regression functions in Oracle ?

8条回答
  •  抹茶落季
    2020-12-12 18:14

    I have translated the Linear Regression Function used in the funcion Forecast in Excel, and created an SQL function that returns a,b, and the Forecast. You can see the complete teorical explanation in the excel help for FORECAST fuction. Firs of all you will need to create the table data type XYFloatType:

     CREATE TYPE [dbo].[XYFloatType] 
    AS TABLE(
    [X] FLOAT,
    [Y] FLOAT)
    

    Then write the follow function:

        /*
    -- =============================================
    -- Author:      Me      :)
    -- Create date: Today   :)
    -- Description: (Copied Excel help): 
    --Calculates, or predicts, a future value by using existing values. 
    The predicted value is a y-value for a given x-value. 
    The known values are existing x-values and y-values, and the new value is predicted by using linear regression. 
    You can use this function to predict future sales, inventory requirements, or consumer trends.
    -- =============================================
    */
    
    CREATE FUNCTION dbo.FN_GetLinearRegressionForcast
    
    (@PtXYData as XYFloatType READONLY ,@PnFuturePointint)
    RETURNS @ABDData TABLE( a FLOAT, b FLOAT, Forecast FLOAT)
    AS
    
    BEGIN 
        DECLARE  @LnAvX Float
                ,@LnAvY Float
                ,@LnB Float
                ,@LnA Float
                ,@LnForeCast Float
        Select   @LnAvX = AVG([X])
                ,@LnAvY = AVG([Y])
        FROM @PtXYData;
        SELECT @LnB =  SUM ( ([X]-@LnAvX)*([Y]-@LnAvY) )  /  SUM (POWER([X]-@LnAvX,2))
        FROM @PtXYData;
        SET @LnA = @LnAvY - @LnB * @LnAvX;
        SET @LnForeCast = @LnA + @LnB * @PnFuturePoint;
        INSERT INTO @ABDData ([A],[B],[Forecast]) VALUES (@LnA,@LnB,@LnForeCast)
        RETURN 
    END
    
    /*
    your tests: 
    
     (I used the same values that are in the excel help)
    DECLARE @t XYFloatType 
    INSERT @t VALUES(20,6),(28,7),(31,9),(38,15),(40,21)        -- x and y values
    SELECT *, A+B*30 [Prueba]FROM dbo.FN_GetLinearRegressionForcast@t,30);
    */
    

提交回复
热议问题