2.1.11.12 ocmath_diagnostic_residuals


Description

Function to compute diagnostic residual for fits(NLSF, LR, PR and MR)

Syntax

int ocmath_diagnostic_residuals( const int nSize, const int nParam, const double dSSE, int nResid, const double * pResid, const double * pX, double * pStadRes, double * pStudRes, double * pStudDelRes, double * pCook, double * pAtkinson, double * pH = NULL )

Parameters

nSize
[input] the number of data points
nParam
[input] the number of parameters fit by the regression.
dSSE
[input] the sum of square of residuals
nResid
[input] size of residuals
pResid
[input] pointer to residuals in the fits
pX
[input] pointer to matix of X, which is X in MR and partial derivatives matrix in NLSF
the matrix should have nParam columns and nSize rows. The variable won't be used if pH is specified
pStadRes
[output] pointer to stardardized residual. Its size is nResid
pStudRes
[output] pointer to studentized residual. Its size is nResid
pStudDelRes
[output] pointer to studentized deleted residual. Its size is nResid
pCook
[output] pointer to Cook'sD statistic. Its size is nResid
pAtkinson
[output] pointer to Atkinson's T statistic. Its size is nResid
pH
[input] optional output pointer to leverage. Only needed in MR. Its size is nSize

Return

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

Examples

EX1

//The example find studentized residuals for 2 order polynomial fit
#include <FDFTree.h>
#include <ONLSF.h>
#include <ocStats.h>
#include <stats_utils.h>
void ocmath_diagnostic_residuals_ex1()
{
    string        strFDF = okutil_get_origin_path(ORIGIN_PATH_SYSTEM, "FitFunc")+"PARABOLA.FDF";
    int nParam = 3; //2th Order polynomial has 3 parameters. 
    Tree tr;
    if( !nlsf_FDF_to_tree( strFDF, &tr ))
        return;
    
    NumericFunction    NF;
    NF.SetTree(tr);

    vector        vParas;
    vParas.SetSize(nParam);
    vParas[0] = 11.2717;        // a
    vParas[1] = -3.81714;        // b
    vParas[2] = 0.4619;    // c
    
    // X-values:
    //vector vY={4, 3.3, 3.5, 3.8, 4.2, 5};
    vector vX={3,4,4.5,5,5.5, 6}; 
    int    nNumPts = vX.GetSize();

    vector vA, vB, vC;
    vA.SetSize(nNumPts);
    vB.SetSize(nNumPts);
    vC.SetSize(nNumPts);
    
    for (int ipt = 0; ipt < nNumPts; ipt++)
    {
        double            arrPartialDerivs[3];
        BOOL            bb = NF.EvalPartialDerivatives(vParas, arrPartialDerivs, vX[ipt]);
        if (!bb)
        {
            out_str("Failed!");
            return;
        }
        
        vA[ipt] = arrPartialDerivs[0];
        vB[ipt] = arrPartialDerivs[1];
        vC[ipt] = arrPartialDerivs[2];
    }
    
    matrix mDerivX; //Patial derivative matrix
    mDerivX.SetSize(nNumPts, nParam);
    mDerivX.SetColumn(vA, 0);
    mDerivX.SetColumn(vB, 1);
    mDerivX.SetColumn(vC, 2);
    
    double dSSE = 0.00629;
    vector vRes = {0.0226, -0.0936, 0.0519, 0.0664, -0.0500, 0.0026};
    DiagResid psDiagResid_1[8];
    vector vStad(nNumPts), vStud(nNumPts), vStudDel(nNumPts), vCook(nNumPts), vAtkinson(nNumPts);
    int nRet = ocmath_diagnostic_residuals(nNumPts, nParam, dSSE, vRes.GetSize(), vRes, mDerivX, vStad, vStud, vStudDel, vCook, vAtkinson);
}

EX2

#include <stats_utils.h>
void ocmath_diagnostic_residuals_ex2()
{
    int nRet;
    
    UINT nPts,nM;
    uint nSizeFitParams;
    LROptions psLROptions;
    RegStats stRegStats;
    RegANOVA stRegANOVA;
    matrix mX(6,3)={{1,   2,   3},
                     {3.2, 1.1, 3.4},
                     {1,   2.6, 5},
                     {5,   5,   2.1},
                     {1,   6,   7},
                     {2,    8,    10}};
    vector vY ={4,2,6, 7, 8, 10};
    vector vWeight = {1, 1, 1, 1, 1, 1};
    psLROptions.FixIntercept = false;
    psLROptions.Confidence = 0.95;
    FitParameter psFitParameter_1[4];
    vector vH, vSE;
    matrix mCov, mCorr;
    nRet = stats_multiple_linear_regression(mX, vY, vWeight, psLROptions, psFitParameter_1, 4, &stRegStats, &stRegANOVA, mCov, mCorr, vH, vSE);
    if (nRet != STATS_NO_ERROR)
        printf("error in stats_multiple_linear_regression");

    vector vRes = {-0.46398, -0.49247, 1.1874, 0.26653, -0.5148, 0.01732};
    int nNumPts = mX.GetNumRows();
    int nParam = mX.GetNumCols() + 1;
    vector vStad(nNumPts), vStud(nNumPts), vStudDel(nNumPts), vCook(nNumPts), vAtkinson(nNumPts);
    nRet = ocmath_diagnostic_residuals(nNumPts, nParam, stRegStats.ReducedChiSq, vRes.GetSize(), vRes, mX, vStad, vStud, vStudDel, vCook, vAtkinson, vH);
    if (nRet != STATS_NO_ERROR)
        printf("error in ocmath_diagnostic_residuals");
}

Remark

See Also

Header to Include

origin.h

Reference