Logo

SQL Server MovingSTEYX Function

Updated 2023-11-13 21:49:23.613000

Description

Use the scalar function MovingSTEYX function to calculate the standard error of the predicted y-value for each x in a regression within a resultant table or partition, without the need for a self-join. The standard error value is calculated for each value from the first value in the window to the last value in the window. If the column values are presented to the functions out of order, an error message will be generated.

Syntax

SELECT [westclintech].[wct].[MovingSTEYX](
  <@Y, float,>
 ,<@X, float,>
 ,<@Offset, int,>
 ,<@RowNum, int,>
 ,<@Id, tinyint,>)

Arguments

@Y

the y-value passed into the function. @Y is an expression of type float or of a type that can be implicitly converted to float.

@X

the x-value passed into the function. @X is an expression of type float or of a type that can be implicitly converted to float.

@Offset

specifies the window size. @Offset is an expression of type int or of a type that can be implicitly converted to int.

@RowNum

the number of the row within the group for which the sum is being calculated. If @RowNum for the current row in a set is less than or equal to the previous @RowNum and @RowNum is not equal to 1, an error message will be generated. @RowNum is an expression of type int or of a type that can be implicitly converted to int.

@Id

a unique identifier for the MovingSTEYX calculation. @Id allows you to specify multiple MovingSTEYX calculations within a resultant table. @Id is an expression of type tinyint or of a type that can be implicitly converted to tinyint.

Return Type

float

Remarks

If @Id is NULL then @Id = 0.

@RowNum must be in ascending order.

To calculate moving standard error from the beginning of a dataset or a partition, use the RunningSTEYX function.

If @RowNum = 1 then MovingSTEYX is NULL.

There may be cases where the order in which the data are returned to the function and the order in which the results are returned are different, generally due to parallelism. You can use OPTION(MAXDOP 1) or OPTION(MAXDOP 1,FORCE ORDER) to help eliminate this problem

Examples

In this example we will calculate the standard error in the relationship between square footage and house prices with a window of 5 rows. We will create a temporary table, #se, populate it with some data and then run the SELECT.

--Create the temporary table
CREATE TABLE #se
(
    rn int,
    id_lot int,
    amt_sqft int,
    amt_price int,
    PRIMARY KEY (rn)
);
--Put some date in the table
INSERT INTO #se
VALUES
(1, 21783, 1147, 393918);
INSERT INTO #se
VALUES
(2, 94729, 1313, 470479);
INSERT INTO #se
VALUES
(3, 33028, 1433, 512474);
INSERT INTO #se
VALUES
(4, 59446, 1724, 610477);
INSERT INTO #se
VALUES
(5, 97646, 1162, 388196);
INSERT INTO #se
VALUES
(6, 44823, 1813, 636916);
INSERT INTO #se
VALUES
(7, 88397, 1105, 374348);
INSERT INTO #se
VALUES
(8, 13588, 1555, 559149);
INSERT INTO #se
VALUES
(9, 13891, 1775, 623900);
INSERT INTO #se
VALUES
(10, 90957, 1585, 563947);
INSERT INTO #se
VALUES
(11, 44167, 1510, 529806);
INSERT INTO #se
VALUES
(12, 75533, 1628, 592533);
INSERT INTO #se
VALUES
(13, 56812, 1145, 408634);
INSERT INTO #se
VALUES
(14, 12897, 1632, 589522);
INSERT INTO #se
VALUES
(15, 93826, 1850, 668852);
INSERT INTO #se
VALUES
(16, 74510, 1867, 633400);
INSERT INTO #se
VALUES
(17, 17262, 1587, 552178);
INSERT INTO #se
VALUES
(18, 30929, 1809, 633141);
INSERT INTO #se
VALUES
(19, 49030, 1521, 555713);
INSERT INTO #se
VALUES
(20, 33431, 1195, 434542);
--Calculate STEYX
SELECT id_lot,
       amt_sqft,
       amt_price,
       wct.MovingSTEYX(amt_price, amt_sqft, 4, ROW_NUMBER() OVER (ORDER BY amt_sqft)
                 , NULL) as STEYX
FROM #se
ORDER BY amt_sqft;
--Clean up
DROP TABLE #se;

This produces the following result.

id_lotamt_sqftamt_priceSTEYX
883971105374348NULL
568121145408634NULL
21783114739391811324.5106146064
97646116238819613814.6464073859
33431119543454213808.1748717594
94729131347047914707.4090820442
33028143351247413842.033847512
44167151052980615324.6983801421
4903015215557139270.74078611125
1358815555591499014.60375801778
9095715855639479301.64582952582
17262158755217811486.3605879237
75533162859253312498.1629504527
12897163258952210213.0540677386
59446172461047711625.4481785994
13891177562390012241.4632738191
3092918096331412076.90766493355
4482318136369161800.15275997456
9382618506688528987.1902646192
74510186763340016565.2113914595