User Tools

Site Tools


visual3d:documentation:statistics:compute_linear_regression

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
visual3d:documentation:statistics:compute_linear_regression [2024/07/03 17:30] – removed sgrangervisual3d:documentation:statistics:compute_linear_regression [2024/07/17 15:46] (current) – created sgranger
Line 1: Line 1:
 +====== Compute Linear Regression ======
 +
 +Since this page was created a command has been added to Visual3D.
 +
 +[[Visual3D:Documentation:Pipeline:Metric_Commands:Metric_To_Fit_Signal_To_Line|Metric_To_Fit_Signal_To_Line]]
 +This example uses a command script that calls a meta-command that will compute a linear regression of the data identified in the script. See also [[Visual3D:Documentation:Statistics:Meta_Command_for_Linear_Regression|Statistics_Example_5]] for another example.
 +
 +Given the following definition of a linear regression:
 +
 +<code>
 +Regression Equation: y = b + mx
 +
 +Slope: m = (NΣXY - (ΣX)(ΣY)) / (NΣX^2 - (ΣX)^2) 
 +
 +Intercept: b = (ΣY - m(ΣX)) / N
 +
 +where :
 +
 +  x and y are the variables.
 +  m = The slope of the regression line
 +  b = The intercept point of the regression line and the y axis.
 +  N = Number of values or elements
 +  X = array of x-components
 +  Y = array of y-components
 +  ΣX = Sum of x
 +  ΣY = Sum of y
 +  ΣXY = Sum of xy
 +  ΣX^2 = Sum of x^2
 +</code>
 +
 +==== Example Data ====
 +
 +Given the following data:
 +
 +|5 ||3.1|
 +|6 ||3.5|
 +|7 ||3.9|
 +|9 ||4.1|
 +|10||4.3|
 +|11||4.7|
 +
 +==== Linear_Regression_Explicit Pipeline Script ====
 +
 +This pipeline command script creates the signals and calls the **linear_regression_explicit** meta command.
 +
 +<code>
 +!=========================================================================
 +! This script will call the meta-command linear_regression_explicit that 
 +! will perform a linear regression of data that is placed in the GLOBAL
 +
 +! Note: Regression Equation: y = b + mx
 +
 +! Slope: m = (NΣXY - (ΣX)(ΣY)) / (NΣX^2 - (ΣX)^2) 
 +
 +! Intercept: b = (ΣY - m(ΣX)) / N
 +
 +! where :
 +!
 +!  x and y are the variables.
 +!  m = The slope of the regression line
 +!  b = The intercept point of the regression line and the y axis.
 +!  N = Number of values or elements
 +!  X = array of x-components
 +!  Y = array of y-components
 +!  ΣX = Sum of x
 +!  ΣY = Sum of y
 +!  ΣXY = Sum of xy
 +!  ΣX^2 = Sum of x^2
 +!========================================================================= 
 +
 +! The GLOBAL needs to be active
 +Select_Active_File
 +/FILE_NAME=GLOBAL
 +! /QUERY=
 +;
 +
 +!-------------------------------------------------------
 +! Create a signal containing the number of data points 
 +!-------------------------------------------------------
 +Metric_Explicit 
 +/RESULT_METRIC_NAME=N 
 +/RESULT_METRIC_FOLDER=RESIDUAL 
 +/METRIC_VALUE=6 
 +
 +
 +! create a signal containing the data 
 +Evaluate_Expression 
 +/EXPRESSION=LIST(VECTOR(5,3.1),VECTOR(6,3.5),VECTOR(7,3.9),VECTOR(9,4.1),VECTOR(10,4.3),VECTOR(11,4.7)) 
 +/RESULT_NAME=TEST 
 +/RESULT_TYPE=DERIVED 
 +/RESULT_FOLDER=RESIDUAL 
 +
 +
 +!--------------------------------------------------
 +! Call the meta command linear_regression_explicit
 +!--------------------------------------------------
 +linear_regression_explicit 
 +/SIGNALX=DERIVED::RESIDUAL::TEST::
 +/SIGNALY=DERIVED::RESIDUAL::TEST::
 +/NUM_POINTS= METRIC::RESIDUAL::
 +/RESULT_NAME=RESULT 
 +/RESULT_FOLDER=RESIDUAL 
 +
 +
 +!--------------------------------------------------------------------------
 +! create signal representing the linear regression 
 +! 4 temporary signals are created for clarity - STARTX, ENDX, STARTY, ENDY
 +!--------------------------------------------------------------------------
 +
 +! Create STARTX at the first datapoint
 +Evaluate_Expression 
 +/EXPRESSION=DERIVED::RESIDUAL::TEST::X[1] 
 +/RESULT_NAME=STARTX 
 +/RESULT_TYPE=METRIC 
 +/RESULT_FOLDER=RESIDUAL 
 +
 +
 +! Create ENDX at the Nth datapoint
 +Evaluate_Expression 
 +/EXPRESSION=DERIVED::RESIDUAL::TEST::X[METRIC::RESIDUAL::N] 
 +/RESULT_NAME=ENDX 
 +/RESULT_TYPE=METRIC 
 +/RESULT_FOLDER=RESIDUAL 
 +
 +
 +! Create STARTY from the meta command regression results and STARTX (y = b + mx)
 +Evaluate_Expression 
 +/EXPRESSION=METRIC::RESIDUAL::RESULT::X+METRIC::RESIDUAL::RESULT::Y*METRIC::RESIDUAL::STARTX 
 +/RESULT_NAME=STARTY 
 +/RESULT_TYPE=METRIC 
 +/RESULT_FOLDER=RESIDUAL 
 +;
 +
 +! Create ENDY from the meta command regression results and ENDX (y = b + mx)
 +Evaluate_Expression 
 +/EXPRESSION=METRIC::RESIDUAL::RESULT::X+METRIC::RESIDUAL::RESULT::Y*METRIC::RESIDUAL::ENDX 
 +/RESULT_NAME=ENDY 
 +/RESULT_TYPE=METRIC 
 +/RESULT_FOLDER=RESIDUAL 
 +
 +
 +! Create the line 
 +Evaluate_Expression 
 +/EXPRESSION=LIST(VECTOR(METRIC::RESIDUAL::STARTX,METRIC::RESIDUAL::STARTY),VECTOR(METRIC::RESIDUAL::ENDX,METRIC::RESIDUAL::ENDY)) 
 +/RESULT_NAME=RESULT_LINE 
 +/RESULT_TYPE=METRIC 
 +/RESULT_FOLDER=RESIDUAL 
 +;
 +</code>
 +
 +==== Graph the Data and Regression Line ====
 +
 +The resulting signal **METRIC::RESIDUAL::RESULT_LINE** can be graphed in a report graph with the original data.
 +
 +For example, create a report graph (2D Graph) as follows:
 +
 +{{:Linear_regression1.jpg}}
 +
 +Now create a second 2D graph at the same location containing the regression line
 +
 +{{:Linear_regression2.jpg}}
 +
 +The resulting report graph should appear as follows:
 +
 +{{:Linear_regression3.jpg}}
 +
 +==== Linear_Regression_Explicit Meta-Command ====
 +
 +Below are the commands for the **Linear_Regression_Explicit** Meta-Commands. Go to [[Visual3D:Documentation:Pipeline:Meta_Commands:Meta_Commands_Overview|Pipeline Commands:Meta Commands]] for details on how to use Meta-commands.
 +
 +<code>
 +! BEGIN_META
 +! META_CMD_NAME=Linear_Regression_Explicit 
 +! META_PARAM= SIGNALX  : string ::yes
 +! META_PARAM= SIGNALY  : string ::yes
 +! META_PARAM= NUM_POINTS  : string ::yes
 +! META_PARAM= RESULT_NAME  : string ::yes
 +! META_PARAM= RESULT_FOLDER  : string ::yes
 +! END_META
 +
 +!========================================================================
 +! This meta-command will calculate the linear regression of data 
 +! that is passed to the meta-command
 +!
 +! Note: Regression Equation: y = b + mx
 +
 +! Slope: m = (NΣXY - (ΣX)(ΣY)) / (NΣX^2 - (ΣX)^2) 
 +
 +! Intercept: b = (ΣY - m(ΣX)) / N
 +
 +! where :
 +!
 +!  x and y are the variables.
 +!  m = The slope of the regression line
 +!  b = The intercept point of the regression line and the y axis.
 +!  N = Number of values or elements
 +!  X = array of x-components
 +!  Y = array of y-components
 +!  ΣX = Sum of x
 +!  ΣY = Sum of y
 +!  ΣXY = Sum of xy
 +!  ΣX^2 = Sum of x^2
 +!==========================================================================
 +
 +!---------------------------------------------------------------------------
 +! Create Temporary Variables - TEMPX and TEMPY from SIGNAL::X and SIGNAL::Y
 +!---------------------------------------------------------------------------
 +
 +Set_Pipeline_Parameter 
 +/PARAMETER_NAME=NAME 
 +/PARAMETER_VALUE=::RESULT_NAME 
 +;
 +
 +Set_Pipeline_Parameter 
 +/PARAMETER_NAME=FOLDER 
 +/PARAMETER_VALUE=::RESULT_FOLDER 
 +;
 +
 +! Create TEMPX
 +Evaluate_Expression 
 +/EXPRESSION=::SIGNALX 
 +/RESULT_NAME=TEMPX 
 +/RESULT_TYPE=DERIVED 
 +/RESULT_FOLDER=RESIDUAL 
 +;
 +
 +! Create TEMPY
 +Evaluate_Expression 
 +/EXPRESSION=::SIGNALY 
 +/RESULT_NAME=TEMPY 
 +/RESULT_TYPE=DERIVED 
 +/RESULT_FOLDER=RESIDUAL 
 +;
 +
 +!----------------------------
 +! Sum X and Y
 +!---------------------------- 
 +
 +! Sum X
 +Metric_Sum 
 +/RESULT_METRIC_NAME=SUMX 
 +/APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE 
 +/RESULT_METRIC_FOLDER=RESIDUAL 
 +/SIGNAL_TYPES=DERIVED 
 +/SIGNAL_NAMES=TEMPX 
 +/SIGNAL_FOLDER=RESIDUAL 
 +/SIGNAL_COMPONENTS=X 
 +/EVENT_SEQUENCE= 
 +/EXCLUDE_EVENTS= 
 +/GENERATE_MEAN_AND_STDDEV=FALSE 
 +/APPEND_TO_EXISTING_VALUES=FALSE 
 +;
 +
 +! Sum Y
 +Metric_Sum 
 +/RESULT_METRIC_NAME=SUMY 
 +/APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE 
 +/RESULT_METRIC_FOLDER=RESIDUAL 
 +/SIGNAL_TYPES=DERIVED 
 +/SIGNAL_NAMES=TEMPY 
 +/SIGNAL_FOLDER=RESIDUAL 
 +/SIGNAL_COMPONENTS=X 
 +/EVENT_SEQUENCE= 
 +/EXCLUDE_EVENTS= 
 +/GENERATE_MEAN_AND_STDDEV=FALSE 
 +/APPEND_TO_EXISTING_VALUES=FALSE 
 +;
 +
 +!----------------------
 +! Multiply X and Y
 +!----------------------
 +Evaluate_Expression 
 +/EXPRESSION=DERIVED::RESIDUAL::TEMPX*DERIVED::RESIDUAL::TEMPY 
 +/RESULT_NAME=XY 
 +/RESULT_TYPE=DERIVED 
 +/RESULT_FOLDER=RESIDUAL 
 +;
 +
 +!----------------------
 +! Sum XY
 +!----------------------
 +Metric_Sum 
 +/RESULT_METRIC_NAME=SUMXY 
 +/APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE 
 +/RESULT_METRIC_FOLDER=RESIDUAL 
 +/SIGNAL_TYPES=DERIVED 
 +/SIGNAL_NAMES=XY 
 +/SIGNAL_FOLDER=RESIDUAL 
 +/SIGNAL_COMPONENTS=X 
 +/EVENT_SEQUENCE= 
 +/EXCLUDE_EVENTS= 
 +/GENERATE_MEAN_AND_STDDEV=FALSE 
 +/APPEND_TO_EXISTING_VALUES=FALSE 
 +;
 +
 +!---------------
 +! Square X
 +!---------------
 +Evaluate_Expression 
 +/EXPRESSION=DERIVED::RESIDUAL::TEMPX*DERIVED::RESIDUAL::TEMPX 
 +/RESULT_NAME=XX 
 +/RESULT_TYPE=DERIVED 
 +/RESULT_FOLDER=RESIDUAL 
 +;
 +
 +!-----------------
 +! Sum square of X
 +!-----------------
 +Metric_Sum 
 +/RESULT_METRIC_NAME=SUMXX 
 +/APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE 
 +/RESULT_METRIC_FOLDER=RESIDUAL 
 +/SIGNAL_TYPES=DERIVED 
 +/SIGNAL_NAMES=XX 
 +/SIGNAL_FOLDER=RESIDUAL 
 +/SIGNAL_COMPONENTS=X 
 +/EVENT_SEQUENCE= 
 +/EXCLUDE_EVENTS= 
 +/GENERATE_MEAN_AND_STDDEV=FALSE 
 +/APPEND_TO_EXISTING_VALUES=FALSE 
 +;
 +
 +!------------------
 +! Calculate slope
 +!------------------
 +Evaluate_Expression 
 +/EXPRESSION=(&::NUM_POINTS&*METRIC::RESIDUAL::SUMXY-METRIC::RESIDUAL::SUMX*METRIC::RESIDUAL::SUMY)/(&::NUM_POINTS&*METRIC::RESIDUAL::SUMXX-METRIC::RESIDUAL::SUMX^2) 
 +/RESULT_NAME=SLOPE 
 +/RESULT_TYPE=METRIC 
 +/RESULT_FOLDER=RESIDUAL 
 +;
 +
 +!----------------------
 +! Calculate intercept
 +!----------------------
 +Evaluate_Expression 
 +/EXPRESSION=(METRIC::RESIDUAL::SUMY-METRIC::RESIDUAL::SLOPE*METRIC::RESIDUAL::SUMX)/&::NUM_POINTS 
 +/RESULT_NAME=INTERCEPT 
 +/RESULT_TYPE=METRIC 
 +/RESULT_FOLDER=RESIDUAL 
 +;
 +
 +!--------------------------------------------------------------------------
 +! create the resulting metric signal that contains the slope and intercept
 +!--------------------------------------------------------------------------
 +Evaluate_Expression 
 +/EXPRESSION=VECTOR(METRIC::RESIDUAL::INTERCEPT,METRIC::RESIDUAL::SLOPE) 
 +/RESULT_NAME=::NAME 
 +/RESULT_TYPE=METRIC 
 +/RESULT_FOLDER=::FOLDER 
 +;
 +
 +!-----------------------------------------------------------
 +! clean up the temporary signals 
 +! if you want to see the temporary signals for debugging 
 +! comment out this next command 
 +!-----------------------------------------------------------
 +Remove_Signals 
 +/SIGNAL_TYPES=DERIVED+DERIVED+DERIVED+DERIVED+METRIC+METRIC+METRIC+METRIC+METRIC+METRIC 
 +/SIGNAL_NAMES=TEMPX+TEMPY+XX+XY+SLOPE+INTERCEPT+SUMX+SUMXX+SUMXY+SUMY 
 +/SIGNAL_FOLDER=RESIDUAL+RESIDUAL+RESIDUAL+RESIDUAL+RESIDUAL+RESIDUAL+RESIDUAL+RESIDUAL+RESIDUAL+RESIDUAL 
 +;
 +</code>
 +
 +
  
visual3d/documentation/statistics/compute_linear_regression.1720027824.txt.gz · Last modified: 2024/07/03 17:30 by sgranger