Statistics Example 4

From Software Product Documentation
Jump to navigation Jump to search
Language:  English  • français • italiano • português • español 

Since this page was created a command has been added to Visual3D.

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 Statistics_Example_5 for another example.

Given the following definition of a linear regression:

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

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.

!=========================================================================
! 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::X 
/SIGNALY=DERIVED::RESIDUAL::TEST::Y 
/NUM_POINTS= METRIC::RESIDUAL::N 
/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 
;

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:

Now create a second 2D graph at the same location containing the regression line

The resulting report graph should appear as follows:

Linear_Regression_Explicit Meta-Command

Below are the commands for the Linear_Regression_Explicit Meta-Commands. Go to Pipeline Commands:Meta Commands for details on how to use Meta-commands.

! 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 
;
Retrieved from ""