ocmath_multiple_linear_regression

 

Description

Function to perform multiple linear regression.

Syntax

OCMATH_API int ocmath_multiple_linear_regression(const double* pX, UINT nOSizeN, UINT nVSizeM, const double* pY, const double* pWT, UINT nWTSize, const LROptions* psLROptions, FitParameter* psFitParameter, UINT nFitSize, RegStats* psRegStats = NULL, RegANOVA* psRegANOVA = NULL, double* pCov = NULL,  double* pCorr = NULL, uint nCovCorrRowSize = 0, uint nCovCorrColSize = 0, double* pH = NULL, double* pSE = NULL)

Parameters

pX
[Input] matrix containing data points of the independent variables
nOSizeN
[Input] the number of observations, nOSizeN>=2
nVSizeM
[Input] the total number of independent variables in the data set, nVSizeM>=1
pY
[Input] vector containing data points of dependent variable, size of pY = nOSizeN
pWT
[Input] vector containing weight of the data, all date in pWT should not less than zero
nWTSize
[Input] the size of the weight, should be the same as nOSizeN
psLROptions
[Input] struct for linear regression options
psFitParameter
[Output] pointer to structs to receive information on each fitting parameter
nFitSize
[Input] the size of psFitParameter, should be nVSizeM + 1
psRegStats
[Output] pointer to struct containing Regression statistics
psRegANOVA
[Output] pointer to struct containing ANOVA statistics
pCov
[Output] pointer to covariance matrix of estimate
pCorr
[Output] pointer to correlation matrix of estimate
nCovCorrRowSize
[Input] row size of Covariance and Correlation matrix, which should be nVSizeM + 1
nCovCorrColSize
[Input] column size of Covariance and Correlation matrix, which should be nVSizeM + 1
pH
[Output] pointer to diagonal element of H, leverage Size of the pH should be nOSizeN
pSE
[Output] pointer to standard error of mean predicted values. Size of the pSE should be nOSizeN

Return

Returns STATS_NO_ERROR on successful exit and a non-zero STATS error code on failure.

Error Codes:

STATS_ERROR_SETTING(-151): when psLROptions->Confidence<0 or psLROptions->Confidence > 1.

STATS_INPUT_NULL_POINTER(-156): pX is NULL or pY is NULL.

STATS_ERROR_WEIGHT_DIFF_SIZE(-174): if nWTSize is not 0, nWTSize should equal to nOSizeN

STATS_PARAMS_ARRAY_TOO_SMALL(-98): nCovCorrRowSize < nVSizeM + 1 or nCovCorrColSize < nVSizeM + 1, or nFitSize < nVSizeM.

STATS_ERROR_DATA_PTS_LESS_THAN_PARA_NUM(-212): the number of input data cannot less than the number of parameters.

Other error code please refer to g02dac.

Examples

EX1

void ocmath_multiple_linear_regression_ex1()
{
        Worksheet wks = Project.ActiveLayer();
        if( !wks )
                return; // please make sure a worksheet with data is active 
        
        DataRange dr;
        dr.Add("X", wks, 0, 0, -1, 2);
        dr.Add("Y", wks, 0, 3, -1, 3);
        
        matrix mX;      
        dr.GetData(mX, 0, 0);
        
        vector vY;
        dr.GetData(&vY, 1);
        
        // prepare input and output variables
        UINT nOSizeN = mX.GetNumRows();
        UINT nVSizeM = mX.GetNumCols();
        
        LROptions stLROptions;
        stLROptions.UseReducedChiSq = 1;
        
        FitParameter stFitParameters[4]; // should be nVSizeM+1
        UINT nFitSize = nVSizeM+1;
        
        RegStats stRegStats;
        RegANOVA stRegANOV;
        
        // calculate
        int nRet = ocmath_multiple_linear_regression(mX, nOSizeN, nVSizeM, vY, NULL, 0, &stLROptions, 
                                stFitParameters, nFitSize, &stRegStats, &stRegANOV);
                                
        if( nRet != STATS_NO_ERROR )
        {     
                out_str("Error");
                return;
        }
        
        // output the parameter value to Script Window
        for(int nn = 0; nn < nFitSize; nn++)
                printf("Param %d=%g\n", nn+1, stFitParameters[nn].Value);
        
        // output statistics results to Result Log
        Tree tr;
        TreeNode trResult = tr.AddNode("MR");
        TreeNode trStats = trResult.AddNode("Stats");
        trStats += stRegStats;
        
        TreeNode trANOVA = trResult.AddNode("ANOVA");
        trANOVA += stRegANOV;
        
        string str;
        tree_to_str(trResult, str);
        Project.OutStringToResultsLog(str);      
}

Remark

The function finds a QR decomposition of X. If R is of full rank, solution is obtained from the QR decomposition. If R is not full rank, a solution is obtain by means of a singular value decomposion(SVD) of R. If R is not full rank, STATS_ERROR_RANK_DEFICIENT is returned in addition to the solutions. The computational engine is the NAG function nag_regsn_mult_linear (g02dac).

See Also

Header to Include

origin.h

Reference