Main Content

risk.validation.correlatedBinomialTest

Return correlated binomial test result

Since R2025a

    Description

    hCorrBinTest = risk.validation.correlatedBinomialTest(Probability,NumEvents,NumTrials,Correlation) returns the correlated binomial test result, hCorrBinTest, for a given set of probabilities, events, and correlation trials. The output is 1 if the test rejects the null hypothesis at the 95% confidence level, or 0 otherwise. Probability contains numeric values that represent quantities such as probability of default (PD) estimates. For PD models, Correlation represents the asset correlation of a one-factor model.

    example

    hCorrBinTest = risk.validation.correlatedBinomialTest(Probability,NumEvents,NumTrials,Correlation,Name=Value) specifies optional name-value arguments. For example, you can set a specific confidence level for the correlated binomial test by using the ConfidenceLevel name-value argument.

    [hCorrBinTest,corrBinTestOutput] = risk.validation.correlatedBinomialTest(___) also returns a structure corrBinTestOutput, containing the method used in the correlated binomial test and a table of summary metrics.

    Examples

    collapse all

    Use the correlatedBinomialTest function to determine whether the correlated binomial test rejects the null hypothesis at a 0.95 confidence level in a probability of default (PD) dataset. In this example, you use the credit validation data set, which includes a table, ScorecardValidationData, that contains PD values and their corresponding default status. Before you apply the test, it is common practice to:

    • Group the probabilities by deciles.

    • Compute the average probability of each group.

    • Compute the total number of defaults and loans of each group.

    This example assumes the model correlation is 0.1.

    Load and display the credit validation data.

    load CreditValidationData.mat
    head(ScorecardValidationData)
        CreditScore      PD       Default
        ___________    _______    _______
    
          579.86       0.14182       0   
          563.65       0.17143       0   
          549.52       0.20106       0   
          546.25       0.20845       0   
          485.34       0.37991       0   
          482.07       0.39065       0   
          579.86       0.14182       1   
          451.73         0.494       0   
    

    Group Probabilities by Deciles

    Extract the variable, PD, from the table ScorecardValidationData and group the probabilities by using the risk.validation.groupNumberByQuantile function with the fully qualified namespace risk.validation. Specify "deciles" as the quantile type.

    Probability = ScorecardValidationData.PD;
    QuantileType = "deciles";
    PDDecileNumber = risk.validation.groupNumberByQuantile(Probability,QuantileType);

    Determine Average Probabilities by Group

    Next, calculate the average probability for each group by using the groupsummary function.

    PDAvgByDecile = groupsummary(Probability,PDDecileNumber,"mean");

    Compute Total Defaults and Loans by Group

    Extract the variable Default from the table ScorecardValidationData and use this variable as the default indicator. Then use the groupsummary function to compute the sums of defaults and loans for each group.

    DefaultIndicator = ScorecardValidationData.Default;
    [NumDefaultsByDecile,~,NumLoansByDecile] = groupsummary(DefaultIndicator,PDDecileNumber,"sum");

    Apply Correlated Binomial Test

    You can then apply the correlatedBinomialTest function with the fully qualified namespace risk.validation for each group to see if the test rejects the null hypothesis. Use the average probabilities and the total number of defaults and loans as input arguments. Then, display a table with the results.

    Correlation = 0.1;
    [hCorrBinTest,corrBinTestOutput] = risk.validation.correlatedBinomialTest(PDAvgByDecile,NumDefaultsByDecile,NumLoansByDecile,Correlation)
    hCorrBinTest = 10×1 logical array
    
       0
       0
       0
       0
       0
       0
       0
       0
       0
       0
    
    
    corrBinTestOutput = struct with fields:
         Method: "exact"
        Results: [10×10 table]
    
    
    disp(corrBinTestOutput.Results)
        RejectCorrBinTest    NumEvents    CriticalValue    PValue     ConfidenceLevel    NumTrials    Probability    ObservedProbability    Correlation    EventCorrelation
        _________________    _________    _____________    _______    _______________    _________    ___________    ___________________    ___________    ________________
    
              false              7             11          0.19637         0.95             36          0.13683            0.19444              0.1            0.043101    
              false             11             14          0.14033         0.95             36          0.19799            0.30556              0.1            0.050533    
              false              8             15          0.38178         0.95             34          0.22656            0.23529              0.1            0.053214    
              false             10             13          0.15826         0.95             27          0.25552            0.37037              0.1            0.055529    
              false             16             22          0.20156         0.95             42           0.2868            0.38095              0.1            0.057635    
              false             13             23          0.46477         0.95             41          0.32664            0.31707              0.1            0.059802    
              false             10             22          0.70256         0.95             36          0.37627            0.27778              0.1            0.061788    
              false             11             19           0.5015         0.95             29          0.40319            0.37931              0.1            0.062566    
              false             18             28          0.47434         0.95             40          0.45525               0.45              0.1            0.063514    
              false             22             31          0.47195         0.95             39          0.56233             0.5641              0.1            0.063273    
    

    Input Arguments

    collapse all

    Probability values, specified as a numeric vector with values in the range (0,1). Probability contains values that indicate quantities such as PD estimates.

    Number of events observed, specified as a numeric vector containing nonnegative integers. For PD models, NumEvents contains the number of defaults observed.

    Number of trials, specified as a numeric vector containing positive integers. Each element in NumTrials must be greater than or equal to the corresponding elements of NumEvents. For PD models, NumTrials contains the number of loans.

    Model correlation, specified as a numeric vector with values in the range [0,1). For PD models, Correlation represents the asset correlation of a one-factor model.

    Name-Value Arguments

    collapse all

    Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

    Example: hBinTest = risk.validation.correlatedBinomialTest(PDAvgByDecile,NumDefaultsByDecile,NumLoansByDecile,ConfidenceLevel=0.95)

    Confidence level of the hypothesis test, specified as a numeric scalar in the range (0,1).

    Hypothesis test method, specified as either "approximate" or "exact".

    • "exact"correlatedBinomialTest uses an exact probability based on numerical integration.

    • "approximate"correlatedBinomialTest uses an approximate test based on an approximation following Vasicek's model.

    Output Arguments

    collapse all

    Hypothesis test result, returned as a logical vector.

    • A value of 1 rejects the null hypothesis at the specified confidence level.

    • A value of 0 fails to reject the null hypothesis at the specified confidence level.

    Output metrics, returned as a structure with the following fields:

    • Method — Method used for the hypothesis test.

    • Results — Table with columns:

      • RejectCorrBinTest — Logical vector that indicates whether the null hypothesis was rejected. This column represents the same values as hCorrBinTest.

      • NumEvents — Number of events observed. This column is the test statistic for the hypothesis test.

      • CriticalValue — Minimum number of events at which the test rejects the null hypothesis for the given probability and confidence level.

      • PValuep-value for the hypothesis test returned as a scalar in the range [0,1]. A small value indicates that the null hypothesis might not be valid.

      • ConfidenceLevel — Confidence level for the hypothesis test.

      • NumTrials — Number of trials.

      • Probability — Probability values.

      • ObservedProbability — Ratio of NumEvents to NumTrials.

      • Correlation — Model correlation.

      • EventCorrelation — Implied correlation between events.

    More About

    collapse all

    References

    [1] Basel Committee on Banking Supervision, “Studies on the Validation of Internal Rating Systems”, Working Paper 14, May, 2005. https://www.bis.org/publ/bcbs_wp14.htm.

    Version History

    Introduced in R2025a